Bonjour,
Je me suis remis aux µC pour un besoin perso, mais impossible de faire fonctionner une interruption ! Je souhaite détecter une horloge carrée 0-5V de 1KHz. Pour cela je voudrais détecter le moment où le signal passe de 0V à 5V sur l'entrée INT0 de mon ATTINY85. Pour l'instant je simule avec un BP mais rien n'y fait. La LED doit s'allumer 500 ms... J'ai dû mal configurer un truc.
Par la suite je souhaiterais incrémenter une variable à chaque interruption, histoire que mon système ne s'enclenche pas pour rien (une impulsion parasite par exemple). Donc, le but serait de compter les impulsions de l'horloge (par exemple 10) et seulement à ce moment à ma condition est remplie. Seul hic, il faudrait que ce compteur se remette à zéro toutes les secondes environ, pour éviter d'accumuler les parasites qui finiront par atteindre 10 même si c'est das 3 jours !
Voici mon code :
D'après ce code, qu'est ce que j'ai mal fais ?Code:#include <tiny85.h> #include <delay.h> // Declare your global variables here // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { PORTB.5 = 1; delay_ms(500); PORTB.5 = 0; } void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit5=Out Bit4=Out Bit3=Out Bit2=In Bit1=In Bit0=In DDRB=(1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit5=0 Bit4=0 Bit3=0 Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // Interrupt on any change on pins PCINT0-5: Off GIMSK=(1<<INT0) | (0<<PCIE); MCUCR=(1<<ISC01) | (1<<ISC00); GIFR=(1<<INTF0) | (0<<PCIF); // Global enable interrupts #asm("sei") PORTB.5 = 1; delay_ms(500); PORTB.5 = 0; while (1) { // Place your code here } }
Merci
-----