[linux-l] Binärdaten in Hex und Co.

Thomas Brinker thomas.brinker at gmx.de
Fr Okt 17 13:19:11 CEST 2003


Hallo!
Am Mittwoch, 8. Oktober 2003 16:48 schrieb Oliver Bandel:
> redet er nich mea mit uns?

Doch, doch ich lebe noch. War in letzter Zeit etwas im Stress(Semesterstart, 
Umzug...) und da hatte ich diesen Threat auch schon fast vergessen.

Den PIC programmiere ich mit einem PicStartPlus, das ist so das billigste 
Programmiergerät, abgesehen von dem selbst gelöteten Zeug, dass dann aber nur 
eine einzige Controllerfamilie kann und deren Software läuft auch nur unter 
Windows. Die IDE von Microchip(PIC Hersteller) läuft zwar auch nur unter Win 
aber es gibt eine super Lösung unter Linux 
picp(http://www.cosmodog.com/pic/). Solange man die Finger von dem 
ConfigRegister lässt klappt das programmieren super und ist auch viel 
schneller als mit der Software vom Microchip.
Dazu gibt es dann den gpasm(http://gputils.sourceforge.net/) der das 
assemblieren übernimmt. Es gibt leider keine freie Möglichkeit C-Programme 
zukompilieren, oder weiß jemand eine?

Dazu habe ich dann eine Platine entwickelt und produzieren lassen(sausauteuer) 
auf der sich eine Schaltung befindet die die Pegel für den RS232-Port 
herrichtet und etwas analogen Kram um analoge Signale mit dem AD-Wandler des 
Pic zuverarbeiten. Dazu dann noch ne Menge LED's und eine 
Spannungsversorgung.

Das ganze ergibt dann eine Funkuhrwetterstation. Über die Analogen Signale 
lassen sich Luftdruck, Temperatur, Luftfeuchte messen, mittels Uhrenquarz 
wird die Zeit gemessen, ein DCF77 Modul empfängt das Zeitsignal aus Frankfurt 
und die Serielle Schnittstelle reicht das dann an den Rechner weiter. Damit 
das Ding auch stand-alone-fähig ist gibt es noch ein Display 4*20 
Zeichen(auch fürs debugging wichtig) und eine Tastertur.
Ausserdem Dekodierung des Zeitsignals ist soweit alles implementiert und 
wartet auf die 'Endmontage' im sinne von 'eichen', benutzerführung, 
Eingabemasken...(also noch ne ganze Menge nicht so schwieriges Zeugs)

Das ganze ist in ein Interruptframework eingearbeitet, das sich um das polling 
und den aufruf der passenden isr's kümmert. Die isr's können dann Prozeduren 
als lauffähig markieren und diese werden dann nach dem Interruptservice 
entsprechend ihrer Priorität gestartet. 
So gibt es z.B. einen Interrupt 'rci' 'serielle Daten empfangen'. Die 
entsprechende Serviceroutine legt das Datum dann in einen Ringpuffer und 
meldet die Verarbeitungsroutine als lauffähig. Sobald der Interruptservice 
beendet ist wird nun geschaut ob eine Verarbeitungsroutine lauffähig ist und 
wenn ja, wird sie gestartet(entsprechend der Priorität). Die 
Verarbeitungsroutine für serielle Daten macht nun nix anderes als vom 
Ringpuffer zulesen bis nix mehr drauf ist und alles aufs display zuschreiben. 
Dabei treten natürlich ganz wunderbare Synchronisationsprobleme auf, wenn der 
eine gerade den ringpuffer liest und ein Interrupt der in den ringpuffer 
schreiben muss dazwischen springt.....

An dem ganzen Gedönse arbeite ich nun seit etwa einem Jahr, allerdings mit 
erheblichen Unterbrechungen

Gruß
Thomas

-- 
Wo kämen wir hin, wenn alle sagten, wo kämen wir hin,
und niemand ginge, um einmal zu schauen, wohin man käme,
wenn man ginge.
«Kurt Marti»





Mehr Informationen über die Mailingliste linux-l