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
Hi >Wäre toll, wenn ihr vielleicht ein paar Hinweise für mögliche >Fehlerquellen hättet. Komplettes Programm posten. MfG Spess
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) { } }
Coder schrieb: > Und im complierten code ist die while(1)-Schleife noch vorhanden? Wie stelle ich das fest ?
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 | }
|
Sowas sieht man im disassembler. Wenn Compiler-Optimierungen eingeschaltet, könnte vielleicht eine leere while-schleife raus fliegen.
>Das Problem habe ich ebenfalls, >wenn ich einen anderen Port benutze. Falschen Controller eingestellt, falsche Hexdatei gebrannt?
Mit dem Code stellen sich an PA0 - PA5 knapp 2,6V ein. Die .map-datei ist für laien schwer zu interpretieren.
dein Programmiergerät vom gerät getrennt? vielleicht ein externen Watchdog dran? VCC (nicht AVCC) hat wieviel? Reset leitung in der Luft?
>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.
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!!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.