Störningar i I/O-port i ATMega16
Postat: 16 december 2003, 19:44:48
Störningar i I/O-port i ATMega16
Jag använder följande kod för att ta emot kvittens från användaren:
START_LOOP: ;invänta startsignal
cbi PORTB,6 ;släck lysdiod
rcall delay20ms
sbi PORTB,6 ;tänd lysdiod
In TEMP,PINB
rcall delay20ms
sbi PINB,0x02 ;om PORTB, bit 2 = 1 så utför nästa rad
rjmp START_LOOP
När man kommer hit så ska man alltså loopa och snabbflämta en lysdiod tills användaren kvitterar. Men programmet stannar bara ett kort ögonblick och fortsätter som om en kvittens inkommit.
Jag har löst det genom att lyfta upp PINB,0x02 med ett motstånd på 1 kohm till plus. Användaren kvitterar genom att jorda PINB,0x02.
Om jag kollar i databladet så kopplas ett motstånd på 20 – 50 kohm in vid läsning av alla I/O. Det är en tree state med mosfet.
Varför störs det? Måste man koppla in ett extra motstånd för att inte få in skräp? I de hårdvaruexempel jag sett så har man kopplat alla I/O till avkopplingskondensator. Det har jag provat men det störs ut ändå. Jag håller på med en batteridriven grej och för att inte ladda ur batteriet vill jag ha så liten belastning som möjligt. Jag skulle i och för sig kunna koppla in och ur motstånden med t ex ett SIL-relä men det känns sunkigt…
/Harald
Jag använder följande kod för att ta emot kvittens från användaren:
START_LOOP: ;invänta startsignal
cbi PORTB,6 ;släck lysdiod
rcall delay20ms
sbi PORTB,6 ;tänd lysdiod
In TEMP,PINB
rcall delay20ms
sbi PINB,0x02 ;om PORTB, bit 2 = 1 så utför nästa rad
rjmp START_LOOP
När man kommer hit så ska man alltså loopa och snabbflämta en lysdiod tills användaren kvitterar. Men programmet stannar bara ett kort ögonblick och fortsätter som om en kvittens inkommit.
Jag har löst det genom att lyfta upp PINB,0x02 med ett motstånd på 1 kohm till plus. Användaren kvitterar genom att jorda PINB,0x02.
Om jag kollar i databladet så kopplas ett motstånd på 20 – 50 kohm in vid läsning av alla I/O. Det är en tree state med mosfet.
Varför störs det? Måste man koppla in ett extra motstånd för att inte få in skräp? I de hårdvaruexempel jag sett så har man kopplat alla I/O till avkopplingskondensator. Det har jag provat men det störs ut ändå. Jag håller på med en batteridriven grej och för att inte ladda ur batteriet vill jag ha så liten belastning som möjligt. Jag skulle i och för sig kunna koppla in och ur motstånden med t ex ett SIL-relä men det känns sunkigt…
/Harald