ATmega88 + Skumma interrupt
Postat: 7 april 2007, 03:34:05
Har suttit ett antal timmer med ett litet projekt som ska bli en egen variant av personsökare är det tänkt.
Har äntligen fått ihop en väl fungerande FFSK-demodulator m.h.a. en komparator + Mega88.
Har dock fått både grått och vitt och snart transparent hår innan allt slutligen funkade.
Har nämligen stött på en hel del skumma fenomen vad gäller främst Timer1 Overflow Interrupt, men även EXT1 Interrupt.
Timer1 har jag konstaterat en fantastisk förmåga att lösa ut så fort man försöker pilla på register tillhörande densamma, eller nollställa den (TCNT1).
Den slutliga lösningen fick bli en check så att TCNT1 verkligen är 0x0000, annars hoppar den bara ur interruptet (kör i 8MHz och clk/64 prescaler, så den hinner som tur är inte slå om).
Jag mäter nollgenomgångarna genom att läsa av TCNT1 och omgående nollställa TCNT1 för mätning nästa nollgenomgång.
Har någon hört talas om att det ska vara några problem med detta?
Googlade lite, och leta lite på avrfreaks, och jag hittade en person med samma fenomen på en Mega16 (har jag för mig).
Men ingen kunde säga om det var ett fel, utan alla föreslog bara att gå runt det (genom att spara föregående värde och dra av det från nästa värde, vilket funkar bra tills timern slår över. En massa onödig kod).
Har någon använt timern till något liknande och inte fått fenomen?
Jag har även nått skumt med EXT1 Interrupt som verkar aktiveras antingen genom "cli();" eller lite styrning på outputpinnar. Har tyvärr inte hunnit forska någe vidare djupt i det.
Men även här har jag fått lösa det genom att sätta en flagga då den inte får köra interruptet, och en IF-sats först i ISR:en som hoppar ut om flaggan är satt.
Rätt störande sätt att lösa det på, men enda vägen tydligen.
Har äntligen fått ihop en väl fungerande FFSK-demodulator m.h.a. en komparator + Mega88.
Har dock fått både grått och vitt och snart transparent hår innan allt slutligen funkade.
Har nämligen stött på en hel del skumma fenomen vad gäller främst Timer1 Overflow Interrupt, men även EXT1 Interrupt.
Timer1 har jag konstaterat en fantastisk förmåga att lösa ut så fort man försöker pilla på register tillhörande densamma, eller nollställa den (TCNT1).
Den slutliga lösningen fick bli en check så att TCNT1 verkligen är 0x0000, annars hoppar den bara ur interruptet (kör i 8MHz och clk/64 prescaler, så den hinner som tur är inte slå om).
Jag mäter nollgenomgångarna genom att läsa av TCNT1 och omgående nollställa TCNT1 för mätning nästa nollgenomgång.
Har någon hört talas om att det ska vara några problem med detta?
Googlade lite, och leta lite på avrfreaks, och jag hittade en person med samma fenomen på en Mega16 (har jag för mig).
Men ingen kunde säga om det var ett fel, utan alla föreslog bara att gå runt det (genom att spara föregående värde och dra av det från nästa värde, vilket funkar bra tills timern slår över. En massa onödig kod).
Har någon använt timern till något liknande och inte fått fenomen?
Jag har även nått skumt med EXT1 Interrupt som verkar aktiveras antingen genom "cli();" eller lite styrning på outputpinnar. Har tyvärr inte hunnit forska någe vidare djupt i det.
Men även här har jag fått lösa det genom att sätta en flagga då den inte får köra interruptet, och en IF-sats först i ISR:en som hoppar ut om flaggan är satt.
Rätt störande sätt att lösa det på, men enda vägen tydligen.