www.mikrocontroller.net

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


Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Source posten!

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Fehler liegt in deinem Programm, in Zeile 24.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Endlosschleife vergessen.

Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quelltext?

Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
> Quelltext?

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

Guten Morgen, Falk ;o)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1  .include "m8def.inc"
2
3         ldi r16, 0xFF
4         out DDRB, r16
5
6         ldi r16, 0b11111100 ; 0b11111100 in r16 laden
7         out PORTB, r16

8  ende:    rjmp ende

>

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

Hm.. Offensichtlich ist meine Glaskugel kaputt..

Nur zur Info:
ldi r16, 0b11111100 ; 0b11111100 in r16 laden

MEinst du, solche Kommentare sind sinnvoll?

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christoph Schulz (christophv)
Datum:

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

Gruß
Christoph

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph Schulz (christophv)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, das freut mich ;)

Viel Spaß und Erfolg weiterhin!

Magnetus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.