Last Minute Weihnachtsgeschenk
Déjà-vu. Wie jedes Jahr. Es ist kurz vor Weihnachten und es fehlen immer noch Geschenke. Meistens
fehlt dann neben der nötigen Zeit auch noch die zündende Idee was die Liebsten so gebrauchen könnten. Ob man sich
Gedanken um ein Geschenk gemacht hat wird einem dann meistens erst unterm Weihnachtsbaum klar.
Gutscheine sind immer eine gute Idee. Die bekommt man auch noch nach Ladenschluss online und sie lassen sich meist
individuell gestaltet direkt am eigenen Drucker ausdrucken. Aber damit ist kein Blumentopf zu gewinnen. Kennt ja jeder.
Es geht nur um den Code
Kern des Geschenkegutscheins ist der Gutschein-Code. Und diesen kann man auf jede erdenkliche Weise verpacken. Ok.
Bilder malen oder Steine gravieren ist jetzt nicht so meins. Ich bin eher für digitale Rätsel.
Gutschein-Code per Mikrocontroller morsen
;Amazon Gift Card
.device attiny13a
.equ LED = 0
init:
ldi r16, 0b00000001 ;PB0 als Ausgang
out DDRB, r16
loop:
ldi r30, LOW(code*2) ;Offset laden
ldi r31, HIGH(code*2)
ldi r19, 17 ;17 Zeichen ausgeben
rcall morse
rjmp loop
morse:
dec r19
brmi morse_end
lpm r16, Z+ ;Zeichen laden
rcall morse_out ;Zeichen ausgeben
rcall delay ;Pause Zeichenende
rcall delay
rjmp morse
morse_end:
ret
morse_out: ;Morsezeichen
ldi r17, 0x08 ;Für alle 8Bit
morse_out_start:
lsl r16
dec r17
breq morse_end
brcs morse_out_char ;Suche erste 1
rjmp morse_out_start
morse_out_char:
sbi PORTB, LED
ldi r21, 50 ;kurzes delay
sbrs r16, 0x07 ;ist Bit gesetzt
rcall d_wait
rcall delay
cbi PORTB, LED
rcall delay
lsl r16 ;nächstes Bit
dec r17
brne morse_out_char
rcall delay
rcall delay
ret
delay: ;Delay mit 2 Schleifen
ldi r20, 0x00
ldi r21, 0x00
d_wait:
inc r20
cpi r20, 0x00
brne d_wait
inc r21
cpi r21, 0xff
brne d_wait
ret
code:
.db 0b00000110, 0b00010111, 0b00010101, 0b00001011, 0b00000011, 0b01011110 ;abcde-
.db 0b00110000, 0b00111000, 0b00111100, 0b00111110, 0b00111111, 0b00101111 ;123456
.db 0b01011110, 0b00000110, 0b00010111, 0b00010101, 0b00001011, 0b00000000 ;-abcd
Gutschein-Code anpassen
Am Ende des Programms befindet sich der Code. Die Codierung der einzelnen Zeichen ist direkt
als Morsecode hinterlegt. Das Verfahren orientiert sich an einem Vorschlag von Burkhard Kainka.
(siehe MorseMemory)
Betrachten wir die Codierung von a (Morsecode kurz, lang [.-]). Kurz wird binär als "1" dargestellt. Lang
als "0". Da der Morsecode jedoch eine variable Länge hat wird das erste höherwertigste Bit als Start erkannt.
→ a → .- → 10 → 00000110 → 0b00000110
Viel Spass beim Nachbau und Frohe Weihnachten.
Download und Referenzen: