Hallo zusammen Ich versuche mich als Neuling an der Programmierung eines atmega8. Ich bin über das hervorrangende Tutorial hier gestolpert und veruche mich nach diesem einzuarbeiten. Zur Übertragung der HEX-Daten verwende ich PonyProg2000. Ich habe ein kleines Assembler-Programm kompiliet mit AVR-Studio. Eine LED soll angehen. Die Kompilierung sowie das Übertragen des Hex-Files lief problemlos. Die LED geht nach dem Übertragen einmal an und wieder aus. Sie bleibt nicht an. Es sieht so aus, als wenn der Code nur einmal abgearbeitet wird. Auch andere Programme verhielten sich ähnlich. Weil ich nun nicht mehr weiterkomme, wende ich micht hier an das Forum. Viele Grüße Christoph
Der Coede ist aus dem Tutorial: .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden ldi r16, 0xFF ; lade Arbeitsregister r16 mit der Konstanten 0xFF out DDRB, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben ldi r16, 0b11111100 ; 0b11111100 in r16 laden out PORTB, r16 ; r16 ins IO-Register PORTB ausgeben ende: rjmp ende ; Sprung zur Marke "ende" -> Endlosschleife Es wurde keine Endlosschleife vergessen. Gruß Christoph
Was erwartest du? Der Code wird einmal abgearbeitet und danach hängt der Controller in einer Endlosschleife, die ausser in sich selbst zu schleifen nichts macht.
Die LED soll aber an bleiben. Der Wert von Ausgang B soll sich nicht wieder ändern, solange die Schleife läuft. Die LED blinkt aber nur einmal auf und bleibt danach aus. Gruß Christoph
Falk Brunner wrote: > Quelltext? Siehe Beitrag "Re: AVR Programm läuft nicht" Guten Morgen, Falk ;o)
1 | 1 .include "m8def.inc" |
2 | 2 |
3 | 3 ldi r16, 0xFF |
4 | 4 out DDRB, r16 |
5 | 5 |
6 | 6 ldi r16, 0b11111100 ; 0b11111100 in r16 laden |
7 | 7 out PORTB, r16 |
8 | |
9 | 8 ende: rjmp ende |
> >Ja, der Fehler liegt in deinem Programm, in Zeile 24. Hm.. Offensichtlich ist meine Glaskugel kaputt.. Nur zur Info:
1 | ldi r16, 0b11111100 ; 0b11111100 in r16 laden |
MEinst du, solche Kommentare sind sinnvoll?
Christoph Schulz wrote: > Die LED soll aber an bleiben. Der Wert von Ausgang B soll sich nicht > wieder ändern, solange die Schleife läuft. Die LED blinkt aber nur > einmal auf und bleibt danach aus. 1. An welchem (Port-)Pin hängt die LED? 2. Ist die LED gegen VCC oder GND geschaltet? 3. Hängt die LED direkt am Port, oder hängt dazwischen noch eine (invertierende) Treiberstufe?
Das ist ein Beispiel aus dem Tutorial. Der Code sowie die Kommentare sind nicht von mir. Gruß Christoph
Er erwartet das die LED anbleibt und das sollte sie auch eigentlich!!! Miss doch mal nach was der Controller für Strom zieht nachdem die Led ausgegangen ist. Was für nen Wiederstand sitzt den vor LED und wie ist sie angeschlossen??? Gruss
Änder doch mal 6 ldi r16, 0b11111100 ; 0b11111100 in r16 laden in 6 ldi r16, 0b00000011 ; Wenn du gegen die Led zwischen Portpin und Vcc legst must du dich nicht wundern...
Die LED ist an Port B0 über einen 330 Ohm Widerstand an VCC. Die LED geht nach Übertragen des Programmes auch kurz an. Die Werte von r16 habe ich auch schon geändert. Wenn ich den Ausgangswert auf 1 setze bleibt sie aus und blinkt auch nicht beim ersten Durchlauf auf.
Spasseshalber, wo befindet sich PB0 am Mega8? Ich gehe davon aus das du einen PDIP benutzt, oder? Wenn die Led gegen Vcc geschaltet ist, ists richtig das die Led bei 0b11111110 leuchtet.
> Wenn die Led gegen Vcc geschaltet ist, ists richtig das die Led bei > 0b11111110 leuchtet. Richtig. Da nach dem Setzen der Portpins eine leere Endlosschleife kommt, dürfte die LED aber nicht aus gehen. Mal ein paar Vermutungen: 1. Probleme mit der Spannungsversorgung. 2. Fehlerhafte Beschaltung des RESET-Pins. 3. Der (noch) angeschlossene Programmieradapter macht Probleme. 4. Der gepostete Code ist nicht identisch mit dem Code, der den beschriebenen Fehler produziert. Gruß, Magnetus
Die Spannung bleibt stabil Der Reset ist über 1 kOhm an VCC und über 250nF an GND. Programmieradapter habe ich nocht nicht abgesteckt, könnte eine Möglichkeit sein. Muss ich testen Der Code ist identisch. Habe ihn ausgelesen und verglichen.
Hallo Magnus Es lag an dem Programmieradapter. Wenn ich diesen abstecke, funktioniert auch die Schaltung. Vielen Dank! Du hast den entscheidenen Hinweis gehabt und mir sehr geholfen. Danke auch an alle anderen. Viele Grüße Christoph
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.