Forum: Mikrocontroller und Digitale Elektronik AVR Programm läuft nicht


von Christoph S. (christophv)


Lesenswert?

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

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Source posten!

von Matthias L. (Gast)


Lesenswert?

Ja, der Fehler liegt in deinem Programm, in Zeile 24.

von Magnus Müller (Gast)


Lesenswert?

Endlosschleife vergessen.

von Christoph S. (christophv)


Lesenswert?

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

von Magnus Müller (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

Quelltext?

von Christoph S. (christophv)


Lesenswert?

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

von Magnus Müller (Gast)


Lesenswert?

Falk Brunner wrote:
> Quelltext?

Siehe Beitrag "Re: AVR Programm läuft nicht"

Guten Morgen, Falk ;o)

von Matthias L. (Gast)


Lesenswert?

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?

von Magnus Müller (Gast)


Lesenswert?

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?

von Christoph S. (christophv)


Lesenswert?

Das ist ein Beispiel aus dem Tutorial. Der Code sowie die Kommentare 
sind nicht von mir.

Gruß
Christoph

von fubu1000 (Gast)


Lesenswert?

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

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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

von Christoph S. (christophv)


Lesenswert?

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.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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.

von Magnus Müller (Gast)


Lesenswert?

> 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

von Christoph S. (christophv)


Lesenswert?

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.

von Christoph S. (christophv)


Lesenswert?

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

von Magnus Müller (Gast)


Lesenswert?

Super, das freut mich ;)

Viel Spaß und Erfolg weiterhin!

Magnetus

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.