Forum: Mikrocontroller und Digitale Elektronik ATmega32 Pegel-Problem


von Jannes W. (janwol)


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

von holger (Gast)


Lesenswert?

Schliess AVCC an.

von Coder (Gast)


Lesenswert?

der code ist hoffentlich in einer while(1) - Schleife.

von Spess53 (Gast)


Lesenswert?

Hi

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

Komplettes Programm posten.

MfG Spess

von Jannes W. (janwol)


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

  }
}

von Coder (Gast)


Lesenswert?

Und im complierten code ist die while(1)-Schleife noch vorhanden?

von Jannes W. (janwol)


Lesenswert?

Coder schrieb:
> Und im complierten code ist die while(1)-Schleife noch vorhanden?

Wie stelle ich das fest ?

von fooo (Gast)


Lesenswert?

optimierungsstufe?
wird die schleife wegoptimiert?

von fooo (Gast)


Lesenswert?

Jannes W. schrieb:
> Wie stelle ich das fest ?

in das .map-file schauen

von Coder (Gast)


Lesenswert?

Versuch mal
1
int main(void)
2
{
3
 volatile char i;
4
  DDRA = 0xff;
5
  PORTA= 0b00000011;
6
7
  while(1)
8
  {
9
   i++;
10
  }
11
}

von Coder (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

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

Falschen Controller eingestellt, falsche Hexdatei gebrannt?

von Jannes W. (janwol)


Lesenswert?

Mit dem Code stellen sich an PA0 - PA5 knapp 2,6V ein.

Die .map-datei ist für laien schwer zu interpretieren.

von Coder (Gast)


Lesenswert?

dein Programmiergerät vom gerät getrennt?
vielleicht ein externen Watchdog dran?
VCC (nicht AVCC) hat wieviel?
Reset leitung in der Luft?

von holger (Gast)


Lesenswert?

>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.

von Jannes W. (janwol)


Lesenswert?

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!!

von Coder (Gast)


Lesenswert?

hast es wenigstens selbst gefunden :-)

von Jannes W. (janwol)


Lesenswert?

Ja, leider ein sehr doofer Fehler. :D

Schönen Abend euch allen noch! :)

von Fronk (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.