www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm geht in Simulation aber nicht auf Steckbrett


Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag.

Habe mir ein kleines Programm zusammengebastelt, was aber irgendwie 
nicht richtig funktioniert.

Das Problem ist das PD0-2 alle auf Low sind, aber trotzdem PD3-5 sowie 
PB0-2 auf High Tackten, wodurch die an den Port`s angeschlossenen LED`s 
aufblinken.
.include "tn2313def.inc"         ; Definitionsdatei für den Prozessortyp einbinden


    ;Aus/Eingänge einstellen
         ldi r16, 0x00       ; 0x00 in r16 laden
         out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben
 
         ldi r16, 0b00111000 ; 0b11111100 in r16 laden
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTD, r16      ; Inhalt von r16 ins IO-Register PORTD ausgeben

     ldi r16, 0b00000111 ; 0b00000111 in r16 laden
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
     ldi r16, 0x00       ; 0x00 in r16 laden
     out PORTB, r16      ; Inhalt von r16 ins IO-Register PORTB ausgeben

     
         ldi r18, LOW(RAMEND)             ; LOW-Byte der obersten RAM-Adresse
         out SPL, r18


loop:   

     
     sbis PIND, 2     ; Wenn Blinkersignal anliegt nächsten Befehl überspringen
     rcall reset
     sbic PIND, 2     ; Wenn Blinkersignal nicht anliegt nächsten Schritt überspringen
     rcall Blink1
     sbrc r16, 5        ; Wenn r16 voll ist (0xFF) nächsten Schritt ausführen
     ldi r16, 0x00     ; r16 auf 0 setzen
     rjmp loop
     


Blink1:

     ldi r20, 0x00
     sec
     rol r16       ; 1 in r16 einschieben
     push r16       ; r16 in Stack laden
     pop r17       ; In Stack geladenen Wert auf r17 schreiben
     andi r17, 0b00000111
     sbic PIND, 1     ; Wenn PortA1 Low nächsten Schritt überspringen
     out PORTB, r17     ; r17 ins Ausgangsregister PORTB laden
     sbis PIND, 1
     out PORTB, r20
     rol r17       ; drei Nullen von links in r17 einschieben
     rol r17       
     rol r17
     sbic PIND, 0     ; Wenn PinA0 Low nächsten Schritt überspringen
     out PORTD, r17     ; r17 ins Ausgangsregister PORTD laden
     sbis PIND, 0
     out PORTD, r20
     ldi r19, 0xFF
     rcall Warte
     ret         ; Zurückspringen zu rcall

Warte:

     dec r19
     brne Warte
     ret

Reset:

     ldi r16, 0x00
     out PORTB, r16
     out PORTD, r16
     ret



     

     

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit: In der Simulation in AVRStudio4 läuft alles super, aber auf dem 
Steckbrett nicht.

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Läuft nicht super" ist natürlich eine super Problembeschreibung.
Photo vom Aufbau?
Spannungen am AVR geprüft?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht Schaltung falsch aufgebaut. Wohlmöglich Pull-Up oder 
Pull-Down Widerstände in der Schaltung vergessen. Es gibt eine [[AVR 
Checkliste]] und eine Netiquette für solche Fälle.

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe grad mal ein Video gemacht, welches ich grad hochlade um den Fehler 
besser erklären zu können.

Autor: Thomas K. (buma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehm an, Du benutzt nen externen Quartz. Schau mal, dass Du die 
Anschlüsse des Oszillators möglichst klein machst und die Kondensatoren 
eventuell direkt dranlötest. Dadurch kannst Du auf jeden Fall mal die 
Frequenz stabil halten und Energieverluste durch die Leitungen auf dem 
Steckbrett eliminieren.

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier das Vid: http://www.youtube.com/watch?v=kxdkAMva6Fw

Die Nacheinander Angehenden LED`s sind so richtig. Die nebenbei 
blinkenden sind falsch ^^.

Eigentlich sollten die die "dumm" rumblinken aus bleiben, was sie in der 
Simulation auch machen :(

Die Taster unten unten ziehen PD0 und PD1 auf Plus. Die LED`s sind an 
(Links) PD3-5 und (Rechts)PB0-2.

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird der Interne Tackt verwendet.

Autor: AVR Neuling (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal ein Bild, da ich mir nicht sicher bin ob man auf dem Video die 
Bauteilbezeichnung erkennen kann (War i-wie ziemlich unscharf).

Autor: AVR Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler gefunden:

Es "fehlten" Widerstände auf Masse an den Tastern ^^.
Wird nicht nochmal passieren (Soebend wurde mein erster AVR erfolgreich 
in Betrieb genommen!)

Vielen Dank an alle die mir dabei geholfen haben und das Forum.

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.