Compare commits

...

7 Commits

4 changed files with 81 additions and 30 deletions

View File

@@ -1,27 +1,51 @@
# 01_atmega328_lauflicht # 01_atmega328_lauflicht
## Stage 1: ## Stage 1 - Hello World, Assembler:
- [x] Kompilieren und Flashen via Shell-Skript - [x] Kompilieren und Flashen via Shell-Skript
- [x] LED Reihe via Assembler aufleuchten lassen - [x] LED Reihe via Assembler aufleuchten lassen
## Stage 2: ## Stage 2 - Timer Integration:
- [x] Hardcodiertes Lauflicht L2R Richtung - [x] Hardcodiertes Lauflicht L2R Richtung
- [x] Hardcodiertes Lauflicht R2L Richtung - [x] Hardcodiertes Lauflicht R2L Richtung
## Stage 3: ## Stage 3 - Statuswechsel via Hardware Interaktion:
- [x] Richtungswechsel via Taster Klick - [x] Richtungswechsel via Taster Klick
- [x] Animation läuft unbeirrt weiter bei Taster-Klick - [x] Animation läuft unbeirrt weiter bei Taster-Klick
- [x] Wechsel von L2R auf R2L bei Taster-Links-Klick - [x] Wechsel von L2R auf R2L bei Taster-Links-Klick
- [x] Wechsel von R2L auf L2R bei Taster-Rechts-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 - [ ] 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

View File

@@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Build & Flash # 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

View File

@@ -4,17 +4,19 @@
.macro left_to_right .macro left_to_right
in @0, PORTD in @0, PORTD
rol @0 clc
brcc PC+2
ldi @0, 0b00000001
out PORTD, @0
.endmacro
.macro right_to_left
in @0, PORTD
ror @0 ror @0
brcc PC+2 brcc PC+2
ldi @0, 0b10000000 ldi @0, 0b10000000
out PORTD, @0 out PORTD, @0
.endmacro .endmacro
.macro right_to_left
in @0, PORTD
clc
rol @0
brcc PC+2
ldi @0, 0b00000001
out PORTD, @0
.endmacro

View File

@@ -7,16 +7,17 @@
.include "./m328Pdef.inc" .include "./m328Pdef.inc"
.list .list
.def setter = R16 .def setter = R16
.def overflows = R17 .def overflows = R17
.def active_led = R18 .def active_led = R18
.def btn_status = R19 .def btn_status = R19
.def cur_direction = R20 .def cur_direction = R20
.equ L2R = 0x01 .equ L2R = 0x01
.equ R2L = 0b00000100 .equ R2L = 0x04
.equ RBTN_PRESSED = 0b00000100 .equ RBTN_PRESSED = 0b00000100
.equ LBTN_PRESSED = 0b00000001 .equ LBTN_PRESSED = 0b00000001
.equ BOTH_PRESSED = 0b00000101
.org 0x0000 .org 0x0000
rjmp init rjmp init
@@ -38,8 +39,8 @@ init:
; ldi setter, 0b11111010 ; ldi setter, 0b11111010
ser setter ser setter
out DDRB, setter ; PB0 und PB2 als Inputs definieren out DDRB, setter ; PB0 und PB2 als Inputs definieren
; ldi setter, 0b00000101 ldi setter, 0b00000101
; out PORTB, setter ; Interne Pullups aktivieren out PORTB, setter ; Interne Pullups aktivieren
clr setter clr setter
out PORTB, setter out PORTB, setter
@@ -93,17 +94,41 @@ overflow_handler:
; Setze definierten Start für den ; Setze definierten Start für den
; Laufrichtungswechsel ; Laufrichtungswechsel
;---- ;----
cpi btn_status, LBTN_PRESSED check_left_btn:
brne PC+3 cpi btn_status, LBTN_PRESSED
ldi setter, 0b10000000 brne check_right_btn
; Linker Button wurde gedrückt
ldi cur_direction, L2R ldi cur_direction, L2R
in setter, PORTD
cpi setter, 0
brne run_animation
cpi btn_status, RBTN_PRESSED ; Lauflicht wurde zuvor gestopped und muss neu initialisiert werden
brne PC+3
ldi setter, 0b00000001 ldi setter, 0b00000001
ldi cur_direction, R2L out PORTD, setter
rjmp run_animation
out PORTD, setter 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
;------ ;------
run_animation: run_animation: