hardware:controllers:s0-an-rs232
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
hardware:controllers:s0-an-rs232 [2012/01/02 23:50] – typo fix r00t | hardware:controllers:s0-an-rs232 [2019/05/29 10:29] (aktuell) – Link ins Mailinglistenarchiv fixed zugschlus | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ==== direkter anschluss | + | ====== S0-Impuls Zähler direkt über RS232 auswerten |
+ | Diese simple Methode erlaubt es, ohne zusätzliche Hardware, einen S0-Impuls Zähler über einen RS232-Port auszuwerten. Viele Computer und embedded Systeme besitzen einen RS232-Port. Alternativ kann auch ein RS232-zu-USB Adapter benutzt werden. | ||
- | diese einfache methode erlaubt es, ohne nennenswerte zusaetzliche hardware(!), | + | < |
+ | Der Großteil des Inhalts dieser Seite stammt aus einer [[http:// | ||
+ | </ | ||
- | die auswertung wird von [[/ | + | ===== Grundidee ===== |
+ | Ziel ist es den Abstand aufeinanderfolgender Impulse zu messen, | ||
- | das skaliert auch ganz prima: fuer jeden weiteren kanal nur noch einen weiteren usb-rs232-adapter, | + | Und seit 2 Jahrzehnten ist es gängig, dieses DCF77-Signal einfach über eine serielle Schnittstelle mit 50 Baud auszuwerten ([[http:// |
- | und irgendwann vielleicht noch einen usb-hub... | + | |
- | < | + | Die Länge |
- | Der grossteil | + | |
- | </ | + | |
- | === grundidee | + | ===== Umsetzung ===== |
- | man will ja nur pulse zaehlen mit genauer " | + | Bei der Verkabelung ist auf die Polarität des S0-Anschlusses zu achten. Viele S0-Zähler realisieren diesen über einen Optokoppler |
- | so max. 1 mal pro sekunde | + | |
- | das alles erinnert *exterm* an das DCF77 funkuhr-signal (1 puls pro sekunde, | + | |
- | 100 oder 200 msec lang == 0 oder 1)... | + | |
- | und seit so 2 jahrzehnten ist es usus, dass man deses dcf77-signal einfach | + | Also muss |
- | an eine serielle schnittstelle haengt | + | * S0- (Swissnox Klemme 21) mit RS232-Rx (Pin 2 auf DSUB-9) und |
- | ist die startflanke | + | * S0+ (Swissnox Klemme 20) mit RS232-RTS (Pin 7 auf DSUB-9) |
- | und je nach dem ob kurzer oder langer puls sind mehr oder weniger bits gesetzt | + | verbunden werden. |
- | und man kann sogar die pulslaengen damit erkennen. | + | Die restliche Verkabelung auf ' |
- | pulslaengen gibts hier beim stromzaehlen nicht, also noch einfacher; | + | {{: |
- | so muss man wirklich nur die S0-ausgaenge (zumind. fuer SWISSNOX) | + | |
- | an eine serielle schnittstelle haengen zwischen Rx und z.b. RTS | + | |
- | (irgend eine handshake output leitung, die man dann auf 0 (== aktiv == space) | + | |
- | ziehen muss). | + | |
- | dann muss man nur noch warten bis der S0-pulse als " | + | |
- | und dieses dann einlesen und den timestamp merken/ | + | |
- | === umsetzung === | + | Mac Gyver Variante der Schaltung. Für den produktiven Einsatz nicht empfohlen |
- | das kann man dann direkt z.b. mit einem usb2serial adapter/ | + | |
- | oder auf eine echte serielle schnitstelle geben, so man noch hat;) | + | |
- | also: SWISSNOX klemme 21 muss mit RS232 Rx (pin 2 auf DSUB-9) und klemme 20 mit RTS (pin 7 auf DSUB-9) | + | {{:hardware: |
- | verbunden werden, der rest (230V) wie gehabt. | + | |
- | man kann dazu direkt zwei aufgebogene bueroklammern | + | Alternativ kann man auch die Reste einer seriellen Maus endlich zu was Vernünftigem |
- | mit hilfe eines " | + | |
- | oder etwas bequemer (wenn man noch 2 weitere bueroklammern und 2 krokoklemmen kabel uebrig hat...). | + | |
- | alternativ kann man auch die reste einer original microsoft seriellen maus endlich zu was vernueftigem | + | {{: |
- | verwenden und damit den anschluss an den usb/seriell adapter machen (bei mir: orange=Rx, weiss=RTS). | + | |
+ | ===== Raspberry PI ===== | ||
+ | < | ||
+ | vzlogger loggt jetzt auch GPIOs.. | ||
+ | </note> | ||
+ | <note warning> | ||
+ | ACHTUNG: es handelt sich dort um einen UART-Port mit 3,3V-Pegeln, | ||
+ | nicht um eine RS232 Schnittstelle.\\ | ||
+ | Die 3,3V entsprechen auch nicht der S0-Norm EN 62053-31, https:// | ||
+ | </ | ||
- | === software === | + | Beim Raspberry Pi ist ein interne UART als '' |
- | das auswerten wird von [[/software/controller/ | + | Die Pinbelegung ist GPIO 15 für RXD (P1-10).\\ |
- | alternativ, und/oder zum testen, bietet sich folgendes an: | + | Achtung! Das funktioniert nicht in Verbindung mit Udos RPi-Erweiterungen, da dort diese Pins schon belegt sind. |
- | software: | + | Da es sich um 3,3V-Pegel handelt, wird die RTS-Leitung nicht benoetigt, GND und/oder Vcc reichen aus.\\ |
- | (50 baud, jedes zeichen sofort ausgeben, ...) | + | (RTS GPIO 17 für RTS (P1-11), siehe [[http:// |
+ | Allerdings ist die RTS Funktion standardmäßig deaktiviert. Zum aktivieren muss der Pin erst in Alternate Function 3 versetzt werden. Das kann z.B. mit diesem Tool erfolgen: [[http:// | ||
- | stty time 1 min 1 -icanon < /dev/ttyUSB0 | + | ===== Software ===== |
+ | Die Auswertung der seriellen Schnittstelle wird dabei von [[/software/controller/ | ||
- | und schon kann man die daten wie gewuenscht lesen. | + | ==== Alternative ==== |
- | time stamp kommen, wenn man kein C o.ae. programmieren will ? | + | Harald König hat bei der Entwicklung dieser Methode Standardtools von Linux verwendet. |
- | z.b. so: | + | Seine Skripte sind im git verfügbar: [[https:// |
- | < | + | |
- | | + | |
- | </code> | + | |
- | und um das ganze besser beurteilen und verdauen zu koennen, | + | |
- | noch ein bissl test code dazu: | + | |
- | < | + | |
- | ( strace -ttt -e read cat < /dev/ttyUSB0 > /dev/null ) 2>&1 | awk ' | + | |
- | </code> | + | |
- | spalte 1 liefert dann die leistung in watt, 2 die laufende zeit in sekunden, 3 die zeit seit dem letzten puls, und dann noch den gesamten strace-output mit original timestamp. | + | |
+ | Serielle Schnittstelle richtig konfigurieren (50 Baud, jedes Zeichen sofort ausgeben, ...): | ||
+ | < | ||
- | es fallt dabei auf (zumind. bei meinem setup), dass immer mal wieder ein " | + | Zeichen einlesen und Timestamp erzeugen: |
- | < | + | < |
- | 1275071653.195588 | + | |
- | 1275071681.731568 read(0, " | + | |
- | 1275071710.623568 read(0, " | + | |
- | 1275071739.471581 read(0, " | + | |
- | 1275071768.351691 read(0, " | + | |
- | ==> | + | |
- | 1275071797.271617 read(0, " | + | |
- | 1275071826.107561 read(0, " | + | |
- | </code> | + | |
- | aber die lassen sich ja leicht wegfiltern, z.b. mit | + | |
- | < | + | |
- | grep ' | + | |
- | </ | + | |
- | wenn man die daten gleich in der datenbank haben will (mit dem PHP/mysql code von Florian Ziegler, daher die rundung der timestamps? | + | Etwas mehr Test-Code um das ganze besser beurteilen zu können: |
- | < | + | < |
- | ( strace -ttt -e read cat < / | + | |
- | </ | + | |
- | und schon fuellt sich die datenbank! | + | |
+ | Spalte 1 liefert dann die Leistung in Watt, 2 die laufende Zeit in Sekunden, 3 die zeit seit dem letzten Impuls, und dann noch den gesamten strace-output mit original Timestamp. |
hardware/controllers/s0-an-rs232.1325544658.txt.gz · Zuletzt geändert: 2012/01/02 23:50 von r00t