PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : digitale schieblehre auslesen



russak47
24.12.2009, 01:17
Hallöchen,

hab mir für die winterferien ein kleines Projekt ausgedacht und bräuchte da mal ein kleines bisschen Hilfe von euch.
Ich will mir für meine Drehmaschine ne Digitalanzeige bauen. Weil Glas und Kohlemessysteme mir zu teuer sind hab ich gedacht ich nehme diese 10€ Baumarkt digital Schieblehren.
Die haben ja einen Anschluss hinten drann damit man sie auslesen kann.
nach ein bissl gegoogle hab ich die Protokolle rausgefunden.
Es gibt zwei:
7BCD: die einzelnen Dezimalstellen werden als BCD Zahl gesendet
Sylvac: es werden zwei Packete a 24Bit gesendet. Das zweite packet enthält die relevanten Daten.
Hier (http://img694.imageshack.us/img694/9432/timingsylvac.jpg) ein Timingdiagramm
Ich denke, dass meine Schieblehren das Sylvac Protokoll haben da es häufiger ist. Hab auch kein Oszi zum nachschaun.

Mein Problem ist jetz ich weiß nciht wie ich das ganze auslesen soll. Ich dachte da an den Befehl shiftin.
Aber wann weiß ich dass ein Packet anfängt?
Sonst fange ich ja an mitten drinn daten in die variable zu schreiben die dann aus zwei Packeten stammen könnten. Und genau die Pausen zwischen den Packeten zu treffen ist ja fast unmögich.[/img]

stefan_Z
24.12.2009, 04:45
Das ist ein einfaches serielles Protokoll - per UART kein Problem.
Das hier ist neu (glaube ich), hatte ich bisher nicht gesehen: http://www.roehrenkramladen.de/DRO/Projektmappe_MAS_V1_0.htm

Den seriellen Port haben sogar ALLE Schieber! Meinem habe ich einen nachgerüstet ;-)

repi64
24.12.2009, 13:39
Wenn du was fertiges suchst, kannst du bei ELV nach SLA 1 suchen.
http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=13034&flv=1&bereich=&marke=

Gruß

russak47
24.12.2009, 14:16
@ stefan

Wie denn per UART?
Der röhrenkramladen typ hat es auch mit shift in gemacht. Verstehe aber nciht wie er erkennt dass ein packet anfängt und er einlesen kann. Wenn man eins erkannt hat kann man ja abzählen wann ein neues anfängt.


@repi

wollte schon selber bauen dann hab ich was zu tun. Außerdem ist das ding ein bissl klein. Muss während der Arbeit gut ablesbar sein.

russak47
24.12.2009, 15:37
Habe noch ein Diagramm gefunden klick (http://img691.imageshack.us/img691/8891/sylvac.jpg)
Könnte man nicht die Zeit zwischen den Tacktimpulsen messen? Also wenn Zwischen den impulsen mehr als 10ms vergangen sind dann kann ich auf das nächste packet warten und auslesen?

stefan_Z
24.12.2009, 22:12
Also es wird ein Clock-Signal geliefert - somit musst du den Takt nicht selber rausfinden, der entspricht logischerweise der Clock!
Habe meine mal angeschlossen gehabt (einfach per MAX232 an den PC) und es kamen Daten.
Allerdings müssen die Pausen erkannt werden ume eine anständige Auswertung zu machen, da hast du Recht.
Die UART kann einen Reset erkennen, wie sich das mit den Pausen mitten im Paket verhällt weiß ich nicht.

Shiftin ist nix anderes als den Zustand eines Pins in Abhängigkeit einer vorhandenen (oder selber generierten) Clock einzulesen.
Im Prinzip gehst du hin und fragst immer wieder den Clockpin ab. Wenn der sich ändert, dann greifst du dir den Datapin und speicherst seinen Zustand in das erste Bit der Ausgabe-Variable.
Dann Clock prüfen bis der umgekehrte Zustand eintritt, wieder Data abfragen, usw.

Wenn Clock jetzt nicht nach der erwarteten Zeit wechselt, dann gehst du erstmal von der Startpause aus und merkst dir das.
Falls die Pause noch länger ist, dann handelt es sich entweder um die End-Pause, oder es ist die Mittelpause. In den beiden letzten Fällen verwirfst du also erstmal eventuelle Daten.
Hast du die Start-Pause und es kommt ein normales Signal hinterher speicherst du das, erkennst die Mittelpause, nimmst den 2. Block Daten und erkennst das Ende, fertig.

Dann Daten verwursten, ausgeben und wieder von vorne.

Oder du entkernst dir das Listing aus meinem Link um nur die reine Ausleserei übrig zu behalten - und baust darauf dann dein eigenes Programm auf.

russak47
25.12.2009, 12:48
Ich denke ich hab jezt den groben programmablauf im kopf.
Mit dem externen interrupt erkenne ich eine ansteigende clock flanke. Dann warte ich ab ob wie lange die Zeit zwishcen den einzelnen flanken ist. Wenn ich einmal die pause gefunden hab merke ich mir das und gehe aus der ISR. Beim nächsten mal kann dann gleich ausgelesen werden. Jetzt stellt sich mit nur die Frage ob die Zeit zwischenansteigender Flanke(bei der der Interrupt auslöst) uund fallender Flanke(bei der ich auslese) nicht zu kurz ist. Weil es dauert ja bissl bis das auslesen anfangen kann....obwohl bit 0 - 3 werden glaube ich soweiso gelöscht.

stefan_Z
25.12.2009, 16:39
"Serial data at 10 to 16 kHz with 1 stop bit, 1 start bit, 1 parity bit (odd)"

8MHz interner Oszi wäre also schon 500x schneller.. Sollte machbar sein ;-)