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


von AVR Neuling (Gast)


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.
1
.include "tn2313def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
2
3
4
    ;Aus/Eingänge einstellen
5
         ldi r16, 0x00       ; 0x00 in r16 laden
6
         out DDRA, r16       ; Inhalt von r16 ins IO-Register DDRA ausgeben
7
     ldi r16, 0x00       ; 0x00 in r16 laden
8
     out PORTA, r16      ; Inhalt von r16 ins IO-Register PORTA ausgeben
9
 
10
         ldi r16, 0b00111000 ; 0b11111100 in r16 laden
11
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
12
     ldi r16, 0x00       ; 0x00 in r16 laden
13
     out PORTD, r16      ; Inhalt von r16 ins IO-Register PORTD ausgeben
14
15
     ldi r16, 0b00000111 ; 0b00000111 in r16 laden
16
     out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
17
     ldi r16, 0x00       ; 0x00 in r16 laden
18
     out PORTB, r16      ; Inhalt von r16 ins IO-Register PORTB ausgeben
19
20
     
21
         ldi r18, LOW(RAMEND)             ; LOW-Byte der obersten RAM-Adresse
22
         out SPL, r18
23
24
25
loop:   
26
27
     
28
     sbis PIND, 2     ; Wenn Blinkersignal anliegt nächsten Befehl überspringen
29
     rcall reset
30
     sbic PIND, 2     ; Wenn Blinkersignal nicht anliegt nächsten Schritt überspringen
31
     rcall Blink1
32
     sbrc r16, 5        ; Wenn r16 voll ist (0xFF) nächsten Schritt ausführen
33
     ldi r16, 0x00     ; r16 auf 0 setzen
34
     rjmp loop
35
     
36
37
38
Blink1:
39
40
     ldi r20, 0x00
41
     sec
42
     rol r16       ; 1 in r16 einschieben
43
     push r16       ; r16 in Stack laden
44
     pop r17       ; In Stack geladenen Wert auf r17 schreiben
45
     andi r17, 0b00000111
46
     sbic PIND, 1     ; Wenn PortA1 Low nächsten Schritt überspringen
47
     out PORTB, r17     ; r17 ins Ausgangsregister PORTB laden
48
     sbis PIND, 1
49
     out PORTB, r20
50
     rol r17       ; drei Nullen von links in r17 einschieben
51
     rol r17       
52
     rol r17
53
     sbic PIND, 0     ; Wenn PinA0 Low nächsten Schritt überspringen
54
     out PORTD, r17     ; r17 ins Ausgangsregister PORTD laden
55
     sbis PIND, 0
56
     out PORTD, r20
57
     ldi r19, 0xFF
58
     rcall Warte
59
     ret         ; Zurückspringen zu rcall
60
61
Warte:
62
63
     dec r19
64
     brne Warte
65
     ret
66
67
Reset:
68
69
     ldi r16, 0x00
70
     out PORTB, r16
71
     out PORTD, r16
72
     ret

von AVR Neuling (Gast)


Lesenswert?

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

von Michael H. (michael_h45)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


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.

von AVR Neuling (Gast)


Lesenswert?

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

von Thomas (buma)


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.

von AVR Neuling (Gast)


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.

von AVR Neuling (Gast)


Lesenswert?

Es wird der Interne Tackt verwendet.

von AVR Neuling (Gast)


Angehängte Dateien:

Lesenswert?

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

von AVR Neuling (Gast)


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.

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.