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
ATtiny13a morst Amazon Gutschein-Code
;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: