AVR Atmega168 IO spänning?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

AVR Atmega168 IO spänning?

Inlägg av blastur »

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.
Användarvisningsbild
AndLi
Inlägg: 18263
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: AVR Atmega168 IO spänning?

Inlägg av AndLi »

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.
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

Re: AVR Atmega168 IO spänning?

Inlägg av blastur »

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.
Användarvisningsbild
AndLi
Inlägg: 18263
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: AVR Atmega168 IO spänning?

Inlägg av AndLi »

default är de väl pulluppade ingångar?
limpan4all
Inlägg: 8445
Blev medlem: 15 april 2006, 18:57:29
Ort: Typ Nyköping

Re: AVR Atmega168 IO spänning?

Inlägg av limpan4all »

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.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: AVR Atmega168 IO spänning?

Inlägg av sodjan »

> ...just nu kör jag reset "default" på allt.

Varför det ? Varför inte köra så som du vill ha det ?
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Re: AVR Atmega168 IO spänning?

Inlägg av MicaelKarlsson »

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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: AVR Atmega168 IO spänning?

Inlägg av jesse »

C:

Kod: Markera allt

DDRC = (1<<PC6) // nu blir PC6 en utgång.
Assembler:

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
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

Re: AVR Atmega168 IO spänning?

Inlägg av blastur »

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):

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);
	}
}
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.
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
. 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.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: AVR Atmega168 IO spänning?

Inlägg av sodjan »

> Jag har konfigurerat pinnen till en utgång.

Det var ju inte det du sa... :roll:

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...
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Re: AVR Atmega168 IO spänning?

Inlägg av thepirateboy »

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.
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

Re: AVR Atmega168 IO spänning?

Inlägg av blastur »

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.
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

Re: AVR Atmega168 IO spänning?

Inlägg av blastur »

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).
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.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Re: AVR Atmega168 IO spänning?

Inlägg av thepirateboy »

Oki, det brukar annars vara ett vanligt fel att anropa med för långa delayer.

Har du matning även på AVCC?
Användarvisningsbild
blastur
Inlägg: 194
Blev medlem: 13 mars 2007, 00:07:26
Ort: Göteborg

Re: AVR Atmega168 IO spänning?

Inlägg av blastur »

Nix, ingenting på varken AVCC eller AGND. Det borde jag nog kolla upp, tack :)
Skriv svar