Compare commits
7 Commits
0d6d8dbd2a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
4da8b3d86a
|
|||
|
7d19efa11f
|
|||
|
1c9439f76d
|
|||
|
eecdddd8fe
|
|||
|
89cb9a3464
|
|||
|
204e94d613
|
|||
|
a30bf50f67
|
36
README.md
36
README.md
@@ -1,27 +1,51 @@
|
||||
# 01_atmega328_lauflicht
|
||||
|
||||
## Stage 1:
|
||||
## Stage 1 - Hello World, Assembler:
|
||||
|
||||
- [x] Kompilieren und Flashen via Shell-Skript
|
||||
- [x] LED Reihe via Assembler aufleuchten lassen
|
||||
|
||||
## Stage 2:
|
||||
## Stage 2 - Timer Integration:
|
||||
|
||||
- [x] Hardcodiertes Lauflicht L2R Richtung
|
||||
- [x] Hardcodiertes Lauflicht R2L Richtung
|
||||
|
||||
## Stage 3:
|
||||
## Stage 3 - Statuswechsel via Hardware Interaktion:
|
||||
|
||||
- [x] Richtungswechsel via Taster Klick
|
||||
- [x] Animation läuft unbeirrt weiter bei Taster-Klick
|
||||
- [x] Wechsel von L2R auf R2L bei Taster-Links-Klick
|
||||
- [x] Wechsel von R2L auf L2R bei Taster-Rechts-Klick
|
||||
|
||||
## Stage 4:
|
||||
## Stage 4 - Erweiterte Status Abhandlung (Anzahl Status > 2):
|
||||
|
||||
- [ ] Animation stoppt wenn beide Taster simultan gedrückt sind
|
||||
- [x] Animation stoppt wenn beide Taster simultan gedrückt sind
|
||||
|
||||
## Stage 5:
|
||||
## Stage 5 - Willkommen in der Analogen MCU-Welt:
|
||||
|
||||
- [ ] Geschwindigkeit via Poti steuern
|
||||
|
||||
## Stage 6 - Gray-Code Handling kann auch nicht schaden:
|
||||
|
||||
- [ ] Modi umschalten via Encoder-Taster
|
||||
- [ ] Mode 1: autom. Lauflicht
|
||||
- [ ] Mode 2: manuelles Lauflicht gesteuert via Encoder-Drehung
|
||||
|
||||
## Stage 7 - Pin Reduzierung:
|
||||
|
||||
- [ ] LEDs via Charlieplexing betreiben um Pin-Anzahl von 8 auf 4 zu reduzieren
|
||||
- [ ] Standard-LEDs durch einzel adressierbare RGB-LEDs austauschen um so die Daten-Pin-Anzahl auf 1 zu reduzieren
|
||||
|
||||
## Stage 8 - Lass uns ein Spiel spielen:
|
||||
|
||||
- [ ] Mode 3: 1-Dimensionales Pong Spiel
|
||||
- [ ] Wenn das Lauflicht (LL) das linke/rechte Ende erreicht, muss der jeweilige Button rechtzeitig gedrückt werden um die Laufrichtung umzukehren.
|
||||
- [ ] Wenn das LL durchläuft bekommt der Gegner einen Punkt
|
||||
- [ ] Punktestände werden mit zwei einzelnen 7-Segmentanzeigen visualisiert
|
||||
- [ ] Wer zuerst 10 Punkte erreicht gewinnt
|
||||
- [ ] ToDo: Sieges-Animation bestimmen z.B. Farbenspiel der LL-LEDs oder Kreisanimation der 7-Segmentanzeige
|
||||
|
||||
## Stage 9 - Mal was für's Auge (SPI & I2C):
|
||||
|
||||
- [ ] Zeige aktuellen Modus auf LCD an
|
||||
- [ ] Zeige aktuellen Modus auf OLED an
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Build & Flash
|
||||
avra main.asm && avrdude -p m328p -c arduino -b 115200 -P /dev/tty.usbserial-A50285BI -U flash:w:main.hex
|
||||
avra main.asm && avrdude -p m328p -c arduino -b 115200 -P /dev/tty.usbserial-110 -U flash:w:main.hex
|
||||
|
||||
|
||||
18
macros.inc
18
macros.inc
@@ -4,17 +4,19 @@
|
||||
|
||||
.macro left_to_right
|
||||
in @0, PORTD
|
||||
rol @0
|
||||
brcc PC+2
|
||||
ldi @0, 0b00000001
|
||||
out PORTD, @0
|
||||
.endmacro
|
||||
|
||||
.macro right_to_left
|
||||
in @0, PORTD
|
||||
clc
|
||||
ror @0
|
||||
brcc PC+2
|
||||
ldi @0, 0b10000000
|
||||
out PORTD, @0
|
||||
.endmacro
|
||||
|
||||
.macro right_to_left
|
||||
in @0, PORTD
|
||||
clc
|
||||
rol @0
|
||||
brcc PC+2
|
||||
ldi @0, 0b00000001
|
||||
out PORTD, @0
|
||||
.endmacro
|
||||
|
||||
|
||||
41
main.asm
41
main.asm
@@ -14,9 +14,10 @@
|
||||
.def cur_direction = R20
|
||||
|
||||
.equ L2R = 0x01
|
||||
.equ R2L = 0b00000100
|
||||
.equ R2L = 0x04
|
||||
.equ RBTN_PRESSED = 0b00000100
|
||||
.equ LBTN_PRESSED = 0b00000001
|
||||
.equ BOTH_PRESSED = 0b00000101
|
||||
|
||||
.org 0x0000
|
||||
rjmp init
|
||||
@@ -38,8 +39,8 @@ init:
|
||||
; ldi setter, 0b11111010
|
||||
ser setter
|
||||
out DDRB, setter ; PB0 und PB2 als Inputs definieren
|
||||
; ldi setter, 0b00000101
|
||||
; out PORTB, setter ; Interne Pullups aktivieren
|
||||
ldi setter, 0b00000101
|
||||
out PORTB, setter ; Interne Pullups aktivieren
|
||||
clr setter
|
||||
out PORTB, setter
|
||||
|
||||
@@ -93,16 +94,40 @@ overflow_handler:
|
||||
; Setze definierten Start für den
|
||||
; Laufrichtungswechsel
|
||||
;----
|
||||
check_left_btn:
|
||||
cpi btn_status, LBTN_PRESSED
|
||||
brne PC+3
|
||||
ldi setter, 0b10000000
|
||||
brne check_right_btn
|
||||
|
||||
; Linker Button wurde gedrückt
|
||||
ldi cur_direction, L2R
|
||||
in setter, PORTD
|
||||
cpi setter, 0
|
||||
brne run_animation
|
||||
|
||||
cpi btn_status, RBTN_PRESSED
|
||||
brne PC+3
|
||||
; Lauflicht wurde zuvor gestopped und muss neu initialisiert werden
|
||||
ldi setter, 0b00000001
|
||||
ldi cur_direction, R2L
|
||||
out PORTD, setter
|
||||
rjmp run_animation
|
||||
|
||||
check_right_btn:
|
||||
cpi btn_status, RBTN_PRESSED
|
||||
brne check_both_btn
|
||||
|
||||
; Rechter Button wurde gedrückt
|
||||
ldi cur_direction, R2L
|
||||
in setter, PORTD
|
||||
cpi setter, 0
|
||||
brne run_animation
|
||||
|
||||
; Lauflicht wurde zuvor gestopped und muss neu initialisiert werden
|
||||
ldi setter, 0b10000000
|
||||
out PORTD, setter
|
||||
rjmp run_animation
|
||||
|
||||
check_both_btn:
|
||||
cpi btn_status, BOTH_PRESSED
|
||||
brne run_animation
|
||||
ldi setter, 0
|
||||
out PORTD, setter
|
||||
;------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user