Binäre Telegraphie für den Sparrow
Da der
Sparrow nicht übermäßig viele Eingabetasten besitzt macht es Sinn, Daten
seriell mit nur einer Taste zu übertragen. Da könnte man natürlich den
guten alten Morsecode verwenden. Aber ein Mikrocontroller arbeitet ja intern
eher mit Bits und Bytes, die man auch direkt und ohne Umwege über eine Codierung
darstellen kann. Mein Vorschlag sieht so aus:
- Wie beim Morsen werden Punkte und Striche verwendet, Geschwindigkeiten und Strichlängen sind gleich, z.B. 100 ms und 300 ms.
- Punkte stehen für Nullen, Striche stehen für Einsen
- Die Übertragung eine Bytes beginnt mit dem niederwertigsten Bit
- Führende Nullen dürfen unterdrückt werden.
Ein
Beispiel: Die Zahl 2 heißt binär 0010 und wird mit dem Low-Bit zuerst
als dit dah gesendet. dit dah dit dit oder dit dah dit gehen auch, weil
beliebig viele Nullen folgen können ohne das Ergebnis zu ändern.
Wer morsen kann und die binäre Telegraphie noch nicht gewohnt ist
wundert sich vielleicht: a, r und l bedeuten dasselbe, nämlich 2. Die
Ziffern von 0 bis 9 hören sich ohne führende Nullen an wie die
Morsezeichen e t a m u k w o v x.
Wer
nicht morsen kann hat es vielleicht leichter, denn er hört einfach nur
Nullen und Einsen. Hier noch ein paar Beispiele für Zahlen bis 4 Bit:
0 = dit
1 = dah
2 = dit dah
4 = dit dit dah
8 = dit dit dit dah
10 = dit dah dit dah
15 = dah dah dah dah
Es geht aber auch für größere Zahlen bis 8 Bit:
255 (&HFF, 1111 1111) = dah dah dah dah dah dah dah dah
100 (&H64, 0110 0100) = dit dit dah dit dit dah dah
128 (&H80, 1000 0000) = dit dit dit dit dit dit dit dah
Man kann die Zeichen auch ohne einen
Lautsprecher optisch an der LED 1 nachverfolgen, was allerdings
schwieriger ist, weil der Mensch meist schneller hört als er sehen
kann. Wenn es aber nur um kleine Zahlen und damit kurze Ein- und
Ausgaben geht reicht auch die LED. Das Verfahren kann nach einiger
Übung auch zum Debuggen verwendet werden, indem man irgendwelche
Zwischenergebnisse ausgibt.
Sparrow_TeleBin
Die
App Sparrow_TeleBin dient zum Ausprobieren und zum Üben der
Binärtelegraphie. Am besten schließt man einen kleinen Lautsprecher
oder Piezo-Schallwandler an. Dann gibt man über S1 beliebige
Binärzahlen ein. Der Sparrow sendet die gleichen Binärzahlen zurück,
wobei führende Nullen unterdrückt werden. Gleichzeitig erhält man einen
genauen Eindruck von der korrekten Geschwindigkeit mit 100 ms und 300
ms (entspricht 60 Buchstaben pro Minute beim Morsen). Man erhält auf
jede Eingabe eine korrigierende Antwort, sodass man nach kurzer Zeit
den richtigen Takt drauf hat.
Download: Sparrow_TeleBin.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Bin%C3%A4rtelegraphie.html
'Sparrow_TeleBin.bas
'Dit 100 ms = 0, Dah 300 ms = 1, Low Bit first
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010
Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Declare Sub Receivebinary
Declare Sub Sendbinary
' Timer 0 is configured for Sound at OC0B / PB1
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Up
Do
Receivebinary
Waitms 300
Sendbinary
Loop
Sub Receivebinary
C = 0
B = 1
Do
Do
Loop Until S1 = 0
Pwm0b = 80
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 1
Pwm0b = 0
Waitms 10
If T > 15 Then
C = C + B
End If
Shift B , Left
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 0 Or T > 25
Loop Until T > 25
End Sub
Sub Sendbinary
Do
B = C And 1
If B = 1 Then
Pwm0b = 80
Waitms 300
Else
Pwm0b = 80
Waitms 100
End If
Pwm0b = 0
Waitms 100
Shift C , Right
Loop Until C = 0
End Sub
Ein Code-Schloss mit Binärtelegraphie
Hier
muss der Anwender vier geheime Zahlen in genau der richtigen
Reihenfolge eingeben. Die Voreinstellung lautet 1 2 3 4, aber für
ernste Anwendungen könnte man sich intelligentere Zahlen ausdenken.
Wenn alle vier Eingaben richtig sind geht die rote LED an. Hier könnte
z.B. eine Transistor-Schaltstufe mit Relais und Türöffner angeschlossen
werden. Für die Anwendung ist es vermutlich besser, keinen Lautsprecher
anzuschließen, damit die Zahlenkombination möglichst nicht mitgehört
werden kann. Die gewählten Geheimzahlen lauten im Format der binären
Telegraphie wie folgt:
dah
dit dah
dah dah
dit dit dah
Und
am Ende kann man einmal kurz drücken um die Tür wieder zu schließen.
Zur Verwirrung neugieriger Gäste kann man auch ein beliebiges anderes
Zeichen eingeben, solange es anders ist als die erste Geheimzahl.
Genauso kann man auch beim Öffnen einen langen Vorspann unsinniger
Daten senden, bis jeder Lauscher frustriert aufgibt. Erst dann kommen
die richtigen Zahlen 1 2 3 4.
Download: Sparrow_TeleBinLock.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Bin%C3%A4rtelegraphieCodeSchloss.html
'SparrowTeleBinLock.bas
'Dit 100 ms = 0, Dah 300 ms = 1, Low Bit first
'Secret code = 1 2 3 4
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010
Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Declare Sub Receivebinary
' Timer 0 is configured for Sound at OC0B / PB1
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Up
Do
C1:
Receivebinary
Led2 = 0
If C <> 1 Then Goto C1
Receivebinary
If C <> 2 Then Goto C1
Receivebinary
If C <> 3 Then Goto C1
Receivebinary
If C <> 4 Then Goto C1
Led2 = 1
Loop
Sub Receivebinary
C = 0
B = 1
Do
Do
Loop Until S1 = 0
Pwm0b = 80
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 1
Pwm0b = 0
Waitms 10
If T > 15 Then
C = C + B
End If
Shift B , Left
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 0 Or T > 25
Loop Until T > 25
End Sub
Sparrow-Merkhilfe mit Binärtelegraphie
Lange
Zahlenreihen wie z.B. Telefonnummern kann man leicht mal vergessen.
Aber im EEPROM des Sparrow sind sie gut aufgehoben, egal ob in Byteform
oder als Ziffern 0 bis 9. Beim Start des Geräts wird die zuletzt
gespeicherte Zahlenfolge optisch und akustisch telegraphiert. Dann hat
man die Möglichkeit eine neue Zahlenfolge einzugeben. Das Ende wird
durch eine Zahl 255 (acht Striche) gekennzeichnet. Ohne neue Eingabe
bleibt die alte Zahlenfolge erhalten und wird beim nächsten Neustart
oder Reset neu ausgegeben.
Download: Sparrow_TeleBinMemory.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Bin%C3%A4rtelegraphieMerkhilfe.html
'SparrowTeleBinMemory.bas
'Dit 100 ms = 0, Dah 300 ms = 1, Low Bit first
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010
Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Dim A As Byte
Declare Sub Receivebinary
Declare Sub Sendbinary
' Timer 0 is configured for Sound at OC0B / PB1
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Up
S:
A = 0
Do
Readeeprom C , A
If C < 255 Then Sendbinary
A = A + 1
Waitms 500
Loop Until C = 255
A = 0
Do
Receivebinary
D = C
Writeeeprom D , A
A = A + 1
Loop Until D = 255
Goto S
Sub Receivebinary
C = 0
B = 1
Do
Do
Loop Until S1 = 0
Pwm0b = 80
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 1
Pwm0b = 0
Waitms 10
If T > 15 Then
C = C + B
End If
Shift B , Left
T = 0
Do
Waitms 10
T = T + 1
Loop Until S1 = 0 Or T > 25
Loop Until T > 25
End Sub
Sub Sendbinary
Do
B = C And 1
If B = 1 Then
Pwm0b = 80
Waitms 300
Else
Pwm0b = 80
Waitms 100
End If
Pwm0b = 0
Waitms 100
Shift C , Right
Loop Until C = 0
End Sub
Sparrow_Reaktiontest
Noch
frisch, oder zu viel gearbeitet? Der Reaktionstest bringt es an den
Tag. Es geht darum, sofort nach einem Lichtsignal auf eine Taste
zu drücken. Wenn man kürzer als 200 ms dafür braucht, ist noch alles im
Lot. Um die Messung zu starten drückt man kurz auf S1. Nach einer
zufälligen kurzen Wartezeit geht die rote LED an. So schnell wie
möglich drückt man dann nochmal auf S1. Der Sparrow misst die
Verzögerungszeit in Hundertstelsekunden und teilt sie dem Anwender in
Form von zwei Ziffern in binärer Telegrafie mit. 2 7 bedeutet 27 *
1/100 s bzw. 270 ms. Ein Schallwandler an B1 ist angenehm, aber man
kann es auch optisch über die grüne LED lesen.
Download: Sparrow_Reaktionstest.zip
Direkt laden: http://tiny.systems/categorie/cheepit/Reaktionstest.html
'Sparrow_Reaktionstest.bas
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Led1 Alias Portb.1
Led2 Alias Portb.3
S1 Alias Pinb.0
S2 Alias Pinb.2
Config Portb = &B000011010
Dim D As Byte
Dim T As Byte
Dim B As Byte
Dim C As Byte
Declare Sub Receivebinary
Declare Sub Sendbinary
' Timer 0 is configured for Sound at OC0B / PB1
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Up
Do
Do
Loop Until S1 = 0 'S1 drücken: Start
Waitms 50
Do
Waitms 10
Loop Until S1 = 1
Waitms 600
Do
T = Rnd(250) 'Zufällige Wartezeit
Waitms T
Waitms T
Loop Until S1 = 1
D = 0
Led2 = 1 'Startsignal
Do
Waitms 10
D = D + 1 'Zeitmessung
Loop Until S1 = 0
Led2 = 0
Waitms 500
C = D / 10 'Zehner 1/100 s
Sendbinary
Waitms 600
C = D Mod 10 'Einner 1/100 s
Sendbinary
Waitms 300
Loop
Sub Sendbinary
Do
B = C And 1
If B = 1 Then
Pwm0b = 80
Waitms 300
Else
Pwm0b = 80
Waitms 100
End If
Pwm0b = 0
Waitms 100
Shift C , Right
Loop Until C = 0
End Sub