Étape 3: Code
Il y a 2 variables que j’ai envie de vous regarder avant de passer à l’étape suivante, voilà l’expérience times (t_25, t_16, t_9, t_4 et t_1) et le facteur de marche à la fois (le nombre dans la première _delay_ms() appeler dans chaque boucle for)
Le code a été écrit en Studio d’Atmel. Pour télécharger le code, j’ai utilisé avrdude. Les deux sont gratuits. À l’aide d’avrdude, vous pouvez télécharger le fichier hex inclus à l’intérieur du dossier zip attaché à cette étape en utilisant la ligne suivante à l’invite de commande après que vous naviguez vers le dossier approprié :
avrdude - c usbtiny -p t85 - U flash:w:rde2.hex
En utilisant un arduino ferait cela beaucoup plus facile mais plus cher. Sur un arduino, vous avez une fonction AnalogWrite() qui permettrait de simplifier beaucoup de cela. La circulation deviendrait alors AnalogWrite(voltage_desired)--> delay(experiment_time)--> répétition...
#include < avr/io.h >
#include < util/delay.h >
#define F_CPU 800000UL
flotteur t_25, t_16, t_9, t_4, t_1 ; type de flotteur n’est pas nécessaire, mais j’ai beaucoup de mémoire
int main (void)
{
préréglé pour 1V domaine @ fréquence 5mV/s. Changer si votre expérience est différente.
t_25 = 207*207000/(2.1920*227) ; 207000 est la durée de l’expérience en millisecondes
t_16 = 207*207000/(1.5580*227) ; 207/227 est une constante de calibration
t_9 = 207*304000/(1.2585*227) ; 2.1920, 1.5580, etc. sont les longueurs de la pour les lignes correspondant à cette partie de l’expérience
t_4 = 207*304000/(1.1000*227) ;
T_1 = 207*304000/(1.0220*227) ;
broche de sortie réglée
DDRB | = (1 << DDB0) | (1 << DDB1) ;
mode rapide de PWM, génération de forme d’ondes bit [1:0]
TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01) ;
embouts de forme d’onde [2], prescalar 1024
TCCR0B = (1 << WGM02) | (1 << CS02) | (1 << CS00) ;
sortie comparer s’inscrire
OCR0A = 0 ;
pour (float t = 0; t < t_25; t ++)
{
PORTB | = (1 << PB1) ;
_delay_ms(1.192) ; Cela définit le facteur d’utilisation et donc la sortie de tension analogique
PORTB & = ~ (1 << PB1) ; une valeur plus élevée donne un plus grand rapport cyclique et donc une tension plus élevée
_delay_ms(1) ; le 1 ms (au large) retard est choisi arbitrairement
}
pour (float t = 0; t < t_16; t ++)
{
PORTB | = (1 << PB1) ;
_delay_ms(0.558) ;
PORTB & = ~ (1 << PB1) ;
_delay_ms(1) ;
}
pour (float t = 0; t < t_9; t ++)
{
PORTB | = (1 << PB1) ;
_delay_ms((0.2585)) ;
PORTB & = ~ (1 << PB1) ;
_delay_ms(1) ;
}
pour (float t = 0; t < t_4; t ++)
{
PORTB | = (1 << PB1) ;
_delay_ms(0.1) ;
PORTB & = ~ (1 << PB1) ;
_delay_ms(1) ;
}
pour (float t = 0; t < t_1; t ++)
{
PORTB | = (1 << PB1) ;
_delay_ms(0.022) ;
PORTB & = ~ (1 << PB1) ;
_delay_ms(1) ;
}
while(1) / / fin d’État
{
PORTB | = (1 << PB1) ;
_delay_ms(0) ;
PORTB & = ~ (1 << PB1) ;
_delay_ms(600000) ; 10 minutes pour éviter le bruit sur la ligne
}
}