ATmega32 Pegel-Problem

OP #3234123
Lesenswert?

Hallo Community,

ich fange gerade an mich mit der Mikrocontrollerprogrammierung zu 
beschäftigen und bin auf ein Problem gestoßen, dessen Ursache ich nicht 
ausfindig machen kann.

Ich arbeite mit einem atmega32 und einem USBasp Programmiergerät.
Nun versuche ich einfach auf zwei Pins den High-Pegel, sprich 
Betriebsspannung, zu legen.

DDRA = 0xff;
PORTA= 0b00000011;

Messen kann man an den Pins PA0 bis PA1 dann zwischen 1V und 2,7V ( je 
nachdem wann man misst ) und keine 5V ( PA3 bis PA5 ebenfalls 1V - 
2,7V). PA6 und PA7 sind bei 0V.
Beim Programmieren wird folgendes angezeigt:


avrdude -p atmega32 -P usb -c usbasp    -U flash:w:main.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.02s

avrdude: Device signature = 0x1e9502
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (120 bytes):

Writing | ################################################## | 100% 
1.05s

avrdude: 120 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex auto detected as Intel Hex
avrdude: input file main.hex contains 120 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.53s

avrdude: verifying ...
avrdude: 120 bytes of flash verified

avrdude done.  Thank you.


Wäre toll, wenn ihr vielleicht ein paar Hinweise für mögliche 
Fehlerquellen hättet.

MfG Jannes
OP #3234137
Lesenswert?

Vielen Dank für die schnelle Rückmeldung!

Wenn ich über AVCC messe werden wir 5V angezeigt, muss da noch 
zusätzlich etwas beschaltet werden ? Das Problem habe ich ebenfalls, 
wenn ich einen anderen Port benutze.

Das Programm sieht so aus:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  DDRA = 0xff;
  PORTA= 0b00000011;

  while(1)
  {

  }
}
Gast #3234214
Lesenswert?

Coder schrieb:
> Sowas sieht man im disassembler. Wenn Compiler-Optimierungen
> eingeschaltet, könnte vielleicht eine leere while-schleife raus fliegen.

Wieso sollte der Compiler das tun dürfen?

Bei "while (1)" darf er die Abfrage streichen (weil 1 nunmal immer wahr 
ist) und einfach einen unbedingten Sprung verwenden. Die Endlosschleife 
muss aber bleiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren