Binäre Telegraphie für den Sparrow       

Elektronik-Labor  Projekte  AVR                  




Video: http://youtu.be/8-oqc-X2cmo

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:
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


Elektronik-Labor  Projekte  AVR