ATmega32 Pegel-Problem

OP #3234123
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
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
>Mit dem Code stellen sich an PA0 - PA5 knapp 2,6V ein.

Was hängt da dran?

>Das Problem habe ich ebenfalls,
>wenn ich einen anderen Port benutze.

Bei Portc kommt noch die JTAG Fuse ins Spiel.
OP
Habe den Fehler gefunden. In der Makefile wurde ein gleichnamiges 
Programm aus einem anderen Ordner geladen. Nachdem ich es angepasst 
habe, konnte ich dann auch die 5V an den Pins messen.

Vielen vielen Dank für die Unterstützung!!
Gast
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.