Hallo Hier gibts ein kleines Projekt mit Schaltplan und Code. Es wird einer der billigen Aldi-Messschiebern initialisiert und ausgelesen. Die Daten werden interruptgesteuert in einen Buffer ausgelesen und nach erfolgter Übertragung ausgewertet. Der gemittelte Messwert wird über UART rausgeschickt und kann z.b auf dem PC mit HTERM o.ä. ausgelesen werden. Wenn auf dem Controller noch andere Interrupts laufen sollen, muss man die Handler entweder SEHR kurz machen oder während dem Empfang eines Datenpaketes abschalten, weil ansonsten ein Flankeninterrupt übersehen wird und danach !alle! ausgelesenen Werte nicht mehr stimmen. Da ich alles in Festkomma rechnen lasse, ist die Anzeige leicht falsch: Der Messschieber macht eine Auflösung von 806.299 Schritten/mm, ich teile aber durch 806. Für Zoll gibt es eine genaue Zahl. Für die elektrische Seite der Angelegenheit braucht man eine negative Spannung von -1.5Volt mit einer Belastbarkeit von etwa 3mA. Es empfiehlt sich, diese Spannung möglichst glatt zur Verfügung zu stellen, weil der Messschieber ansonsten im Messwert zu sehr schwankt. Ich habe 10n||100n direkt an die jetzt überflüssigen Batteriekontakte gelötet. Mit zwei Optokopplern werden Daten- und Taktleitung zum Steuern wahlweise auf Masse (das ist für die Leiste die pos. Versorgungsspannung) gezogen. Der dritte steuert zusammen mit dem BC547C die Versorgungsspannung des Messschiebers. Ist der Portpin auf VCC, geht der Transistor an und der Optokoppler aus. Bei GND genau andersrum und damit schliesst der Optokoppler die Versorgungsspannung des Messschiebers kurz. Das ersetzt den leider nicht vorhandenen Reset beim Messschieber. Feedback erwünscht.
wär' besser, wenn der schaltplan auch als bild drin wär' ansonsten thx for sharing
Hallo Thomas, aus deinem Schaltplan habe ich Anregung zur Verbesserung meiner Anzeige nehmen können, danke. In meinem Programm nutze ich zur Umrechnung in mm die Formel: Eingelesener Wert * 127/1024 . Wenn du 1270/1024 statt deiner 1000/806 nimmst, hast du ein genaues Rechenergebnis. Es grüßt der Jochen aus Do
So, hab mal weitergemacht. Jetzt hat das Ding eine Steuer- und Anzeigeeinheit auf dem Rechner (geschrieben mit Qt). Den Namen der Schnittstelle kann man nicht nur aus dem Pulldown-Menü auswählen, sondern auch mit der Tastatur eingeben. Vom Rechner aus kann man den Messschieber zurücksetzen(es wird einfach über die UART 'R' gesendet). Ausserdem kann man die Anzeige am Rechner "nullen", also relativ messen, ohne dass man dazu den Messschieber rücksetzen müsste. Controllerseitig dazugekommen ist der Empfang des 'R' und ein Timeout des Empfangsfensters für ankommende Daten. So kann man den Messschieber problemlos im laufenden Betrieb anschliessen und es ist auch nicht mehr sooo tragisch, wenn der Controller mal eine Flanke nicht erwischt. Der mitlaufende Timer macht in der jetzigen Form der ISR und einer Quarz-Frequenz von 12Mhz keine Probleme, was evtl. Verschlucken von Flanken angeht. Ausserdem ist alles mathematische natürlich in den PC verlagert worden. @error: Hab 2 *.pngs gemacht. @hajote: Cooler Tip! In der aktuellen Version aber natürlich nicht drin, weil ich mich auf dem PC mit Gleitkomma austoben kann :D
Hallo, ... wäre es möglich, nur das Auslesen-und-per-Seriell-versenen in einem ATTiny45 unterzubringen? Frage noch zum Protokoll: ist es ein Messchieber von der Art, der diese 2x24 Bit mit 96 kHz versendet? Frank
Rein vom Umfang des Programmes: Kein Problem. Der Tiny45 hat ja 4K Flash, mein Programm braucht so ~1200-1400Byte. RAM wird ~170Bytes verwendet. Allerdings sind die IO-Pins recht knapp. Man braucht: - 1xEXINT - 3xAusgänge an die Optokoppler - 1xDateneingang - 2xUART Naja, man kann mit ein paar Schaltungstricks den EXINT und den Dateneingang jeweils mit einem Ausgang für Optokoppler (DATA/CLOCK) zusammenlegen, da eh nicht eingelesen wird, solange der Messschieber initialisiert wird. Dann ist ein Pin frei, an den man dann einen externen Oszillator hängen kann. Ob das Programm auch mit dem internen 1Mhz-Oszillator klappt, weis ich nicht. Es kann an vielen Stellen Probleme machen (UART-Toleranz, alle Flanken mitkriegen,...) Und ja, das Protokoll entspricht dem hier: http://www.yadro.de/digital-messleiste/protokoll.html#a2
Ich habe das auch schon mal versucht. Bei der Hardware bin ich ein wenig sparsamer vorgegangen, bei der Software zum Einlesen der Daten habe ich mit Bascom dann leider keinen Fuß auf den Boden bekommen ... die Flanken eben ... - gemeinsame Masse (Minus) von Messschieber und Controller - Plus für Messschieber über 1KOhm und rote LED parallel aus einem Controller-Pin. Ausschalten ist dann wie Reset. - auf Mode-Umschaltung verzichten bzw. per Taste am Messschieber - Daten und Takt vom Messschieber über je eine Transistor-Emitterstufe zum Controller So reichen dann auch die 6 Port-Pins: - 2 x Daten und Takt v. Messschieber - 1 x Spannung/Reset z. Messschieber - 1 x externer Takt - 2 x TX/RX Da ich leider von C überhaupt keine Ahnung habe, wäre es super, wenn du für diese Konfiguration ein Hex-File erstellen würdest. Achtung, die Eingangssignale werden von den Emitterstufen invertiert :-) Meine Gegenleistung könnte z.B. ein Anzeigetool für den Desktop sein (ohne dass ich das deinige etwa schlecht finde ... ich kann bloß Nichts anderes): - dass keinerlei Installation benötigt - freie Wahl des COM-Port und dessen Parameter - nur aus einer EXE/APP-Datei besteht - keine DLLs, keine Registry-Einträge - Daten als Text, CSV- oder Excelsheet sichern kann - grafische Anzeige z.B. als Kurve - Statistik: Mittelwert, Standardabweichung, Varianz ... - Daten in eine SQL-Datenbank schreibt oder per TCP/IP verschickt - Sichern der Voreinstellungen - für Windows, Mac und Linux (identische Oberfläche) Frank
Frank Esselbach wrote: > Ich habe das auch schon mal versucht. Bei der Hardware bin ich ein wenig > sparsamer vorgegangen, bei der Software zum Einlesen der Daten habe ich > mit Bascom dann leider keinen Fuß auf den Boden bekommen ... die Flanken > eben ... > > - gemeinsame Masse (Minus) von Messschieber und Controller > - Plus für Messschieber über 1KOhm und rote LED parallel aus einem > Controller-Pin. Ausschalten ist dann wie Reset. > - auf Mode-Umschaltung verzichten bzw. per Taste am Messschieber > - Daten und Takt vom Messschieber über je eine Transistor-Emitterstufe > zum Controller So eine Hardware hab ich mir auch überlegt, aber wegen einigen Problemen verworfen: - Das Gehäuse/alle Metallteile am Messschieber liegen auf +Uf der LED. Legt oder befestigt man den Messschieber an was metallischem, das auf Masse liegt(kommt schonmal vor) ist er aus. Bei dir schliesst man zwar nur die LED kurz, aber schön ist es trotzdem nicht. - Bei den billigen Messschiebern kommt man an die MODE-Taste nicht ran, nur an ZERO. Damit kriegt man das Ding nicht in den Fast-Modus -> reagiert sehr träge und Mittelwertbildung kann man vergessen. - Kann sein, dass mein Messschieber eine Ausnahme ist, aber dieses Sensibelchen interpretiert nahezu jede winzige Last als Steuerimpuls. Daher auch das Design mit den Schmitt-Triggern, wo die Leitungen nahezu völlig unbelastet sind. Für nen habhaften Basisstrom hats bei mir nie gereicht. - Es ist cool, wenn man an dem Messschieber keine Tasten mehr drücken muss, dann kann man ihn auch an einer unzugänglichen Stelle montieren. > So reichen dann auch die 6 Port-Pins: > > - 2 x Daten und Takt v. Messschieber > - 1 x Spannung/Reset z. Messschieber > - 1 x externer Takt > - 2 x TX/RX > > Da ich leider von C überhaupt keine Ahnung habe, wäre es super, wenn du > für diese Konfiguration ein Hex-File erstellen würdest. Achtung, die > Eingangssignale werden von den Emitterstufen invertiert :-) Kann man drüber reden, ist eher kein grosser Aufwand. Schaltplan? Der Tiny soll das Ding quasi nur einschalten, seriell Daten davon einlesen und diese über die RS232 raussenden? > Meine Gegenleistung könnte z.B. ein Anzeigetool für den Desktop sein > (ohne dass ich das deinige etwa schlecht finde ... ich kann bloß Nichts > anderes): > > - dass keinerlei Installation benötigt > - freie Wahl des COM-Port und dessen Parameter > - nur aus einer EXE/APP-Datei besteht > - keine DLLs, keine Registry-Einträge > - Daten als Text, CSV- oder Excelsheet sichern kann > - grafische Anzeige z.B. als Kurve > - Statistik: Mittelwert, Standardabweichung, Varianz ... > - Daten in eine SQL-Datenbank schreibt oder per TCP/IP verschickt > - Sichern der Voreinstellungen > - für Windows, Mac und Linux (identische Oberfläche) Hab ich im Moment keine Verwendung dafür, ich wollte einfach mal "was mit Oberfläche" machen und da kam mir das Ding grad recht. Aber vielleicht kann ja jemand anders was damit anfangen. Mit welchem Toolkit arbeitest du eigentlich? QT/Wxwidgets?
Hallo, > So eine Hardware hab ich mir auch überlegt, aber wegen einigen Problemen > verworfen: > Das Gehäuse/alle Metallteile am Messschieber liegen auf +Uf der LED. > Legt oder befestigt man den Messschieber an was metallischem, das auf > Masse liegt(kommt schonmal vor) ist er aus. Bei dir schliesst man zwar > nur die LED kurz, aber schön ist es trotzdem nicht. Ist für meine Anwendung kein Problem. Ich brauche das Ding, um im Rahmen von Gutachten hunderte von Messungen nicht aufschreiben bzw. eintippen zu müssen. Keine metallische Maschine in der Nähe ... > Kann sein, dass mein Messschieber eine Ausnahme ist, aber dieses > Sensibelchen interpretiert nahezu jede winzige Last als Steuerimpuls. > Daher auch das Design mit den Schmitt-Triggern, wo die Leitungen nahezu > völlig unbelastet sind. Für nen habhaften Basisstrom hats bei mir nie > gereicht. Ich habe je einen SC216E (sog. npn-Miniplast-Transistoren aus DDR-Restbeständen) mit einem Widerstand 1 kOhm in der Basisleitung und 5 kOhm in der Kollektorleitung verwendet. Funktioniert ohne Probleme. > - Es ist cool, wenn man an dem Messschieber keine Tasten mehr drücken > muss, dann kann man ihn auch an einer unzugänglichen Stelle montieren. Da ich den Messschieber sowieso in die Hand nehmen muss, ist das für mich nicht so schwerwiegend. >> Da ich leider von C überhaupt keine Ahnung habe, wäre es super, wenn du >> für diese Konfiguration ein Hex-File erstellen würdest. Achtung, die >> Eingangssignale werden von den Emitterstufen invertiert :-) > Kann man drüber reden, ist eher kein grosser Aufwand. > Schaltplan? Der Tiny soll das Ding quasi nur einschalten, seriell Daten > davon einlesen und diese über die RS232 raussenden? Ja, genau. Wäre toll. Zur Kontaktierung habe ich am Messschieber übrigens eine SMD-Mini-USB-Buchse verwendet, passt perfekt. >> Meine Gegenleistung könnte z.B. ein Anzeigetool für den Desktop sein >> (ohne dass ich das deinige etwa schlecht finde ... ich kann bloß Nichts >> anderes): > Hab ich im Moment keine Verwendung dafür, ich wollte einfach mal "was > mit Oberfläche" machen und da kam mir das Ding grad recht. Aber > vielleicht kann ja jemand anders was damit anfangen. > Mit welchem Toolkit arbeitest du eigentlich? QT/Wxwidgets? Ich verwende RealBasic. Das ist ein voll objektorientiertes modernes Basic (eigene Klassen, Module, grafisches Oberflächendesign) ähnlich wie VB - nur viel besser. Die IDE/Compiler gibt es für Windows, Mac und Linux. Auf jeder Plattform kann man auch lauffähige Programme für die anderen Plattformen kompilieren, der Quelltext ist ohne Änderungen austauschbar. Die Programme bestehen aus einer einzigen Datei, keine externen DLLs, keine extra RuntimeLib ... Frank
Frank Esselbach wrote: >>> Da ich leider von C überhaupt keine Ahnung habe, wäre es super, wenn du >>> für diese Konfiguration ein Hex-File erstellen würdest. Achtung, die >>> Eingangssignale werden von den Emitterstufen invertiert :-) > >> Kann man drüber reden, ist eher kein grosser Aufwand. >> Schaltplan? Der Tiny soll das Ding quasi nur einschalten, seriell Daten >> davon einlesen und diese über die RS232 raussenden? > > Ja, genau. Wäre toll. Zur Kontaktierung habe ich am Messschieber > übrigens eine SMD-Mini-USB-Buchse verwendet, passt perfekt. Schlechte Nachricht: Die Tinys haben keine richtige Hardware-UART (hab mit Tinys generell wenig zu tun). Man kann zwar softwaremässig eine nachbilden, aber dafür braucht man den INT0 und der muss schon den Clock des Messschiebers überwachen. Es gibt noch nen Pin-Change-Interrupt, der macht die Sache allerdings komplizierter. Alternative wären Megas ab der 8/48er Klasse. Muss es denn ein Tiny sein, wenns eh ein Einzelstück wird? Am Programm müsste ich dann nur Registernamen anpassen und die Initialisierung des Messschiebers auf deine Hardware ändern.
Hallo, > Alternative wären Megas ab der 8/48er Klasse. Muss es denn ein Tiny > sein, wenns eh ein Einzelstück wird? > Am Programm müsste ich dann nur Registernamen anpassen und die > Initialisierung des Messschiebers auf deine Hardware ändern. Ein ATMega8 wäre natürlich auch eine Lösung, damit entspannt sich das Pin-Problem drastisch ... immer noch klein genug für ein Steckergehäuse und trotzdem gut zu löten und zu programmieren. Noch zwei Ideen/Fragen, bitte nicht als "Nimmersatt-Syndrom" auffassen: Es gibt da im Internet ein Stück Software, dass einen USB-zu-RS232-Wandler aus einem Tiny oder auch Mega macht, ohne weitere Hardware. Ich kann Speicher- und Rechenbedarf jetzt nicht so gut einschätzen, aber wäre es denkbar beides in einem ATMega (128?) unterzubringen? Viele abreiten mit Bascom. Dessen Funktionsumfang lässt sich durch Librarys erweitern. Wäre es vorstellbar, deine Lese-Funktion in eine solche Lib zu verpacken ... dann hätten eine Menge Leute was davon. Gruß, Frank
@ verrückt: Der hat nur 128 Byte RAM, das reicht leider nicht. @Frank: Ok, dann wirds der Mega8. Mir ist zwar noch eingefallen, dass man ja eigentlich nur eine Leitung von nem beliebigen Pin braucht, wenn das Gerät nur senden soll, aber da müsste ich mich erstmal hinhocken und probieren. Wenn dir der Mega8 auch taugt, ist das ja erledigt und du kannst dann von deiner GUI dem µC auch was senden (An/Aus o.ä.). Wenn du das Gerät dann an den USB hängen willst, empfehle ich dir entweder den Einsatz eines FT232 auf der Platine oder eines Adapterkabels (Pollin 721 034). Ich hab von BASCOM leider absolut keine Ahnung und weis daher nicht, wie man C-Sourcen in ne lib dafür wandelt. Ich mag irgendwie keine Programmiersprachen, wo man {} nicht verwenden kann. Von wegen end if und so... ;-)
So, habs mal für den Mega8 umgeschrieben. Pinbelegung: PD0 ->RXD PD1 ->TXD PD2(EXINT0)->CLOCK PD4 ->DATA PD5 ->POWER Quarz oder Oszillator anschliessbar. Sollte 12Mhz haben, ansonsten muss die Software angepasst werden. Damit bleibt der EXINT1(PD3) frei und könnte für einen evtl. Software-USB genutzt werden. Platz hat der Controller genug. Vielleicht juckts mich mal... Habe hier keinen Mega8 und kann daher nicht testen. Bei Problemen einfach melden. Dein Messschieber ist anscheinend etwas robuster als meiner. Trotzdem hab ich eine "Resetzeit" von 2sec vorgesehen, die jedesmal abläuft, wenn du den Controller neu starten lässt oder über die serielle das Zeichen 'R' sendest. Solange hat das Gerät einfach keinen Saft. Im Zweifelsfall kannst du ihm noch nen Widerstand parallel schalten, damit sich die Kapazitäten entladen können (ich mach das ja brutal über nen Optokoppler). Für die Empfangsseite eine kurze Erklärung: Der 32bit signed int wird vom µC in einen String gewandelt, an den anschliessend der ASCII-Charakter '\n' (LF) angehängt wird. In Qt konnte ich damit eine Methode zum zeilenweisen Auslesen aus dem seriellen Buffer verwenden. Den empfangenen Wert muss man dann noch umwandeln: Teilen durch (256*806,299). Das ergibt den Wert in mm. Gleitende Mittelwertbildung nach Wunsch. Das mit der Mini-USB-Buchse ist ein guter Tip.
Hallo, kennt jemand einen Hersteller von Steckern für die Meßschieber? Möchte nämlich nur ungern ein Kabel anlöten. Stecken wäre mir lieber. Servus, Helmut.
@helmut: Ich habe so ein Interface für 2 Meßschieber an einem 2312 schon mal gebaut und programmiert. (Keine Zauberei, im Fast Mode wird nicht jeder Meßwert beider "Meßköpfe" wirklich verarbeitet, hat nicht gestört) und habe dabei die originalen in China hergestellten Kabel mit Steckern für die Meßschieber verwenden dürfen......vergiß es. Die Dinger sind die Wackelkontakte in Person. Dann lieber die USB Buchse. Gruß, Holm
Hallo, beim Anschliessen von Messschiebern an Digitalanzeigen, am besten die Kabel direkt anlöten. Eine ausführliche Anleitung gibts hier: http://www.caliper2pc.de/schieblehre/umbau/umbau.html Gruß Frank
@thomas: ich habe eine unfertige Sache in der Kiste, bei der ein Tiny 2313 2 derartiger Meßschieber ausliest und abwechseln auf einem LED Display darstellt. Am RAM kann es also nicht liegen. Unfertig ist die Sache deshalb, weil die Tasten noch nicht eingebunden sind und die LED Anzeige, die im Multiplexbetrieb angesteuert wird, noch flackert. Ich wollte das Teil mal an meine Drehbank schmieden bin aber aus Zeitgründen nicht dazu gekommen weiter zu basteln. Geschrieben ist das in C, die ISRs sind eingebundener Assembler. Gruß, Holm
Hallo!! Ist ein Spezialist im Forum der Erfahrung mit PROFiTEXX- Messschiebern hat, welches Protokoll wird eingesetzt??? Würde mich auf eine Antwort sehr freuen!!
Habe vor ca. 2-3 Jahren zwei solche Messschieber erworben. Wenn es noch die gleichen sind (meine haben eine Skala mit scharzem Hintergrund und gelber Schrift), dann haben sie das 2x24bit-Protokoll. Diese Messschieber sind nach meiner Erfahrung robuster als z.B. 'Workzone'-Messchieber (bcd-Protokoll, von Aldi,Lidl, etc.).
Hallo Leute ! Das alles schöne was Ihr hier schreibt ist zwar ein wenig alt, aber ich versuche trotzdem, bevor ich ein neues Thread aufmache und gleich von dem Moderator eine Kugel in den Kopf bekomme. Habe mir hier die Schaltung aufgebaut - alles wunderbar! nun die Fräse steht im Keller- kein PC da. währe nicht einfacher da einfach ein 2x8 LCD Display anzuschließen und die Daten anzuzeigen? Also einfacher- für mich - ist es nicht. Kann mir da jemand auf die Sprünge helfen ? Geht schon damit los dass ich ein LCD mit 16 MHz cpu nicht steuern kann... :( Hier gibt es doch bestimmt einen der dieses Problem unter 2 Minuten lösen kann ? Danke für jede Hilfe und grüße Bravo
Ich hatte das Thema schon mal vor langer Zeit. Für Programmierer: Die chinesischen Messschieber spucken ihre Daten glaube ich mit ca 96kBit/s aus. Mit einem AVR Atmega 16, 4Mhz Quartz und ein einem ordentlichen Assemblerprogramm ist das Auslesen solcher Messschieber kein Problem. Reicht eine Display-Refreshrate von 100ms aus, kann man ohne weiters 4 Messchieber einlesen, die Messwerte noch verwurschteln, über RS232 ausgeben und auch an einem LCD-Display anzeigen.
Hallo! Also vor erst danke für die Antwort. Ist das hier irgendwo im Forum beschrieben? Ich denke ich habe schon alle Beiträge zu diesem Thema durch? Hier hat nicht jemand " rein zufällig" irgendwo ein Code gepostet ? Ich versuche verzweifelt die Daten die an RS232 geschickt werden an den Display ( Port D) zu schicken, aber ich denke da bin ich nicht gut genug für. Na ja , bin da eher schlecht. Versuche den Code hier , von diesem Thread umzustricken. mfg Bravo
Wo ist genau das Problem? Im Prinzip ist das nicht schwer. In der main-Schleife heisst es ja
1 | #include "scale.h" |
2 | //...
|
3 | int main(void) |
4 | {
|
5 | config(); |
6 | int32_t messwert=0; |
7 | char text [8]; |
8 | for(;;){ |
9 | if(flag_buffer_voll){ |
10 | flag_buffer_voll=0; |
11 | messwert=wandle_messschieber(); |
12 | |
13 | ltoa(messwert, text, 10); |
14 | strcat(text, "\n"); |
15 | uart_puts (text); //tauschen gegen Anzeigeroutine des Displays |
16 | }
|
17 | if(flag_10Hz){ |
18 | flag_10Hz=0; |
19 | verwalteSteueranweisung(); |
20 | }
|
21 | }
|
22 | }
|
Hier wäre je nach verwendeten Display zunächst ein entsprechendes Interface einzubinden und zu konfigurieren (für alle Standardsachen kann man fertige libs finden). Und dann einfach statt
1 | uart_puts (text); |
den Anzeigebefehl für dein Display hin.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.