Il manque les résistances en série avec les LED !
-----

Il manque les résistances en série avec les LED !
Et propose-nous un code... On en discute après.
Je ne connais pas les AVR donc je peux me tromper mais :
Page 82 de la doc :
RESET, Reset pin: When the RSTDISBL Fuse is programmed, this pin functions as a normal I/Opin [...] When the RSTDISBL Fuse is unprogrammed, the reset circuitry is connected to the pin,
Dans ta capture d'écran le Fuse est "unprogrammed" et pas de pull-up sur le pin reset
Ensuite va a la page 261 :
- Pull-up resistors on the dW/(RESET) line must not be smaller than 10kΩ.
- Connecting the RESET pin directly to VCC will not work
Voilà ! Il y a tout dans la doc ! Il faut la lire !
Bonjour, voici le code source que j'ai écrit.
MerciCode:/* * Timer_avec_quartz_2.c * * Created: 14/04/2015 13:24:02 * Author: utilisateur */ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/wdt.h> #include <avr/signal.h> #include <util/delay.h> #define PER_1s 78125/10 int compteur=0, commande=0 ; ISR(TIMER0_OVF_vect) { compteur++ ; if (compteur < PER_1s) return ; compteur=0 ; if (commande){ PORTD = 0x0F ; PORTC = 0x00 ; } else{ PORTC = 0x0F ; PORTD = 0x00 ;} commande = ~ commande ; } /*ISR(WDT_vect) { if (commande==0) PORTD = 0x0F ; else PORTC = 0x0F ; commande = 1 ; wdt_disable(); wdt_reset(); _delay_ms(1000); PORTD = 0 ; PORTC = 0 ; } */ int main(void) { //ASSR &=~(1<<EXCLK); ASSR &=~(1<<0x07); ASSR |=(1<<EXCLK); ASSR|=(1<<AS2); DDRD = 0xFF ; PORTD = 0xFF ; //PORTD = 0 ; DDRC = 0xFF ; PORTC = 0xFF ; //PORTC = 0 ; DDRB = 0x0 ; /*wdt_disable(); wdt_reset();*/ //WDTCSR |=(1<<WDIE); /*wdt_enable(WDTO_1S); WDTCSR = 0b01001000 ;*/ TCCR0A = 0 ; // active le mode normal //TCCR0A = 1; // active le mode CTC TCCR0B = 0b00000001 ; TIMSK0 |= (1<<TOIE0); sei(); while(1) { } }
Dernière modification par Antoane ; 15/04/2015 à 11h58. Motif: Réparation balises code
Le prochain coup, utilises des balises CODE pour rendre ton code plus lisible... Là c'est une misère à lire ! (EDIT : la balise c'est des [] pas des <> !)
Pourquoi utiliser les timers et les interruptions ? Ya moyen de faire plus simple...
Tu compiles avec quoi ? Tu dois pouvoir trouver une fonction delay__ms qui pourrait te rendre bien des services ! Cherche dans tes bibliothèques de code...!
DEBUT:
portB = 255
portC = 0
tempo1s
portB = 0
portC = 255
tempo1s
goto DEBUT
Ne pas oublier l'initialisation et le mot de config.
Tu traduis dans ton langage.
Petit indice également si tu utilises une fonction de délai : il est impératif de déclarer la vitesse de ton quartz dans l'en tête du programme, puis de suivre une trame de programme comme celle proposée par Gérard. Il n'y a pas plus simple !!
Merci à vous pour ces explications.
Au fait, Yoruck excuses moi mais quand tu dis de définir la vitesse de mon quartz,
je crois que c'est ça que j'ai voulu faire en faisant
#define PER_1s 78125/10
Mais apparemment cela ne marche. Sinon pourrais tu stp m'expliquer comment bien procéder?
Merci
Cherche des exemples de code utilisant des délais... La vitesse du quartz est à indiquer dans l'en-tête de programme. En tout cas #define PER_1s 78125/10 ne ressemble pas à ce type de déclaration. Et normalement tu donnes la valeur directe du quartz, pas une division étrange.![]()
OK merci. Je comprend maintenant ce que tu dis.
Cordialement
