From: Wolfgang.Strobl@gmd.de (Wolfgang Strobl) Newsgroups: de.rec.fahrrad Subject: Re: Schnittstelle fuer Fahrradcomputer In article <3j6sjk$7ul@idtuva.kfk.de>, fuchs@irch.kfk.de (Joachim Fuchs) says: > >Fuer ein umfassendes Messwertprogramm fuer Fahrrader benoetige ich Informationen >ueber Schnittstellen von Sensoren zu kleinen PCs (Palmtop, Handy etc). Der Sensor >fuer die Geschwindigkeitsbestimmung soll ein Reed-Kontakt sein, wie er fuer die meisten >Fahrradcomputer verwendet wird. Hat schon mal jemand einen Tacho mit Schnittstelle zum >Computer gebaut? Ja, kürzlich. Allerdings liegt das Projekt noch etwas halbfertig herum, weil ich zwischenzeitig etwas anderes gemacht habe*), und weil ich noch ein wenig mehr unterbringen möchte, bevor ich eine Platine draus mache. Auch deswegen: Kommentare erwünscht! Der aktuelle Stand ist, daß ich den fliegenden Aufbau zwar schon mal an's Rad geschraubt und komplett ausprobiert habe, aber wirklich im Fahren gemessen habe ich damit noch nicht. Ich sehe aber keine Probleme, weder bei der Entprellung noch bei der Zuverlässigkeit der Briefmarke, wenn direkt daneben ein Wechselstromgenerator läuft, denn der verwendete Prozessor tut's unter vergleichbaren Umständen recht zuverlässig. (siehe *) Mein "Tacho mit Schnittstelle" basiert einfach auf der Komplett- erfassung aller Impulse mit Hilfe einer Basic-Briefmarke, wie sie auf Basis eines PIC 16C5x von Parallax entwickelt und hier in Deutschland von Wilke vertrieben wird. Wenn ich etwas mehr Zeit in dieses Projekt investieren könnte, würde ich vermutlich statt mit einer "Briefmarke" eine Ebene tiefer mit einem 16C5x o.Ä. ansetzen und einen kompletten Fahradcomputer nachprogrammieren, bei dem das Timing im Controller statt im erfassenden PC statt- findet. Die jetzige Lösung hat aber den entscheidenden Vorteil, daß ich sie in einer Viertelstunde zusammengehauen habe. :) Nachfolgend die beiden Quellprogramme, einmal das Programm für die Basic-Briefmarke (es besteht aus ingesamt nur sechs Befehlen, von denen einer sogar überflüssig ist), und dem Gegenstück auf dem PC (welches ebenfalls zwar funktionsfähig, aber auch bewußt simpel gehalten ist). Zur Beschaltung vielleicht noch folgender Tip: das Turbo-C- Programm benutzt die seriellen Routinen des Bios, also un- gepuffert. Dies ist grundsätzlich kein Schaden, weil die Timestamps ja auf dem PC hinzugefügt werden. Aber es sind aufgrund dessen zwei Fallstricke zu vermeiden. a) die seriellen Biosroutinen sind etwas pingelig und verweigern die Mitarbeit, wenn die Modemsteuerleitungen nicht die korrekten Pegel haben (Abhilfe: am 25poligen Stecker zum PC 5 und 6 mit 20 ver- binden) und b) Plattenzugriffe etc. haben Datenverlust zur Folge. Abhilfe: RAMdisk o.Ä. benutzen - die erfasste Datenmenge ist ja nicht sehr groß, bei normaler Fahrweise weniger als 2 KByte pro km. Oder man baut irgendwo einen kleinen Puffer ein. *) Das andere Projekt, ebenfalls auf Basis einer Briefmarke und einer eigenen Platine etwa derselben Größe (3x5cm) ist jetzt schon seit einer Weile in Betrieb: Es ist eine halbautomatische Radlichtsteuerung (Normallicht, Fernlicht, zwei superhelle LEDs nach vorne, Umschalten zwischen den verschiedenen Lichtern sowie Akku und Dynamo, Standlichtfunktion, Hupe etc) mit Zweiknopfbedienung, in einem flachen 12x4cm- Gehäuse, das auf den Lenker montiert wird, etwa an der- selben Stelle wie ein Radcomputer. Wenn ich etwas Zeit habe, schreibe ich es mal auf und veröffentliche es hier oder anderswo. So recht befriedigend finde ich es noch nicht, aber ich habe daran immerhin gelernt, wie man es richtig machen müsste. :) Aber nun zu den beiden erwähnten Programmen des "Fahrrad- Tacho mit Schnittstelle": '------------------------------------------------------------------------ ' Tacho.BAS (c) 1995 Wolfgang Strobl 1.0 8.1.95 '------------------------------------------------------------------------ ' (Minimalloesung) ' ' Funktion: ' ' Das Programm horcht auf den Schaltkontakt des Radcomputers, ' entprellt ihn und liefert fuer jede Radumdrehung ueber die ' serielle Schnittstelle mit 2400 Baud einen "." ab. ' ' Nachtrag: ' (Die serielle Ausgabe ueber einen Port der Briefmarke ist zwar ' nicht RS232-konform, läßt sich aber trotzdem direkt an eine ' serielle Schnittstelle eines PC anschließen, wenn die Leitungen ' nicht zu lang sind - über ein paar Meter an einer modernen ' 16550-Karte sowie am HP 200LX hatte ich jedenfalls keine ' Schwierigkeiten damit. Siehe dazu auch die Application Note No. 1 ' von Parallax, in der das ausführlicher erklärt wird.) ' ' Die Zeiterfassung muss PC-seitig stattfinden. ' ' 2400 Baud oder ca. 240 Zeichen / Sekunde sind mehr als ' ausreichend fuer den gedachten Zweck, es ist durchaus noch ' Luft fuer weitere Statusabfragen und/oder eine Erhoehung ' der Aufloesung durch weitere Magnete. ' ' Eine Erfassung eines zweiten Schaltkontaktes fuer Tritt- ' frequenz hingegen ist ohne externe Beschaltung kaum realisierbar. ' input 0 ' Reedrelais f. Radcomputer gegen Masse, ' Pullup 30k gegen 5V v. Briefmarke output 1 ' PC Serial input COMx 2400,N,8,1 l: button 0,0,255,0,b1,1,pressed ' nur entprellen ' hier evtl. andere Statusabfragen hinzufuegen goto l pressed: serout 1,N2400,(".") goto l end /*---------------------------------------------------------------------------*/ /* Tacho.C (c) 1995 Wolfgang Strobl 15.1.1995 */ /*---------------------------------------------------------------------------*/ /* Kurzbeschreibung Datenerfassung Weg/Zeit per Fahrradcomputer-Reedrelais und portablen DOS-kompatiblen PC. Hostprogramm passend zu Tacho.Bas für die Basic- Briefmarke. Funktionsweise Das Programm erwartet über die serielle Schnittstelle (COM1 ist hier hart verdrahtet) für jedes Schließen des Reedrelais ein Zeichen und gibt die Zeitdifferenz in Timer-Ticks (18.2Hz) zum vorherigen Schließen als eine in einer Zeile stehende Dezimalzahl aus (so daß man es bei- spielsweise für eine schnelle Auswertung einfach in Excel oder ein anderes Rechenblattprogramm mit Importfunktion reinziehen kann). Am Anfang und Ende des Programm wird außerdem Datum und Uhrzeit aus- gegeben. Das Programm wird beim ersten Tastendruck beendet. Vorgeschlagene Verwendungsweise MODE COM1 2400,N,8,1 TACHO > FAHRTxx.DAT Environment: Turbo C 2.0, DOS 6.2 */ #include #include #include #include int rc; /*---------------------------------------------------------------------------*/ Zeit() /* Datum/Uhrzeit auf stdio ausgeben @*/ /*---------------------------------------------------------------------------*/ { time_t Uhrzeit; time(&Uhrzeit); printf("%s\n",ctime(&Uhrzeit)); } /*---------------------------------------------------------------------------*/ main() /* Hauptprogramm @*/ /*---------------------------------------------------------------------------*/ { static clock_t ot,nt; printf("Stamp-Tacho 1.0\nStart "); Zeit(); while(1) { rc=bioscom(2,0,0); if (rc & 0x8000) {} else { nt=clock(); printf("%ld\n",nt-ot); ot=nt; } if (kbhit()) { printf("Stop "); Zeit(); exit(); } } }