Jag försöker läsa av elmätarens diod. Konstigt nog läser jag ofta flera pulser fastän det bara ska vara en. Jag förstår inte varför. Det borde inte fungera som en knapp där man får kontaktstuds.
Jag har en fototransistor i en darlingtonkoppling och använder AVRmega'ns komparator för att generera ett interrupt på lysdiodens uppgående flank (läses på nedåtgående flank då transistorkopplingen inverterar signalen). OBS! Fel symbol för fototransistorn.
Nu har jag byggt upp en exprimentkoppling på labbplattan, där jag genererar blinkande pulser från AVR'en, så jag vet när de kommer och att de är rena. Jag får dock fortfarande fler pulser än en. (Alltså samma resultat i två helt separata uppkopplingar.) Nedan ses antalet registrerade interrupts per puls. (Jag har eliminerat ev störade bakgrundsljus.)
Kod: Markera allt
1, 2, 2, 1, 2, 1, 2, 2, 3, 2
2, 4, 2, 1, 2, 1, 2, 2, 3, 2
1, 2, 1, 2, 4, 2, 4, 2, 3, 3
2, 4, 4, 2, 2, 2, 2, 2, 2, 2
4, 2, 3, 3, 1, 2, 4, 3, 1, 3
1, 1, 1, 2, 1, 2, 4, 3, 2, 1
2, 1, 3, 2, 1, 1, 1, 3, 3, 3
2, 2, 2, 1, 1, 1, 2, 2, 3, 3
3, 1, 2, 3, 2, 1, 1, 3, 3, 1
Kod: Markera allt
<Initiering>
//Set Analog comparator to issue interrupt on negative flank
ADCSRB = 0; // Use AIN1 for negative input
ACSR = (1 << ACIE) | (1 << ACIS1) | (0 << ACIS0); // Enable interrupt on falling edge
DIDR1 = (1 << AIN1D) | (1 << AIN0D); // Disable digital input
<Interruptrutin>
ISR(ANALOG_COMP_vect,ISR_BLOCK) //Analog comparator IRQ
{
count++;
}
Pulserna är tyvärr för korta för att ge en bra bild på oscilloskopet, men jag har svårt att se varför jag får multipla läsningar även om flankerna inte är så branta.
Förslag på vad som kan vara "fel"? Vill helst slippa "fula" lösningar som att bara läsa första pulsen inom en vis tid, vill hellre förstå varför det blir så här.