Paso 3: código
Hay 2 variables que quiero que mire antes de ir al siguiente paso, son el experimento de las épocas (t_25, t_16, t_9, t_4 y t_1) y el deber del ciclo a veces (el número en la primera _delay_ms() llamar en cada bucle for)
El código fue escrito en estudio de Atmel. Para cargar el código, he usado avrdude. Ambos son gratis. Usando avrdude, puede cargar el archivo hexadecimal incluido dentro de la carpeta zip que se adjunta a este paso mediante la línea siguiente en el símbolo del sistema después de que usted vaya a la carpeta correcta:
avrdude - c usbtiny p - t85 flash:w:rde2.hex - U
Utilizando un arduino esto haría mucho más fácil pero más caro. En un arduino tiene una función AnalogWrite() que simplificaría mucho de esto. El flujo se convertiría entonces en AnalogWrite(voltage_desired)--> delay(experiment_time)--> repetir...
#include < avr/io.h >
#include < util/delay.h >
#define F_CPU 800000UL
flotador t_25, t_16, t_9, t_4 t_1; tipo de flotador es innecesario pero tengo un montón de memoria
int Main
{
preselección para el dominio de 1V a 5mV/seg. Cambio si tu experimento es diferente.
t_25 = 207*207000/(2.1920*227); 207000 es la longitud del experimento en milisegundos
t_16 = 207*207000/(1.5580*227); 207/227 es una constante de calibración
t_9 = 207*304000/(1.2585*227); 2.1920, 1.5580, etc. son las longitudes de la para bucles correspondientes a esa parte del experimento
t_4 = 207*304000/(1.1000*227);
t_1 = 207*304000/(1.0220*227);
pin de salida set
DDRB | = (1 << DDB0) | (1 << DDB1);
modo rápido de PWM, generación de forma de onda del pedacito [1:0]
TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
bits de forma de onda [2], prescalar 1024
TCCR0B = (1 << WGM02) | (1 << CS02) | (1 << CS00);
registro de salida compara
OCR0A = 0;
para (float t = 0; t < t_25; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(1.192); Esto define el ciclo de trabajo y, por tanto, la salida de tensión analógica
PORTB & = ~ (1 << PB1); un valor más grande le da un mayor ciclo de trabajo y así un voltaje más alto
_delay_ms(1); 1 retraso de ms (apagado) se elige arbitrariamente
}
para (float t = 0; t < t_16; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.558);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
para (float t = 0; t < t_9; t ++)
{
PORTB | = (1 << PB1);
_delay_ms((0.2585));
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
para (float t = 0; t < t_4; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.1);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
para (float t = 0; t < t_1; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.022);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
while(1) / / estado de extremo
{
PORTB | = (1 << PB1);
_delay_ms(0);
PORTB & = ~ (1 << PB1);
_delay_ms(600000); 10 minutos para evitar ruido en la línea
}
}