Störningar i I/O-port i ATMega16

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Störningar i I/O-port i ATMega16

Inlägg av Harald »

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
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

det drar väl ingen ström fören du sänker benet. Ha det i högipedans läge eller högt så drar det inget.
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Det är ju sant om kvittensen från användaren är en puls. Men vad ska jag göra med de övriga insignalerna? Jag har sju Hex-vridströmställare. Det blir 28 I/O-pinnar. Till dessa skulle man ju kunna koppla in jordstiftet just innan man läser värdet men ska man verkligen behöva göra så? Kan störningar komma via matningsspänningen? Jag har ingen konding på kortet där processorn sitter. Kan det vara det som spökar?
/Harald
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

En avstörningskonding vid processorn är aldrig en fel ide.

Men har du enablat pulluppen på inpinnarna?

Först se till att PDU-bitten är 0'a.

The Pull-up Disable PUD bit in SFIOR disables the pull-up function for all pins in all ports when set.

Sen så måste du skriva 1'or i PORTxn på dom pinnar som du vill ha pulluppen aktiverad på.

If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output pin. The port pins are tri-stated when a reset condition becomes active, even if no clocks are running.
Användarvisningsbild
Melker
Inlägg: 410
Blev medlem: 26 maj 2003, 22:17:34
Ort: Umeå

Re: Störningar i I/O-port i ATMega16

Inlägg av Melker »

Harald skrev: sbi PINB,0x02 ;om PORTB, bit 2 = 1 så utför nästa rad
rjmp START_LOOP
sbi används för att sätta en bit i ett register, vad jag tror du tänkt använda är sbic (skip if bit in i/o register cleared)...
in TEMP,PINB <- vad är tänkt med denna rad?
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Matseng,
Jag ska slänga in en 100 uF över matningsspänningen på kortet.
Intressant att man kan släppa pull-up-motståndet genom att initiera stiftet som out. Här kan jag ju få ner strömförbrukningen en hel del, för all initiering sker innan användaren trycker på startknappen.
Att man fått in alla dessa funktioner i denna lilla krets är imponerande…!
/Harald
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Melker,
Jag har använt sbic. Jag skrev av fel från mitt program…

in TEMP,PINB <- vad är tänkt med denna rad?

Här läser jag PORTB och lägger resultatet i TEMP och det funkar… Om man läser en hel port så är det väl bara de bitar som är initierade som ingångar som påverkas? Förresten kollar jag därefter bara de bitar som är intressanta.

Faktum är att jag tycker att jag fått en viss ordning på det här nu efter att jag tidigare ställde en himla massa konstiga frågor här i forumet om räknenoggrannhet och räknare… Att stega igenom i simulatorn tycker jag är enormt bra. Saknar dock simulatorprogram för AT90S1200 som jag också tänkt använda i detta projekt.
/Harald
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

En 100uF är säkert bra borta vid stabben på kortet. Men den är inte särskilt bra för att ta bort störningar från snabbt switchande logik. En 0.01uF till 0.1uF är mera lämpad för det. Använd så korta ledningar mellan störkällor och avstörningskondensatorerna som möjligt.

Om du har en vanlig 7805 stabb på kortet så se till att du har typ 0.1uF både framför och bakom den. Annars kan självsvängning uppstå i stabben och det kan ge ganska otrevliga resultat för resten av bygget.
Skriv svar