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