AVR Atmega168 IO spänning?
AVR Atmega168 IO spänning?
Hej,
Sitter med ett skumt problem med min Atmega 168. Driver den med 3.3V, som skall vara OK enligt datablad (2.7-5.5V), alla mätningar med multimeter ser bra ut och jag har ett program som trycker ut data till serieporten i en loop. So far, so good.
När jag dock lägger ut en logisk "etta" på IO pinnarna (i detta fall, PORTC, PIN PC6), så ligger spänningen bara på ca 2.4V, när min periferienhet förväntar sig 2.7-3.3V.
Borde inte en logisk etta motsvara 3.3V på pinnen om jag mäter med en multimeter?
Jag tror att serieporten fungerar eftersom jag har kopplat den via en FTDI-pryl, som förmodligen accepterar ett större spänningsintervall.
Sitter med ett skumt problem med min Atmega 168. Driver den med 3.3V, som skall vara OK enligt datablad (2.7-5.5V), alla mätningar med multimeter ser bra ut och jag har ett program som trycker ut data till serieporten i en loop. So far, so good.
När jag dock lägger ut en logisk "etta" på IO pinnarna (i detta fall, PORTC, PIN PC6), så ligger spänningen bara på ca 2.4V, när min periferienhet förväntar sig 2.7-3.3V.
Borde inte en logisk etta motsvara 3.3V på pinnen om jag mäter med en multimeter?
Jag tror att serieporten fungerar eftersom jag har kopplat den via en FTDI-pryl, som förmodligen accepterar ett större spänningsintervall.
Re: AVR Atmega168 IO spänning?
DE ligger normalt väldigt nära matningsspänningen, 2.4V beror antingen på att du pulsar din signal fortare än du hinner se högt/lågt läge, felkonfigurerad utgång eller att du belastar den för hårt.
Re: AVR Atmega168 IO spänning?
Jag pulsar inte särskilt hårt. Triggar den i 5 sekunder, sen låter jag den gå låg i 5 sekunder, i en loop. Och så mäter jag på pinnen, som är helt olastad.
Får kanske kika igenom pinkonfigurationen isf, just nu kör jag reset "default" på allt.
Får kanske kika igenom pinkonfigurationen isf, just nu kör jag reset "default" på allt.
-
- Inlägg: 8445
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: AVR Atmega168 IO spänning?
AndLi har rätt, du har felkonfigurerade pinnar, gör om gör rätt...
En 168 kan driva väldigt mycket både uppåt och nedåt så det är ingen begränsning i ditt fall.
En 168 kan driva väldigt mycket både uppåt och nedåt så det är ingen begränsning i ditt fall.
Re: AVR Atmega168 IO spänning?
> ...just nu kör jag reset "default" på allt.
Varför det ? Varför inte köra så som du vill ha det ?
Varför det ? Varför inte köra så som du vill ha det ?
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Re: AVR Atmega168 IO spänning?
Hur har du definierat PC6?
Jag gissar på att det är där problemet ligger. Jag har upplevt liknande problem då jag inte definierat portarna ordentligt.
Jag gissar på att det är där problemet ligger. Jag har upplevt liknande problem då jag inte definierat portarna ordentligt.
Re: AVR Atmega168 IO spänning?
C:
Assembler:
Kod: Markera allt
DDRC = (1<<PC6) // nu blir PC6 en utgång.
Kod: Markera allt
ldi r16,(1<<PC6) ; ladda register med vilken port som ska vara utgång
out DDRC,r16 ; skicka till port-direction register
Re: AVR Atmega168 IO spänning?
Jag har konfigurerat pinnen till en utgång. Ledsen för ordvalet "default på allt", det är inte riktigt sant. Jag menade att jag inte gjort några speciella inställningar gällande PU-motstånd.
Nu har jag tittat igenom dokumentationen igen och vad jag kan se har ej PU-motståndskonfiguration någon betydelse när man använder pinnen som utgång? Speciellt enligt tabell 11-1 på sid 72 i ATMEGA88/168-manualen.
Detta är mitt "testprogram" (jag har bytt till PC5 för att se om det gjorde nån skillnad, men får ca 2.4V även på PC5):
Programmet kör fint och pinnen togglar mellan 0V och 2.4V på PC5.
Jag är osäker på om detta är rätt sätt att toggla pinnen på, då det också verkar finnas en PINC som enligt manual även kan användas för att toggla.
Nu har jag tittat igenom dokumentationen igen och vad jag kan se har ej PU-motståndskonfiguration någon betydelse när man använder pinnen som utgång? Speciellt enligt tabell 11-1 på sid 72 i ATMEGA88/168-manualen.
Detta är mitt "testprogram" (jag har bytt till PC5 för att se om det gjorde nån skillnad, men får ca 2.4V även på PC5):
Kod: Markera allt
int main(void)
{
int i;
DDRC |= _BV(PC5); /* configure output */
while (1) {
PORTC ^= _BV(PC5); /* toggle */
/* sleep for a while */
for (i = 0; i < 100; i++)
_delay_ms(100);
}
}
Jag är osäker på om detta är rätt sätt att toggla pinnen på, då det också verkar finnas en PINC som enligt manual även kan användas för att toggla.
. Vad jag förstår är dock huvudsyftet med PINC för att läsa pinvärde. Hur som helst får jag samma beteende om jag togglar bit PC5 i PORTC som PINC.Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
Re: AVR Atmega168 IO spänning?
> Jag har konfigurerat pinnen till en utgång.
Det var ju inte det du sa...
Hur mäter du ? Oscilloskop ?
Har du kollat matningsspänningen ?
Vad har du för övrigt gjort för att felsöka ??
Har du t.ex gjort det självklara att sätta DDRC "hårt" med en konstant
istället för de där operationerna (som jag inte vet vad de gör) ?
Det är ju en ganska uppenbar del av felsökningen...
Det var ju inte det du sa...

Hur mäter du ? Oscilloskop ?
Har du kollat matningsspänningen ?
Vad har du för övrigt gjort för att felsöka ??
Har du t.ex gjort det självklara att sätta DDRC "hårt" med en konstant
istället för de där operationerna (som jag inte vet vad de gör) ?
Det är ju en ganska uppenbar del av felsökningen...
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
Re: AVR Atmega168 IO spänning?
Läs på om delay_ms så tror jag det löser sig
void _delay_ms ( double __ms )
Perform a delay of __ms milliseconds, using _delay_loop_2().
The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).
The maximal possible delay is 262.14 ms / F_CPU in MHz.
void _delay_ms ( double __ms )
Perform a delay of __ms milliseconds, using _delay_loop_2().
The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).
The maximal possible delay is 262.14 ms / F_CPU in MHz.
Re: AVR Atmega168 IO spänning?
Jag mäter spänningen mellan jord och PC5-pinnen med en vanlig multimeter. Äger tyvärr inget oscilloskop. Med tanke på min långa delay mellan toggling av pinnar hinner spänningen gott och väl stabilisera sig på multimetern (vad jag kan se).
Jag har kollat matningsspänningen. Mitt ursprungsprogram är mycket större, så mitt övriga försök till felsökning har varit att koka ner programmet till det ovan inklistrade lilla program.
Programmet är redan så hårdkodat det går, _BV() är bara ett makro som ingår i AVR-sviten, det utvecklas till en bitskiftning. [#define _BV(x) (1 << (x))]
Tror ni det kan vara fel på chippet? Jag funderar på att bara pröva med en annan Atmega168, men just nu har jag inga liggandes så det får bli ett besök till ELFA.
Jag har kollat matningsspänningen. Mitt ursprungsprogram är mycket större, så mitt övriga försök till felsökning har varit att koka ner programmet till det ovan inklistrade lilla program.
Programmet är redan så hårdkodat det går, _BV() är bara ett makro som ingår i AVR-sviten, det utvecklas till en bitskiftning. [#define _BV(x) (1 << (x))]
Tror ni det kan vara fel på chippet? Jag funderar på att bara pröva med en annan Atmega168, men just nu har jag inga liggandes så det får bli ett besök till ELFA.
Re: AVR Atmega168 IO spänning?
Jag har läst dokumentationen, men kanske missat något? Ser du några uppenbara fel?
Jag har definierat F_CPU, och kör på 1 MHz, alltså borde det vara 100 ms vara ett giltigt värde. Hur som helst får jag även 2.4V om jag bara slår på pinnen och aldrig togglar den (dvs helt utan delay eller loop).
Jag har definierat F_CPU, och kör på 1 MHz, alltså borde det vara 100 ms vara ett giltigt värde. Hur som helst får jag även 2.4V om jag bara slår på pinnen och aldrig togglar den (dvs helt utan delay eller loop).
thepirateboy skrev:Läs på om delay_ms så tror jag det löser sig
void _delay_ms ( double __ms )
Perform a delay of __ms milliseconds, using _delay_loop_2().
The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).
The maximal possible delay is 262.14 ms / F_CPU in MHz.
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
Re: AVR Atmega168 IO spänning?
Oki, det brukar annars vara ett vanligt fel att anropa med för långa delayer.
Har du matning även på AVCC?
Har du matning även på AVCC?
Re: AVR Atmega168 IO spänning?
Nix, ingenting på varken AVCC eller AGND. Det borde jag nog kolla upp, tack 
