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: