Forum: Projekte & Code Lidl-Multimeter PDM-300-C2 Analyse und Erweiterungen


von Volker U. (Gast)


Lesenswert?

Moin,

ich hab mal ein Projekt aufgesetzt um ein billige Autorange-Multimeter 
vom Discounter aufgesetzt. Dieser Thread führt damit den Hinweis-Thread 
aus dem 'Markt-Bereich' fort: 
Beitrag "(Tipp) Günstiges 13Euro Autorange Multimeter derzeit beim Lidl" . Der Wiki-Artikel zum 
Projekt ist dort: Multimeter PDM-300-C2 Analyse.

Als nächste lade ich mal ein paar Detail-Fotos vom Display und 
Schnittstellen hoch und schau was man an der unbestücken LED (?optischen 
Schnittstelle?) oben links machen könnte. Sinnvoll scheint mir auch eine 
Signalaufzeichnung an TX zu etablieren, ich dachte da an einen RaPi mit 
Sigrok per Kabel durch Batteriefach.

Let's do it!

von Baendiger (Gast)


Lesenswert?

Spannendes Projekt!
Hast du die Möglichkeit die Genauigkeit zu überprüfen? Muss ja nicht 
aufwendig sein:
- <0,1% Widerstände falls du welche hast
- genaueres Multimeter zum Vergleich
- Referenzspannungsquelle
- etc.

von Volker U. (Gast)


Lesenswert?

Baendiger schrieb:
> Hast du die Möglichkeit die Genauigkeit zu überprüfen? Muss ja nicht
> aufwendig sein:
> - <0,1% Widerstände falls du welche hast
> - genaueres Multimeter zum Vergleich


Ich hab hier ein paar 0,1% 1K, 2k,... Widerstände von einem R2R-projekt 
und ein 4.5 stelliges Tischmultimeter (ca. 40 Jahre alt, unkalibriert). 
Die Widerstände kann ich mal bei Gelegenheit dranhalten, für genauere 
Vergleichsmessungen müsste ich bis zum Ende der Ausgangssperre warten um 
in der Vereinswerkstatt mal nach Messequipment zu schauen. Vielleicht 
kommt da ja ein anderer eher an Vergleichsequipment.

von Andre M. (andre1597)


Lesenswert?

Volker U. schrieb:
> Als nächste lade ich mal ein paar Detail-Fotos vom Display und
> Schnittstellen hoch und schau was man an der unbestücken LED (?optischen
> Schnittstelle?) oben links machen könnte.

>Betrifft: unbestückte Optische Schnittstelle BL1

Hallo tolle Beiträge um das Lidl - DMM! Meine Vermutung wäre, dass es 
sich hier nicht um eine Schnittstelle handelt, sondern sich ehr 
vielleicht um die "eingesparte" Display-Beleuchtung handelt. Die nähe am 
Display und die vorhandenen Bohrlöcher für 2 Kabel könnten dies vermuten 
lassen. Möglicherweise könnte man diese zum Leben erwecken.(Wenn ein 
"Schalt" - Signal vorhanden ist) Es wäre eigentlich nur ein 
Treibertransistor, Vorwiderstand R10 und ein Widerstand R11 an Diode 
notwendig.

von DCF 7. (dcf77)


Lesenswert?

Die Billigheimer sind nicht schlecht.
Die hat man vielleicht nicht so lange wie ein Fluke, kostet aber auch 
nur Bruchteil.
Wer keines mehr bei Lidl bekommen hat, alternativ gibt es günstige 
Uni-t.

https://www.youtube.com/watch?v=vgri9ETWaSY

von michael_ (Gast)


Lesenswert?

DCF 7. schrieb:
> Die hat man vielleicht nicht so lange wie ein Fluke,

Vielleicht bei dir nicht.

Mein Multiprüfer-II hat 55 Jahre auf dem Buckel, das M3800 30 Jahre, ein 
Fluke 20 Jahre usw.
Auch das UNIVO hat mich 50 Jahre begleitet.

https://www.radiomuseum.org/r/eka_multimeter_univo.html

Ich benutze es noch sehr oft, vor allem wenn dig. Anzeigen spinnen.

Man muß nur pfleglich damit umgehen.

von Volker U. (Gast)


Lesenswert?

Status: An der Diodenschnittstelle habe ich beim Ersten Durchprobbiern 
kein Signal gefunden. Am TX kommen einzelne nichtidentische Datenpakete, 
die ich mal per Videokamera am Scope mitgeschnitten habe. Allerdings ist 
der Mitschnitt weder klein (25MB) noch sonderlich schön, als das ich ihn 
an diese Posts anhänge oder als Download auf dieses Forum bereitstellen 
kann. Dafür gibt es drei einzelne Frames neu im Artikel:

Multimeter PDM-300-C2 Analyse: Signale

Als nächste bekommt TX ein Drähtchen angelötet, damit man auch die 
Anzeige beobachten kann. Und das Terminal f. 300 Baud o.ä. wie 
vorgeschlagen wird drangehangen.

von Tim V. (Gast)


Lesenswert?

Volker U. schrieb:
> Multimeter PDM-300-C2 Analyse: Signale

Sieht doch gut aus!

Bedenke beim dekodieren das es teilweise üblich ist die LCD-Bitmap zu 
senden und nicht BCDs..

von Benedikt M. (bmuessig)


Lesenswert?

Insgesamt sind es ja 42 Segmente. Es müssten also 5 1/4 Bytes an 
Nutzdaten gesendet werden (wenn alle Segmente übertragen werden). Ich 
gehe auch sehr davon aus, dass ein Bitmap der Segmentzustände übertragen 
wird.

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Ich habe dank NormalZeit, heute einige Multimeter erhalten :-)

Bei dem Serialport habe ich ein gutes Gefühl. Die Daten werden mit 2400 
8N1 gesendet (siehe Signal 1+2).

Ich habe den Bildschirm, sowie die Welle und den Decode bei zwei 
unterschiedlichen Displayinhalten angehängt und die Daten ändern sich, 
bleiben aber bei gleichen Displayinhalt gleich.


Cheers,
Benedikt

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Anbei noch einige CSVs der seriellen Daten.

von Benedikt M. (bmuessig)



Lesenswert?

So, ich habe jetzt schnell eine PC-Software gebastelt, die die 
Multimeterdaten in Echtzeit abfragt und etwas visueller aufbereitet.

Es muss lediglich ein USB-Seriell-Wandler (ich verwende den FT2232H von 
Reusch) im 3.3V-Modus verwendet werden. Die Signale sind zwar ~3V, aber 
das liegt weit über dem positiven 3.3V CMOS-Schwellwert.
Die Software konfiguriert den Port dann korrekt und stellt die 
übertragenen Daten dar.

Update: Ich habe die Software unter Ubuntu getestet und sie funktioniert 
mit Mono dort auch.

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Ich habe die Spannung von 5.00VDC bis 5.09VDC schrittweise erhöht.
Die angehängten Ergebnisse sprechen nicht für ein Siebensegment-Bitmap, 
sondern eher für BCD-kodierte Informationen.

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Hier der Vergleich von 5.00V AC und 5.00V DC.

Die Zahlen bleiben gleich, es ändern sich aber 5 Bits in anderen 
Positionen.
Bei diesen handelt es sich also höchstwahrscheinlich um die 
Modus-Felder.

Update:
Einige Bytes verändern sich jeweils nur bei einem Moduswechsel oder 
einer Änderung des Wertes.
Daher gehe ich aktuell von diesem Format aus:
0b11011100 Präambel?
0b10111010 Präambel?
0b00000001 Präambel?
0b00010110 Modus/Range
0b00000100 Modus/Range
0b00000000 Immer Null?
0b00000000 Wert
0b00000000 Wert
0b00000000 Wert
0b00011011 Wert

: Bearbeitet durch User
von Volker U. (Gast)


Lesenswert?

Benedikt M. schrieb:
> Hier der Vergleich von 5.00V AC und 5.00V DC.

Super, ich schubs das in den Wiki-artikel. An 'meinem' Multimeter bin 
ich noch nicht weitergekommen.


>Update: Ich habe die Software unter Ubuntu getestet und sie funktioniert
>mit Mono dort auch.

Persönlich hab ich als Platform für das Multimeter nen RasPi vorgesehen, 
wegen Allgemeintauglichkeit einige von den GPIO-Pins. Dann müsste m.E. 
eine Consolen-software, also was in jeder shell läuft , brauchbar sein.

>ich verwende den FT2232H von Reusch)

Stabile Kiste, ich hab da was kleineres angedacht:
https://www.reichelt.de/usb-2-0-konverter-seriell-ttl-pinheader-einzeln-1-8-m-3-3-v-delock-83787-p163095.html?&trstct=pol_17&nbc=1

Ist nur leider grad schwer auffindbar :-(

von Volt Nuß (Gast)


Lesenswert?

Ist der chip  CoB/TQFT42 mit TX an Pin 16 wirklich neu und unerforscht?

Vielleicht reicht es sich hier etwas um zuschauen?:

https://github.com/sigrokproject/libsigrok/tree/master/src

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Ich habe das Format geknackt :-)

0: 0b11011100 Präambel
1: 0b10111010 Präambel
2: 0b00000001 Präambel
3: 0b00010110 Modus & Range
4: 0b00000100 Exponent
5: 0b00000000 Wert (High Byte)
6: 0b00000000 Wert (Middle Byte)
7: 0b00000000 Wert (Low Byte)
8: 0b00000000 Unbekannt
9: 0b00011011 Unbekannt

Exponenten (noch nicht ganz fertig):
1
Bitmuster (b[4])  Format  Multiplikator
2
0000 0001  0.000  TODO (nur ACA?)
3
0000 0010  000.0  10-1
4
0000 0100  0.000  10-3
5
0000 1000  0.00  10-2
6
0010 0000  0.000  TODO
7
0100 0000  0.00  10-2 (nur DCA?)

Modi:
0001 0110 DC V
0001 0101 AC V
0001 1010 uA (Gleich wie AC uA)
0001 1001 mA (Gleich wie AC mA)
0001 1000 A (Gleich wie AC A)
0001 1100 Diode
0001 1011 Continuity
0000 0011 Squarewave
0001 1101 Resistance

von Benedikt M. (bmuessig)


Lesenswert?

Volker U. schrieb:
> Persönlich hab ich als Platform für das Multimeter nen RasPi vorgesehen,
> wegen Allgemeintauglichkeit einige von den GPIO-Pins. Dann müsste m.E.
> eine Consolen-software, also was in jeder shell läuft , brauchbar sein.
IIRC hat der Raspberry Pi doch nur einen Serial Port, der mit der 
Boot-Console belegt ist. Da wäre es vermutlich geschickter, einen 
USB-Seriell-Adapter einzusetzen. Die Software läuft mit Mono übrigens 
auch auf dem Pi. Ich bin gerade dabei, diese neu zu schreiben.
Gut vorstellen könnte ich mir hier auch eine kleine Platine mit ESP8266, 
die den Multimeter über WiFi erreichbar macht und z.B. Datenlogging 
direkt auf dem Chip betreibt.

Volt Nuß schrieb:
> Ist der chip  CoB/TQFT42 mit TX an Pin 16 wirklich neu und unerforscht?
Meines Wissens nach schon. In der Repo gibt es keinen Chip, der sich mit 
dem Protokoll auch nur zum Teil deckt. Zudem, wo wäre dann der Spaß?

Benedikt M. schrieb:
> 5: 0b00000000 Wert (High Byte)
Ich bin noch am Überlegen, was es mit diesem Byte auf sich hat.
Erst dachte ich, dass es sich um ein High-Byte eines 24-Bit Wertes 
handelt, da es bei negativen Zahlen von 00 auf FF umschlägt. Jedoch 
scheint es, wenn OL angezeight wird, anders verwendet zu werden. Und, 16 
Bit sollten zur Darstellung aller Werte reichen.

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Ich bin gerade dabei, ein neues, grafisches Crossplatform-Tool für die 
Multimeterschnittstelle zu schreiben. Dieses soll auf Windows, Linux und 
OS X lauffähig sein.

von Einkaufswagendesinfektor #42 (Gast)


Lesenswert?

Benedikt M. schrieb:
> Dieses soll auf Windows, Linux und
> OS X lauffähig sein.

Vielen danke für deine Mühen Benedikt!

IMHO würde sich der durchschnittliche Unix Nutzer vermutlich sehr 
vielmehr freuen, wenn der Support in die bereits existierenden 
tools/libs eingebaut würde.

BTW,
meldet sich der Chip eigentlich beim Einschalten mit einer abweichenden 
Byte folge?

von Benedikt M. (bmuessig)


Lesenswert?

Wagt sich jemand ran, Spannungen > 200V AC/DC an den DMM anzuschließen 
und den Datenstrom zu erfassen? Diese Messungen fehlen mir aktuell noch, 
da mein Serial-Opto nur bis 100V Isolationsspannung spezifiziert ist. 
Selbst mit Isolationstrafo möchte ich das eigentlich nicht machen.

Ich frage jetzt mal blöd, aber ist es überhaupt eine gute Idee, 
Spannungen über 200V in der Software zu unterstützen?


Einkaufswagendesinfektor #42 schrieb:
> Vielen danke für deine Mühen Benedikt!
Es freut mich, dass es Dir gefällt :-)

> BTW,
> meldet sich der Chip eigentlich beim Einschalten mit einer abweichenden
> Byte folge?
Ich schaue später Mal nach.

> IMHO würde sich der durchschnittliche Unix Nutzer vermutlich sehr
> vielmehr freuen, wenn der Support in die bereits existierenden
> tools/libs eingebaut würde.
Jeder hat seine Vorlieben, was Software angeht. Ich benutze z.B. Sigrok 
nicht. Daher schreibe ich jetzt einfach eine Referenzimplementierung und 
veröffentliche den Code. Ich kann dich gut verstehen, dass es schön 
wäre, den Code in andere Projekte einzupflegen, aber so viel Zeit habe 
ich dann leider nicht. Wenn jemand sein Lieblingstool unterstützen 
möchte, kann er das gerne anhand der entstehenden Dokumentation tun ;-)

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Mich hat es jetzt doch interessiert, 200+ V AC mit der Software messen 
zu können. Daher habe ich einen ESP8266 mit Serial->Telnet Firmware 
geflasht und ihn an eine Powerbank gehängt und die Multimeterdaten im 
Rohformat auf den PC übertragen.
Das Exponentenbyte für den 200-300V AC-Bereich lautet 0x20.

Jetzt fehlt noch immer der 200-300V DC-Bereich. Hat jemand Lust eine DC 
Spannung über 200V zu erzeugen und die Daten zu erfassen?

von Droggelbecher (Gast)


Lesenswert?

Keine Diode(n) z.B. 1n4004..7 zur Hand?

von Benedikt M. (bmuessig)


Lesenswert?

Droggelbecher schrieb:
> Keine Diode(n) z.B. 1n4004..7 zur Hand?

Doch, das schon. Ich hatte auch schon über einfaches Gleichrichten 
nachgedacht. Ich war mir zuerst nicht sicher, ob der Multimeter die 
Spitzen von ~350V (Amplitude) im DC-Modus überlebt. Aber in der 
Anleitung steht, dass der Überlastungsschutz 300VAC RMS im AC und im 
DC-Modus ist. Das sollte also gut funktionieren mit dem Gleichrichten. 
Ich bin bisher noch nicht dazu gekommen, das aufzubauen und hatte daher 
mal nachgefragt, ob Jemand Lust hat, sich dranzusetzen, zumal die 
Geschichte mit dem ESP8266 mehr schlecht als recht funktioniert, da die 
WiFi-Verbindung andauernd abreißt.


Grüße,
Benedikt

: Bearbeitet durch User
von Droggelbecher (Gast)


Lesenswert?

Mir fehlt es leider am Multimeter....

Trotzdem viel Erfolg!

von Walta S. (walta)


Lesenswert?

Ich hab mir beim letzten mal Milch kaufen auch so ein Ding mitgenommen. 
Bin schon gespannt wie es weitergeht.

walta

von Benedikt M. (bmuessig)


Lesenswert?

Schön, dass es Euch gefällt :-)

Ich habe nun den zweitletzten Modus gemessen.
Diesmal handelte es sich um den 200V-300VDC Modus.
Zuerst habe ich es mit einem einfachen Brückengleichrichter versucht, 
doch das hat den Multimeter überlastet. Zusammen mit einem einfachen 
Spannungsteiler der Werte 100kOhm und 330kOhm ist es mir dann gelungen 
258V DC am Multimeter zu messen und das Paket zu erfassen.

Hier der empfangene Paketinhalt:
dc (Präambel)
ba (Präambel)
01 (Präambel)
16 (DC V)
20 (200-300V Range)
00
01 (Wert High-Byte)
02 (Wert Low-Byte, 258V)
00
3a


Update:
Und der letzte Modus (20V-199VAC):
dc (Präambel)
ba (Präambel)
01 (Präambel)
15 (AC V)
10 (20-200V Range)
00
02 (Wert High-Byte)
48 (Wert Low-Byte, 58.4V)
00
70

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Es ist endlich soweit.
Hiermit veröffentliche ich ParksideView 1.1 zum ersten Mal in der 
GUI-Version!

Das Programm unterstützt alle Modi des Multimeters, synchronisiert sich 
mit dem Datenstrom. Es verkraftet Übertragungsfehler, das Trennen, sowie 
das Ausschalten des Multimeters. Die Verbindung wird nach Auswählen des 
Anschlusses automatisch korrekt konfiguriert. Es können automatisch, 
tagelange Aufzeichnungen der Multimeterwerte mit verschiedenen 
Aufzeichnungsraten erstellt und als CSV mit Zeitstempel, Wert und 
Einheit gespeichert werden. Das Programm ist vollständig in Deutsch 
gehalten. Als CSV-Format ist jedoch auch der US-Standard wählbar. 
Lauffähig ist das Programm unter Windows XP, 7, 8 und 10, sowie auf 
Linux (x86 und ARM).
Den Quellcode werde ich in den nächsten Tagen unter der GPL v3 Lizenz 
veröffentlichen.

Hardwareseitig muss lediglich ein USB-Serial-Wandler an den Multimeter 
angeschlossen werden. Ein optoisolierter Wandler ist hier praktisch 
Pflicht, da der Multimeter über den Ground-Pfad des Serialports mit dem 
Ground des Computers und damit mit PE verbunden wird. Es besteht eine 
hochimpedante Verbindung zwischen dem Digitalground des Multimeters und 
den Eingangsbuchsen!

Der Testpunkt, der mit TX markiert ist, muss mit dem RX-Anschluss des 
Serial-Wandlers verbunden werden. Als Ground kann eine Verbindung zum 
GND-Testpunkt in der rechten oberen Ecke (am Programmierstecker) gewählt 
werden.

Viel Spaß damit!
Lasst mich wissen, ob es bei Euch funktioniert ;-)


Grüße,
Benedikt

von Droggelbecher (Gast)


Lesenswert?

Sehr hübsch - Source?

von Benedikt M. (bmuessig)


Lesenswert?

Droggelbecher schrieb:
> Sehr hübsch - Source?

Danke!
Den Quellcode gibt's ab jetzt hier: 
https://github.com/benedikts-workshop/ParksideView

: Bearbeitet durch User
von Droggelbecher (Gast)


Lesenswert?

Vielen Dank!! (Hole ich mir doch noch so ein Ding??)

von Benedikt M. (bmuessig)


Lesenswert?

Droggelbecher schrieb:
> Hole ich mir doch noch so ein Ding??

Warum auch nicht ;-)
Ich spiele aktuell mit dem Gedanken, eine kleine Opto-Isolationsplatine 
zu entwerfen, um das Ganze etwas einfacher zu gestalten. Wenn jemand 
Interesse hat, kann ich auch ein paar mehr machen.
Vielleicht integriere ich auch gleich einen USB-Seriell-Wandler auf die 
PCB.

: Bearbeitet durch User
von Normal Z. (normalzeit)


Lesenswert?

Ist ja Klasse. Vielen Dank Benedikt.

An solchen Opto-Isolationsplatinen wäre ich interessiert. Im Gehäuse ist 
ja noch genügend Platz um sowas unterbringen zu können.

Da ich heute außer der Reihe vom Home-Office doch nochmal in die Firma 
musste, werde ich am Heimweg schauen, was es im Lidl noch an 
Restbeständen gibt.

von Normal Z. (normalzeit)


Lesenswert?

Bearbeitung meines Beitrags war nicht mehr möglich.

Daher Update: Bei (meinem) Lidl gibt es keine Multimeter mehr.

von wvmmm (Gast)


Lesenswert?

Hmm,
da sind keine Potis und keine EEPROM zu sehen - aber ein VPP Pin.

Also ist das EEPROM für die Kalibrationsdaten im Chip aber die 
Ladungspumpe fehlt?

von Benedikt M. (bmuessig)


Lesenswert?

wvmmm schrieb:
> Also ist das EEPROM für die Kalibrationsdaten im Chip aber die
> Ladungspumpe fehlt?

Das ist mit 99,9%iger Wahrscheinlichkeit die 
(OTP)-Programmierschnittstelle für den COB-uC. Eventuell verfügt dieser 
auch über einen integrierten EEPROM für Kalibrationsdaten. Diese müssten 
aber (wie beim AVR auch) auch über die Programmierschnittstelle laufen.

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Lesenswert?

Ich habe die GitHub-Repo jetzt noch etwas überarbeitet und Dokumentation 
ergänzt.

Hier einen Teil der README und die neuen Anweisungen zur 
Hardwaremodifikation:

- Liste der Funktionen -
* Große Echtzeitanzeige des aktuell auf dem Multimeter angezeigten 
Wertes
* Bargraph-Anzeige in allen unterstützten Modi
* Aufzeichnen der Messdaten in eine CSV-formatierte Datei
* Einstellbare Aufzeichnungsgeschwindigkeiten
* Ausführbar auf Windows 7, 8, 10 (nicht getestet) und Linux (via Mono: 
https://www.mono-project.com/)
* CSV Format zwischen Deutsch und and US/International wählbar
* Automatische Konfiguration der seriellen Schnittstelle
* Synchronisierung zum Datenstrom, guter Umgang mit Fehlern, Ausblenden 
des Displays bei keinen/ungültigen Daten
* Datenerfassung kann jederzeit angehalten werden (im Normalbetrieb und 
während einer Aufnahme)
* Der aktuelle Modus wird immer mitaufgezeichnet und kann während einer 
Aufnahme geändert werden
* Ein Klick auf den aktuellen Wert, kopiert diesen in die Zwischenablage
* Das Fenster kann auf Knopfdruck über allen anderen Fenstern fixiert 
werden
* Mehrere Instanzen des Programms können gleichzeitig verwendet werden, 
um mehrere Multimeter abzufragen

- Hardware -
Um die Software nutzen zu können, muss ein kleiner, einfacher 
Hardwareeingriff am Multimeter durchgeführt werden.
Zwei Litzen müssen an Testpunkten der Multimeterplatine angelötet und 
nach außen geführt werden.
Diese Litzen können dann z.B. über ein kleines Loch auf der Rückseite 
des Gehäuses nach draußen geführt werden.

- Vorraussetzungen -
* Lötkolben und Lötzinn
* Zange zum Abisolieren und Schneiden
* 28+ AWG / < 0,08mm² Litze (~ 1m)
* USB-Seriell-Wandler (5V mit dem empfohlenen Optokoppler / 3.3V direkt 
- nicht empfohlen!)
* Optokoppler (https://www.sparkfun.com/products/9118 - NICHT für 
Spannungen > 60V verwenden!)

- Testpunkte -
Im folgenden Bild sind die zwei Testpunkte auf der Multimeterplatine 
erkennbar, mit denen der Optokoppler verbunden wird:

https://www.mikrocontroller.net/attachment/450706/Verbindungen.jpg

- Löten -
Um den Multimeter mit dem PC zu verbinden, muss eine Litze vom 
TX-Testpunkt des Multimters zum IN1-Pad des Optokopplers verbunden 
werden.
Dann muss eine weitere Litze vom GND-Testpunkt des Multimeters zum 
GND-Pad des Optokopplers geführt werden.
Eine weitere Verbindung führt vom HV-Pad des Optokopplers zum 5V Kontakt 
des USB-Seriell-Wandlers.
Ebenso muss eine Verbindung vom HVG-Pad des Optokopplers zum GND-Pad des 
USB-Seriell-Wandlers geführt werden.
Letztlich muss das OUT1-Pad des Optokopplers mit dem *RX*-Pad (nicht 
TX!) des USB-Seriell-Wandlers verbunden werden.

- Verwendung des Multimeters -
Nach den Hardware-Modifikationen lässt sich der Multimeter weiterhin 
normal und ohne PC verwenden.
Jedoch darf der Multimeter nicht mehr zum Messen von Spannungen über 
60V über PE verwendet werden.
Um den Multimeter am PC zu verwenden, muss nur der USB-Seriell-Wandler 
eingesteckt werden.
Im Geräte-Manager unter Windows, oder mittels dmesg auf Linux kann der 
korrekte Port ermittelt werden.
Auf Linux lautet dieser meist /dev/ttyUSB0.

Viel Spaß!

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Da der Multimeter ja international verkauft wurde, habe ich ParksideView 
nun in's Englische übersetzt. Zudem gibt es auf GitHub nun auch eine 
englischsprachige Dokumentation.

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Einkaufswagendesinfektor #42 schrieb:
> BTW,
> meldet sich der Chip eigentlich beim Einschalten mit einer abweichenden
> Byte folge?

Sorry, dass ich nicht früher dazu gekommen bin, das Oszilloskop wieder 
auszupacken.
Ja, tatsächlich gibt es beim Einschalten eine leicht abweichende 
Bytefolge.
Ich habe Dir ein paar Bilder angehängt.
Augenscheinlich liegen die beiden Telegramme inhaltlich weiter 
auseinander, als der Decode zeigt. Scheinbar handelt es sich dabei 
hauptsächlich um unterschiedlich lange Idle-Perioden.

Update: Ich habe noch zwei hexadezimale Ansichten ergänzt.

: Bearbeitet durch User
von Walta S. (walta)


Lesenswert?

Gibts auch eine Möglichkeit die Software auf einem Apple Computer laufen 
zu lassen?

danke
walta

von Benedikt M. (bmuessig)


Lesenswert?

Walta S. schrieb:
> Gibts auch eine Möglichkeit die Software auf einem Apple Computer laufen
> zu lassen?
>
> danke
> walta

Hallo Walta,

das ist leider nicht möglich, da Mono auf OSX keine GUI-Anwendungen über 
WinForms unterstützt. Ich habe es selbst ohne Erfolg auf meinem Mac 
getestet.
Theoretisch könnte man die Software auf GTK# portieren. Dann wäre die 
Ausführung auf Macs möglich.

Update: Ich habe mich entschieden, einen Port zu beginnen. Das sollte 
auch das Design auf Linux-Platformen verbessern.


Grüße,
Benedikt

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Lesenswert?

Hier mein aktuelles Verständnis des Formates (als Update zum letzten 
Stand):

0: 0b11011100 Präambel
1: 0b10111010 Präambel
2: 0b00000001 Immer 1, aber Teil der Nutzdaten
3: 0b00010110 Modus
4: 0b00000100 Exponent
5: 0b00000000 Unbekannt (High Byte?)
6: 0b00000000 Wert (in Counts) (High/Middle? Byte)
7: 0b00000000 Wert (in Counts) (Low Byte)
8: 0b00000000 Prüfsumme 2 bis 7 (High Byte)
9: 0b00011011 Prüfsumme 2 bis 7 (Low Byte)

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Die vollständige Hardwaremodifikation sieht bei mir so aus (siehe Bilder 
im Anhang).

Generell bin ich aber weiterhin an einer Funk-Lösung über Bluetooth oder 
WiFi interessiert.
Eine eigene Optokopplerplatine ist für viele Zwecke nicht notwendig, da 
die in der Anleitung beschriebene Platine von Sparkfun die Anforderungen 
weitgehend erfüllt und mit etwa 6 Euro nicht besonders teuer ist. 
Ebenfalls ist die Verfügbarkeit um ein vielfaches besser, als wenn ich 
Euch Platinen verkaufe, oder Gerber bereitstelle.
Jedoch besteht bei der Isolationsspannung noch deutliches 
Verbesserungspotenzial (sprichwörtlich). Ein geeigneter Optokoppler 
sollte meines Erachtens nach über mindestens 50 kHz (besser 100+ kHz) 
Bandbreite verfügen, um auf der sicheren Seite zu sein.

von Walta S. (walta)


Lesenswert?

Benedikt M. schrieb:
> Walta S. schrieb:
>> Gibts auch eine Möglichkeit die Software auf einem Apple Computer laufen
>> zu lassen?
>>
>> danke
>> walta
>
> Hallo Walta,
>
> das ist leider nicht möglich, da Mono auf OSX keine GUI-Anwendungen über
> WinForms unterstützt. Ich habe es selbst ohne Erfolg auf meinem Mac
> getestet.
> Theoretisch könnte man die Software auf GTK# portieren. Dann wäre die
> Ausführung auf Macs möglich.
>
> Update: Ich habe mich entschieden, einen Port zu beginnen. Das sollte
> auch das Design auf Linux-Platformen verbessern.
>
>
> Grüße,
> Benedikt

Dankeschön - ich werde die Entwicklung auf alle Fälle weiterverfolgen

walta

von Benedikt M. (bmuessig)


Lesenswert?

Eventuell könnte es sich lohnen, einen optoisolierten Konverter zu 
entwickeln, der das Format des Multimeters zu SCPI über USB wandelt.
So könnte sich der Multimeter leicht in bestehende Software integrieren 
lassen. Was meint ihr dazu?

: Bearbeitet durch User
von Top S. (topsoft)


Angehängte Dateien:

Lesenswert?

>Eventuell könnte es sich lohnen, einen optoisolierten Konverter zu
>entwickeln, der das Format des Multimeters zu SCPI über USB wandelt.

Ich hab bei mir ein Mega328P und ein Bluetooth Modul drin. Passt gerade 
noch hinein ohne das Gehäuse zu bearbeiten. Der Prozessor musste sein 
weil die Bluetooth Module bei 2400 Baud sehr oft fasche Daten senden.

Die Firmware für den Atmega ist mit Atmel Studio 7 in C geschrieben.

Das PC Programm habe ich mit PureBasic erstellt da der Compiler für 
Windows, Linux und Mac verfügbar und das Projekt ja nicht sehr 
umfangreich ist. Nach der Vorarbeit der Datenanalyse ist das ja schnell 
gemacht.

Ich werde das Bluetooth Modul noch von dem Breakout Board runterholen 
und mit dem Prozessor zusammen auf eine eigene Platine verfrachten.

Der "Aufbau" ist so nur für Testzwecke.

Gruß

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Lesenswert?

Top S. schrieb:
> Ich hab bei mir ein Mega328P und ein Bluetooth Modul drin.

Ist wirklich gut geworden! Schön, eine weitere Version des Mods zu sehen 
:-)

Bluetooth hatte ich mir auch überlegt, jedoch wollte ich auch keines der 
AT-Modems direkt verwenden, da es nicht auszuschließen ist, dass einmal 
zufällig der String "AT" übertragen wird (wobei die Effekte bei einem 
gut implementierten Parser vermutlich zu verkraften sind).
Zur Implementierung des Bargraphen und des Paket-Decoders empfehle ich 
die Datei Multimeter.cs aus meinem Projekt (unter der GPL frei 
verwendbar): 
https://github.com/benedikts-workshop/ParksideView/blob/master/ParksideView/Multimeter.cs
Diese enthält auch die unterschiedlichen Limits der Ranges, sowie die 
Divisoren der rohen Werte.


Ich habe inzwischen den GTK-Port abgeschlossen. Damit ist meine Software 
nun auch für alle drei Platformen verfügbar. Nach einigen Tests werde 
ich diese dann bald veröffentlichen.


Benedikt M. schrieb:
> Eventuell könnte es sich lohnen, einen optoisolierten Konverter zu
> entwickeln, der das Format des Multimeters zu SCPI über USB wandelt.

Das würde mich weiterhin interessieren. Einen SCPI Parser (auf 
Geräteseite) hatte ich bisher zwar nicht implementiert, doch gehe ich 
davon aus, dass es nicht sehr aufwendig ist, nur die erforderlichen 
Kommandos zu implementieren (IDN, MEAS1, RANGE1, ...).

: Bearbeitet durch User
von Top S. (topsoft)


Lesenswert?

>Bluetooth hatte ich mir auch überlegt, jedoch wollte ich auch keines der
>AT-Modems direkt verwenden, da es nicht auszuschließen ist, dass einmal
>zufällig der String "AT" übertragen wird (wobei die Effekte bei einem
>gut implementierten Parser vermutlich zu verkraften sind).

Das ist den Modulen egal. Wenn eine Bluetooth Verbindung besteht werden 
alle Daten durchgereicht.

>Zur Implementierung des Bargraphen und des Paket-Decoders empfehle ich
>die Datei Multimeter.cs aus meinem Projekt

Hab ich schon fertig. Format ist ja von dir klar dargelegt worden. 
Parser ist bei mir ein Zustandsautomat.
1
Enumeration STATES
2
  #WAIT_FIRST_START_BYTE
3
  #WAIT_SECOND_START_BYTE
4
  #WAIT_THIRD_START_BYTE
5
  #WAIT_MODE_BYTE
6
  #WAIT_EXPONENT_BYTE
7
  #WAIT_HIGH_VALUE_BYTE
8
  #WAIT_MIDDLE_VALUE_BYTE
9
  #WAIT_LOW_VALUE_BYTE
10
  #WAIT_HIGH_CS_BYTE
11
  #WAIT_LOW_CS_BYTE
12
  #MAKE_DATA_ANALYSIS
13
EndEnumeration
14
15
Procedure receive_thread(dummy.i)
16
  If hCom
17
    Protected state.i = #WAIT_FIRST_START_BYTE
18
    Protected inbyte.a, mode.a, exponent.a, value.i, cs.i, bcs.i, a.i
19
    Protected Dim buffer.a(9)
20
    Repeat
21
      If AvailableSerialPortInput(hCom)
22
        If ReadSerialPortData(hCom, @inbyte, 1) <> 1
23
          state = #WAIT_FIRST_START_BYTE
24
        Else
25
          Debug Hex(inbyte)
26
          If state = #WAIT_FIRST_START_BYTE And inbyte = $DC
27
            buffer(0) = inbyte
28
            state = #WAIT_SECOND_START_BYTE
29
          ElseIf state = #WAIT_SECOND_START_BYTE And inbyte = $BA
30
            buffer(1) = inbyte
31
            state = #WAIT_THIRD_START_BYTE
32
          ElseIf state = #WAIT_THIRD_START_BYTE And inbyte = $01
33
            buffer(2) = inbyte
34
            cs = inbyte 
35
            state = #WAIT_MODE_BYTE
36
          ElseIf state = #WAIT_MODE_BYTE
37
            buffer(3) = inbyte
38
            mode = inbyte
39
            cs = (cs + inbyte) & $FFFF
40
            state = #WAIT_EXPONENT_BYTE
41
          ElseIf state = #WAIT_EXPONENT_BYTE
42
            buffer(4) = inbyte
43
            exponent = inbyte
44
            cs = (cs + inbyte) & $FFFF
45
            state = #WAIT_HIGH_VALUE_BYTE
46
          ElseIf state = #WAIT_HIGH_VALUE_BYTE
47
            buffer(5) = inbyte
48
            ;value = inbyte * $10000                                  ; eher nicht
49
            cs = (cs + inbyte) & $FFFF
50
            state = #WAIT_MIDDLE_VALUE_BYTE
51
          ElseIf state = #WAIT_MIDDLE_VALUE_BYTE
52
            buffer(6) = inbyte
53
            value = (inbyte * $100)
54
            cs = (cs + inbyte) & $FFFF
55
            state = #WAIT_LOW_VALUE_BYTE
56
          ElseIf state = #WAIT_LOW_VALUE_BYTE
57
            buffer(7) = inbyte
58
            value + inbyte
59
            cs = (cs + inbyte) & $FFFF
60
            state = #WAIT_HIGH_CS_BYTE
61
          ElseIf state = #WAIT_HIGH_CS_BYTE
62
            buffer(8) = inbyte
63
            bcs = inbyte * $100
64
            state = #WAIT_LOW_CS_BYTE
65
          ElseIf state = #WAIT_LOW_CS_BYTE
66
            buffer(9) = inbyte
67
            bcs + inbyte
68
            state = #MAKE_DATA_ANALYSIS
69
          Else
70
            state = #WAIT_FIRST_START_BYTE
71
          EndIf
72
        EndIf
73
        If state = #MAKE_DATA_ANALYSIS
74
          If bcs = cs
75
            LockMutex(receive_thread_sync)
76
            record\is_new = #True
77
            record\timestamp = time
78
            For a = 0 To 9 : record\bytebuffer[a] = buffer(a) : Next a
79
            record\mode = mode
80
            record\exponent = exponent
81
            record\value = value
82
            record\cs = cs
83
            record\min = range_min(mode, exponent)
84
            record\max = range_max(mode, exponent)
85
            If is_overloaded(mode, value, record\min, record\max)
86
              record\dvalue = 9999
87
              record\unit = ""
88
            ElseIf mode = #VOLT_DC
89
              If exponent = #RANGE_B
90
                record\precision = 1
91
                record\divider = 10
92
                record\unit = "mV DC"
93
              ElseIf exponent = #RANGE_C
94
                record\precision = 3
95
                record\divider = 1000
96
                record\unit = "V DC"
97
              ElseIf exponent = #RANGE_D
98
                record\precision = 2
99
                record\divider = 100
100
                record\unit = "V DC"
101
              ElseIf exponent = #RANGE_E
102
                record\precision = 1
103
                record\divider = 10
104
                record\unit = "V DC"
105
              ElseIf exponent = #RANGE_F
106
                record\precision = 0
107
                record\divider = 1
108
                record\unit = "V DC"
109
              EndIf
110
              record\dvalue = value / record\divider
111
            ElseIf mode = #VOLT_AC
112
              If exponent = #RANGE_C
113
                record\precision = 3
114
                record\divider = 1000
115
                record\unit = "V AC"
116
              ElseIf exponent = #RANGE_D
117
                record\precision = 2
118
                record\divider = 100
119
                record\unit = "V AC"
120
              ElseIf exponent = #RANGE_E
121
                record\precision = 1
122
                record\divider = 10
123
                record\unit = "V AC"
124
              ElseIf exponent = #RANGE_F
125
                record\precision = 0
126
                record\divider = 1
127
                record\unit = "V AC"
128
              EndIf
129
              record\dvalue = value / record\divider
130
            ElseIf mode = #AMPER
131
              If exponent = #RANGE_F
132
                record\precision = 3
133
                record\divider = 1000
134
                record\unit = "A"
135
              ElseIf exponent = #RANGE_G
136
                record\precision = 2
137
                record\divider = 100
138
                record\unit = "A"
139
              EndIf
140
              record\dvalue = value / record\divider
141
            ElseIf mode = #AMPER_MILLI
142
              If exponent = #RANGE_D
143
                record\precision = 2
144
                record\divider = 100
145
                record\unit = "mA"
146
              ElseIf exponent = #RANGE_E
147
                record\precision = 1
148
                record\divider = 10
149
                record\unit = "mA"
150
              ElseIf exponent = #RANGE_F
151
                record\precision = 3
152
                record\divider = 1000
153
                record\unit = "mA"
154
              EndIf
155
              record\dvalue = value / record\divider
156
            ElseIf mode = #AMPER_MICRO
157
              If exponent = #RANGE_A
158
                record\unit = "µA"  
159
              ElseIf exponent = #RANGE_B
160
                record\precision = 1
161
                record\divider = 10
162
                record\unit = "µA"
163
              ElseIf exponent = #RANGE_C
164
                record\precision = 0
165
                record\divider = 1
166
                record\unit = "µA"
167
              EndIf
168
              record\dvalue = value / record\divider
169
            ElseIf mode = #RESISTANCE_OHM
170
              If exponent = #RANGE_A
171
                record\precision = 1
172
                record\divider = 10
173
                record\unit = "Ohm"
174
              ElseIf exponent = #RANGE_B
175
                record\precision = 3
176
                record\divider = 1000
177
                record\unit = "kOhm"
178
              ElseIf exponent = #RANGE_C
179
                record\precision = 2
180
                record\divider = 100
181
                record\unit = "kOhm"
182
              ElseIf exponent = #RANGE_D
183
                record\precision = 1
184
                record\divider = 10
185
                record\unit = "kOhm"
186
              ElseIf exponent = #RANGE_E
187
                record\precision = 3
188
                record\divider = 1000
189
                record\unit = "MOhm"
190
              ElseIf exponent = #RANGE_F
191
                record\precision = 2
192
                record\divider = 100
193
                record\unit = "MOhm"
194
              EndIf
195
              record\dvalue = value / record\divider
196
            ElseIf mode = #CONTINUITY_OHM
197
              If exponent = #RANGE_A
198
                record\precision = 1
199
                record\divider = 10
200
                record\unit = "Ohm"
201
                record\dvalue = value / record\divider
202
              EndIf
203
            ElseIf mode = #DIODE_VOLT
204
              If exponent = #RANGE_C
205
                record\precision = 3
206
                record\divider = 1000
207
                record\unit = "V"
208
              EndIf
209
              record\dvalue = value / record\divider
210
            ElseIf mode = #SQUAREWAVE
211
              record\unit = ""
212
            EndIf
213
            UnlockMutex(receive_thread_sync)
214
          EndIf
215
          state = #WAIT_FIRST_START_BYTE
216
        EndIf
217
      Else
218
        Delay(50)
219
      EndIf
220
    Until receive_thread_abort <> #False
221
  EndIf
222
EndProcedure

>Das würde mich weiterhin interessieren. Einen SCPI Parser (auf
>Geräteseite) hatte ich bisher zwar nicht implementiert, doch gehe ich
>davon aus, dass es nicht sehr aufwendig ist, nur die erforderlichen
>Kommandos zu implementieren (IDN, MEAS1, RANGE1, ...).

Muss ich mir bei Gelegenheit mal anschauen. Mir ist noch nicht klar wozu 
man das nutzt.

Gruß

: Bearbeitet durch User
von Normal Z. (normalzeit)



Lesenswert?

Wäre wahrscheinlich auch ganz gut in der Rubrik „Quick and Dirty“ 
aufgehoben ... so wie ich das hineingebastelt habe.

Ein FTI-232 USB-Seriell Breakout-Board und einen zusätzlichen 
Optokoppler mit Zweikomponentenkleber in das Messgerät verfrachtet und 
seitlich ein Loch für die Mini-USB Buchse mit dem Dremel reingefräst. 
Das Breakoutboard habe ich seiner Stiftleisten beraubt und den Jumper 
für Vcc auf 3,3 V durch eine Drahtbrücke ersetzt.

Der „Fatal Error“ stellte sich beim finalen Zusammenbauen heraus: meine 
Lochrasterplatine mit dem Optokoppler geht zu weit nach rechts und baut 
zu hoch, so dass der Buzzer auf der Messgeräte-Platine anstösst. Der 
Kleber war natürlich schon ausgehärtet, so musste ich den Buzzer köpfen 
und ihm seine Haube rauben. Positiver Nebeneffekt: Das Piepsen ist jetzt 
viel leiser.

Nicht schön, aber funktioniert einwandfrei. Danke an Benedikt für die 
Software.

von Top S. (topsoft)



Lesenswert?

Hallo,

ich bin heute endlich dazu gekommen meine Multimeter fertig umzubauen.
Ich habe eine Platine erstellt und fertigen lassen. Die Bauteile sind 
bis auf das Bluetooth Modul von Reichelt. Verbaut wurde ein HC-05 aus 
Ebay.

Zu erst habe ich gedacht ich schließe einfach das Bluetooth Modul an und 
konfiguriere es auf 2400 Baud. Das lief bei mir aber überhaupt nicht. 
Alle Baudraten unter 9600 brachten heftige Übertragungsfehler.

Also habe ich einen Mega328PB beauftragt die 2400 Baud aus dem 
Multimeter mit 38400 Baud an das Bluetooth Modul weiter zu reichen. Und 
ja, ich weiß das man das auch in einen Tiny25 mit SoftUart reinbekommen 
hätte. Aber ich bin Faul und ein 328PB war hier vorhanden.

Die Software ist mit PureBasic geschrieben und alles andere als fertig.

P.S. Platinen sind noch reichlich da. ;-) topsoft_at_gmx_dot_net

Gruß Topsoft

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Lesenswert?

Top S. schrieb:
> Ich habe eine Platine erstellt und fertigen lassen.

Die Platine ist schön geworden.
Ich ergänze bei meiner Software noch einen 9600 Baud Modus, bei der 
Verwendung Deines Moduls.

Eine Kleinigkeit zum Schaltplan:
Vielleicht hätte es auch Sinn gemacht, da du sowieso einen uC benutzt, 
PIO9 (Verbindungsstatus) und PIO11 (Data/Command) zum ATmega328 zu 
routen, um den aktuellen Status des Moduls zu überwachen und 
festzulegen.

von Top S. (topsoft)


Lesenswert?

> Die Platine ist schön geworden.
Danke

> Ich ergänze bei meiner Software noch einen 9600 Baud Modus, bei der
Es sind 38400 Baud. Aber die Firmware ist ja im Archiv.

>Vielleicht hätte es auch Sinn gemacht, da du sowieso einen uC benutzt,
>PIO9 (Verbindungsstatus) und PIO11 (Data/Command) zum ATmega328 zu
>routen, um den aktuellen Status des Moduls zu überwachen und
>festzulegen.

Jetzt wo du es sagst. :-) Na ja egal. Ich hab nur 2 Multimeter und noch 
58 Platinen. Also werde ich das nicht mehr ändern.

Danke noch mal für deine Vorarbeit.

Gruß

von Benedikt M. (bmuessig)


Lesenswert?

Top S. schrieb:
> Jetzt wo du es sagst. :-) Na ja egal. Ich hab nur 2 Multimeter und noch
> 58 Platinen. Also werde ich das nicht mehr ändern.
Mit der Menge hatte ich nicht gerechnet. Damit hast Du gut für die 
Zukunft vorgesorgt ;-)

> Es sind 38400 Baud. Aber die Firmware ist ja im Archiv.
> Alle Baudraten unter 9600 brachten heftige Übertragungsfehler.
Stimmt, das habe ich wohl beim Schreiben der Antwort verdreht.

> Danke noch mal für deine Vorarbeit.
Gerne. War aber nicht ganz uneigennützig, Spaß gemacht (und Zeit zu 
Hause vertrieben) hat's ja auch ;-)

Grüße,
Benedikt

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Normal Z. schrieb:

> Wäre wahrscheinlich auch ganz gut in der Rubrik „Quick and Dirty“
> aufgehoben ... so wie ich das hineingebastelt habe.

"Quick" schon, "Dirty" nicht.

> Der „Fatal Error“ stellte sich beim finalen Zusammenbauen heraus:
> Der Kleber war natürlich schon ausgehärtet,

Mancmal ist es besser, Kleber zu nehmen, der nicht so gut klebt.
Z.B. einfachen Alleskleber oder Doppelklebeband.

von Benedikt M. (bmuessig)


Lesenswert?

Bei Asser's Lab gibt es ein Video zum Multimeter:
https://www.youtube.com/watch?v=2YlhSKf9n0c

Mit dem Quelltext von ParksideView und den Informationen aus dem Wiki 
hat er eine Python-Implementation für Raspberry Pi geschrieben.

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Hiermit veröffentliche ich ParksideView 1.4 mit Min/Max Statistik.
Darüber hinaus ist die Portliste unter Linux nun etwas übersichtlicher.

Hinter der ParksideViewGTK versteckt sich eine primär für Linux/Mac 
entwickelte Version von ParksideView mit GTK# GUI.
An dieser hatte ich im April gearbeitet, war jedoch bisher noch nicht 
dazu gekommen, diese zu veröffentlichen. Mangels Zeit könnte diese noch 
an einigen Stellen etwas "Politur" vertragen.
Den Quellcode für die Linux/Mac-Version gibt es hier: 
https://github.com/benedikts-workshop/ParksideViewGTK

Grüße,
Benedikt

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

So, nachdem ich heute Version 1.4 veröffentlicht habe, die schon eine 
Weile lang in der Pipeline gesessen hatte, veröffentliche ich jetzt 
gleich noch die heute Abend entstandene 1.5.
Hiermit habe ich nun alle bekannten Bugs beseitigt - der Issue-Tracker 
ist somit leer :-)

Viel Freude damit!


Grüße,
Benedikt

von Benedikt M. (bmuessig)



Lesenswert?

Benedikt M. schrieb:
> Ich ergänze bei meiner Software noch einen 38400 Baud Modus, bei der
> Verwendung Deines Moduls.

Erledigt. Die Versionen mit BT sollten mit topsoft's Bluetooth-Adapter 
kompatibel sein. Weiter wurde ein Anzeigefehler bei der Datenerfassung 
behoben.

Damit schließe ich die Entwicklung von ParksideView für's Erste ab. 
Sollte es weitere Feature-Requests oder Bug-Reports geben, werde ich 
diese weiterhin, soweit es mir zeitlich möglich ist, bearbeiten.

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

DCF 7. schrieb:
> Wer keines mehr bei Lidl bekommen hat

Ab dem 11.03. gibts die Teile wieder:
https://www.lidl.de/de/parkside-autorange-multimeter-pdm-300-c2-digital/p369711

von Tommy S. (Gast)


Lesenswert?

Thomas schrieb:

> Ab dem 11.03. gibts die Teile wieder:

Na hoffentlich mit der selben Firmware (mit funktionierenden TX)!

BTW,
braucht das Teil wirklich ~9V, oder ist es auch mit 5V zufrieden?

von dirk (Gast)


Lesenswert?

Gruss

Das Multimeter, das es ab Donnerstag wieder bei
Lidl gibt, hat ja bei Gleichspannungsmessung
einen Messbereich von 0.1mV.
Ist der etwas? Denke, wenn brauchbar, zum paaren und selektieren von BJT 
anwendbar, oder ?
Nah ja wenn anwendbar, würde das bei mir eine entsprechende 
Messschaltung der Einfachheit
halber ersparen.

Dirk St

von MaWin (Gast)


Lesenswert?

dirk schrieb:
> hat ja bei Gleichspannungsmessung
> einen Messbereich von 0.1mV

Nein.

Die geringste/höchste Auflösung beträgt 0.1mV.

Wie bei jedem 2.95 EUR ICL7106 basierten Messinstrument mit 200mV 
Messbeteich seit 1978 üblich.

von dirk (Gast)


Lesenswert?

Danke für die Antwort

Ich Subtrahiere dann Analog, ist dabei schon in Relation.

Schönen Abend

Dirk St

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Top S. schrieb:
> Jetzt wo du es sagst. :-) Na ja egal. Ich hab nur 2 Multimeter und noch
> 58 Platinen. Also werde ich das nicht mehr ändern.

Dann hast Du sicher noch 2 Platinchen übrig? Ich habe vor ein paar Tagen 
auch zwei von den Multimetern bei Lidl bestellt und würde mich über eine 
Bluetooth-Anbindung freuen.

von Benzinsparer (Gast)


Lesenswert?

Frank M. schrieb:
> Ich habe vor ein paar Tagen
> auch zwei von den Multimetern bei Lidl bestellt und würde mich über eine
> Bluetooth-Anbindung freuen.

Frank,
falls die Multimeter heute oder morgen ankommen, wäre es gut mal kurz zu 
schauen ob der CoB auf Pad 16 immer noch so auskunftsfreudig ist.

Danke!

von Top S. (topsoft)


Lesenswert?

Hallo,
ich meine ich habe noch welche. Schaue nach und melde mich.
Gruß

von Benedikt M. (bmuessig)


Lesenswert?

Benzinsparer schrieb:
> wäre es gut mal kurz zu schauen ob der CoB auf Pad 16 immer noch so 
auskunftsfreudig ist.
Ich würde davon ausgehen, dass sich hier nichts geändert hat. Vermutlich 
dient die Funktion dem automatischen Testen in der Fabrik, oder wird bei 
einem anderen Produkt mit gleichem COB zusammen mit einer IR-LED 
verwendet.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Benzinsparer schrieb:
> Frank,
> falls die Multimeter heute oder morgen ankommen, wäre es gut mal kurz zu
> schauen ob der CoB auf Pad 16 immer noch so auskunftsfreudig ist.

Die beiden Multimeter sind heute angekommen. Nicht nur eine Batterie, 
sondern sogar ein Schraubendreher war bei jedem Multimeter dabei :-)

Direkt mal aufgeschraubt... die Platine sieht exakt so aus wie hier auf 
den Fotos. TX ist auch an der alten Stelle.

Ich suche gleich mal einen USB-Seriell-Wandler raus und teste.

Ich melde mich später noch einmal.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

So, ich habe den USB-Adapter (3,3V Pegel) angeschlossen, ParksideView 
V16 unter Win10 gestartet, die COM-Schnittstelle aus dem Geräte-Manager 
im ParksideView eingestellt und dann auf "Start" gedrückt.

Status: Verbunden (ich nehme aber mal an, dass damit nur der Adapter 
gemeint ist)

Leider erscheint keine Anzeige.

EDIT:

Es geht! Ich musste den Pin am USB-Adapter nehmen, der mit TXD 
beschriftet ist. Offenbar meinten die Chinesen, hier die Bezeichnung des 
Zielgerät-Pins angeben zu müssen.

@Benedikt: Klasse Programm!

Fazit: Auch das aktuelle Multimeter von Lidl spuckt die Daten aus :-)

: Bearbeitet durch Moderator
von Benzinsparer (Gast)


Lesenswert?

Frank M. schrieb:

> Es geht!

Vielen Dank für das zeitnahe Testen!

>  Ich musste den Pin am USB-Adapter nehmen, der mit TXD
> beschriftet ist.

Kommt mir irgendwie bekannt vor :)

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Frank M. schrieb:
> Status: Verbunden (ich nehme aber mal an, dass damit nur der Adapter
> gemeint ist)
>
> Leider erscheint keine Anzeige.

Genau, verbunden bedeutet in diesem Fall nur, dass die Verbindung zum 
Adapter funktioniert. Im unteren Teil der Anwendung, in der 
Datenlogger-Gruppe, findet sich ein weiterer Status-Text, der anzeigt, 
ob Daten (mit gültiger Prüfsumme) vom Multimeter empfangen werden (siehe 
Screenshot, 'Stumm' ggü. 'Laufend').

> Es geht! Ich musste den Pin am USB-Adapter nehmen, der mit TXD
> beschriftet ist. Offenbar meinten die Chinesen, hier die Bezeichnung des
> Zielgerät-Pins angeben zu müssen.
>
> @Benedikt: Klasse Programm!
>
> Fazit: Auch das aktuelle Multimeter von Lidl spuckt die Daten aus :-)

Glückwunsch, es freut mich, dass es bei dir auch gut funktioniert :-)

von Top S. (topsoft)


Lesenswert?

>ich meine ich habe noch welche. Schaue nach und melde mich.

Hallo,

ja es sind noch Platinen da. Wer möchte bitte unter topsoft at gmx dot 
net
melden.

Mfg

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Top S. schrieb:
> ja es sind noch Platinen da.

Danke, habe dich gerade angeschrieben.

von Björn W. (bwieck)


Lesenswert?

Benedikt M. schrieb:
> * Optokoppler (https://www.sparkfun.com/products/9118 - NICHT für
> Spannungen > 60V verwenden!)

Was ist da eigentlich der Grund dafür?

Ist die Platine von SparkFun so schlecht isoliert?
Der Koppler ansich kann ja bis 4kV isolieren.

von Benedikt M. (bmuessig)


Lesenswert?

Björn W. schrieb:
> Ist die Platine von SparkFun so schlecht isoliert?
> Der Koppler ansich kann ja bis 4kV isolieren.

Sparkfun selbst gibt keine garantierte Isolationsspannung an und 
vermarktet das Modul eher zur Entkopplung von MIDI.

Wenn jemand diese Anleitung im Netz entdeckt und ihr einfach folgt, ohne 
zu wissen, was er tut, möchte ich mit der Isolationsspannung lieber 
etwas pessimistischer und vorsichtiger sein. Zumal Spannungen bis 60V 
über PE insgesamt noch recht ungefährlich sind und ich generell einfach 
ein schlechtes Gefühl bei dem Gedanken habe, dass jemand damit z.B. 230V 
an seinem Computer messen möchte (zu geringe interne Abstände beim 
Modifizieren des Multimeters, Fehler bei der Verdrahtung, etc.).

Wenn man weiß, was man tut, kann man die Warnung ja auch gerne 
ignorieren ;-)

von Björn W. (bwieck)


Lesenswert?

Benedikt M. schrieb:

> Damit schließe ich die Entwicklung von ParksideView für's Erste ab.
> Sollte es weitere Feature-Requests oder Bug-Reports geben, werde ich
> diese weiterhin, soweit es mir zeitlich möglich ist, bearbeiten.

Erstmal Danke für die tolle Software. Funktioniert hier ganz prima.

Was mich freuen würde, wäre wenn das Aufzeichnungsintervall etwas 
genauer ist.
Wenn ich z.B. 500ms * 2 einstelle dann hätte ich erwartet das jede sek. 
ein Eintrag in der Aufzeichnung erzeugt wird. Aber es sind real 
schwankend 1,05 bis 1,07 sek Intervall. Über Langzeitmessungen summiert 
sich das natürlich.

von Benedikt M. (bmuessig)


Lesenswert?

Björn W. schrieb:
> Wenn ich z.B. 500ms * 2 einstelle dann hätte ich erwartet das jede sek.
> ein Eintrag in der Aufzeichnung erzeugt wird. Aber es sind real
> schwankend 1,05 bis 1,07 sek Intervall. Über Langzeitmessungen summiert
> sich das natürlich.

Danke für die Information. Ich werde mir das mal genauer anschauen.

Die erfassten Zeitstempel werden beim Parsen des empfangenen Pakets (das 
durch einen Pufferspeicher läuft) erfasst und enthalten den Jitter und 
die Latenz der Software, der seriellen Verbindung und wenn vorhanden, 
dem USB-Serial-Adapter.
Die Aktualisierungsrate selbst wird vom Multimeter vorgegeben; ist eine 
höhere Zahl eingestellt, werden das angezeigte Sample länger gehalten 
und die dazwischen liegenden Samples verworfen.

Ich könnte die Funktion der Software noch optimieren in dem ich die 
Daten schneller verarbeite, dafür müsste ich die Architektur anpassen.
Den Punkt setze ich auf die TODO-Liste und werde sie bei Gelegenheit 
umsetzen.

: Bearbeitet durch User
von Björn W. (bwieck)


Angehängte Dateien:

Lesenswert?

Ich hab mir das mal auf dem LA angesehen und Ja, das jittert ja 
reichlich.
die Frames haben teilweise Pausen von über 10ms drin und die Abstände 
zwischen den Frames variiert auch um etwas mehr als 10ms.

In den Letzten beiden Frames sieht man z.B. die Pausen.

: Bearbeitet durch User
von noreply@noreply.com (Gast)


Lesenswert?

Vielen Dank.

Hier mein Beitrag. Anbindung über BLE mit jdy-10. Geschätzt 9 mA 
Verbrauch. Ein Step-Down mit niedriger Ruhestromaufnahme wäre schön. 
Mein kleiner China-Step-Down hat bereits 5 mA Ruhestromaufnahme. Da 
gewinnt man fast nichts.

Kommandos zum Konfigurieren eines Adapters (jdy-10) fuer Digitales 
Multimeter PDM 300 C2

PIN 13 braucht man nur, wenn sich der Adapter bereits irgendwo verbunden 
hat. Dann ist jeweils Wechsel nach GND notwendig, um in den 
Konfigurationsmodus zu kommen. PIN 13 statisch auf GND zu legen, 
funktioniert nicht.

Anschluss des jdy-10 an einen seriellen Anschluss. TxD nach RxD, RxD 
nach TxD (3,3 Volt beachten, gegebenenfalls Spannungsteiler im kOhm 
Bereich vorsehen), VCC nach 3,3 Volt, GND nach GND.

Terminalprogramm mit 115000 Baud 8-N-1 einstellen. CR/LF muss nach jeden 
Kommando vom Terminalprogramm gesendet werden. Char delay=0ms

# Adapter meldet sich nach hochfahren mit Star...\r\n im 
Terminalprogramm
# Ueberpruefung auf Kommunikation
AT+VER
# Ergebnis: +JDY-10-V2.5\r\n
# Name des Adapters aendern
AT+NAMEPDM-300-C2-01
# Richtigen Modus waehlen, CLSSA0 ist aber factory default
AT+CLSSA0
# Sendeleistung einstellen. Default ist minimale Sendeleistung 
eingestellt.
# Kommando ist von jdy-40 abgeleitet
# Im Datenblatt jdy-10 nicht dokumentiert
# Im Datenblatt jdy-40 wird POWE0 mit -25 db angegeben
# POWE0 ist default. POWE[0,9] moeglich
AT+POWE0
# Abschliessend die Geschwindigkeit konfigurieren. BAUD7 = 2400 ist 
undokumentiert
AT+BAUD7

#Terminalprogramm auf 2400 8-N-1 umkonfigurieren.
# Zur Probe nochmal Version abfragen
AT+VER

# Adapter verkabeln.

# Mit BLE-Terminalprogramm verbinden. Android Smartphone funktioniert 
bereits. Bei Linux brauche ich noch ein Block-Device, dass BLE kann bzw. 
bluez mit gatttool.

von Uwe D. (Gast)


Lesenswert?

Thomas schrieb:

> Ab dem 11.03. gibts die Teile wieder:
> https://www.lidl.de/de/parkside-autorange-multimeter-pdm-300-c2-digital/p369711

Ist jetzt online für 15€ erhältlich (+15% Inflation!)

von Serge B. (godlich)


Lesenswert?

Gibt es noch eine gute Quelle für den Optokoppler? Hat jemand welche auf 
Lager und möchte Sie mir weiterverkaufen?

von Benedikt M. (bmuessig)


Lesenswert?

Serge B. schrieb:
> Gibt es noch eine gute Quelle für den Optokoppler? Hat jemand welche auf
> Lager und möchte Sie mir weiterverkaufen?

Das Original kannst man hier kaufen: 
https://eckstein-shop.de/SparkFun-Opto-isolator-Breakout
Versand ist auch als DP Brief möglich, also keine 5-6€.

von Serge B. (godlich)


Lesenswert?

Gibt es eigentlich ein Zangen-Multimeter in ähnlicher Preisklasse, 
welches sich auslesen lässt?

von Uli S. (uli12us)


Lesenswert?

Letztes jahr gabs ein paar Wochen nach dem normalen ein ZangenMM. 
Vermutlich
stammt das vom selben Hersteller und ebenso vermutlich wird der in alle 
seine
Geräte weitgehend gleiche Bauteile einbauen. Auch wenns da prinzipiell 
um mehrere 10.000 Geräte geht, die Bauteile werden da sicher billiger, 
wenn statt 50.000,100.000Stück gekauft werden.

von Benedikt M. (bmuessig)


Lesenswert?

Uli S. schrieb:
> Letztes jahr gabs ein paar Wochen nach dem normalen ein ZangenMM.
> Vermutlich
> stammt das vom selben Hersteller und ebenso vermutlich wird der in alle
> seine
> Geräte weitgehend gleiche Bauteile einbauen. Auch wenns da prinzipiell
> um mehrere 10.000 Geräte geht, die Bauteile werden da sicher billiger,
> wenn statt 50.000,100.000Stück gekauft werden.

Der Parkside Zangenmultimeter ist - soweit ich mich erinnere - leider 
nicht auslesefähig. Ich hatte mir einen zum Testen bestellt.

von Serge B. (godlich)


Lesenswert?

Ich habe ein Programm für ES8266 geschrieben, welches die Werte liest 
und per MQTT rausgibt. Funktioniert auch soweit bis auf negative Werte. 
Wie kann ich den 16bit signed wert in int umwandeln?

Für positive Werte klappt folgendes:
1
measurement_raw = (RFin_bytes[6] << 8) | RFin_bytes[7] ;

von Marcos Alves (Gast)


Lesenswert?

Hello.

I found this topic by searching on google.

Lidl in my country (Portugal) is selling a "newer" version of this 
multimeter (PDM-300-C3) but the board is the same and everything works.

I only have one question. After logging a test .CSV file, I noticed the 
times of the measurements are not in day-month-year hour-minute time.

Is there a possibility to add this to the program?

Danke.
Marcos.

von Benedikt M. (bmuessig)


Lesenswert?

Serge B. schrieb:
> Ich habe ein Programm für ES8266 geschrieben, welches die Werte liest
> und per MQTT rausgibt. Funktioniert auch soweit bis auf negative Werte.
> Wie kann ich den 16bit signed wert in int umwandeln?
>
> Für positive Werte klappt folgendes:
>
1
> measurement_raw = (RFin_bytes[6] << 8) | RFin_bytes[7] ;
2
>

Das Vorzeichen erweitern, wenn das höchste Bit 1 ist.
1
if (measurement_raw & (1 << 15))
2
    measurement_raw |= 0xffff0000;

von Benedikt M. (bmuessig)


Lesenswert?

Marcos Alves schrieb:
> Hello.
> I found this topic by searching on google.
> Lidl in my country (Portugal) is selling a "newer" version of this
> multimeter (PDM-300-C3) but the board is the same and everything works.
> I only have one question. After logging a test .CSV file, I noticed the
> times of the measurements are not in day-month-year hour-minute time.
> Is there a possibility to add this to the program?
> Danke.
> Marcos.

I’ve changed the CSV format to include date and time and released 
version 1.7 for testing. Changes are in the datetime branch. I can’t 
test right now so feedback from you is required prior to me releasing it 
as stable.

von Benedikt M. (bmuessig)



Lesenswert?

Ich habe soeben Version 1.8 von ParksideView veröffentlicht.
In dieser Version wurden Bugs mit dem CSV-Output und den 
Continuity-Pakten behoben.

Die Software ist mit dem PDM-300-C2 und dem PDM-300-C3 kompatibel.
Viel Spaß!

von Michael M. (do7tla)


Lesenswert?

Lidl hat die wieder im Angebot.

von Serge B. (godlich)


Lesenswert?

Michael M. schrieb:
> Lidl hat die wieder im Angebot.

Danke, ich finde aber nur das hier:
https://www.lidl.de/p/parkside-zangenampermeter-stift-multimeter-pzm-2-a2-lcd-display/p100344274002

Das ist aber ein anderes.

von Benedikt M. (bmuessig)


Lesenswert?


von Drago S. (mratix)


Lesenswert?

Ich hätte noch eins aus der letzten Aktion. Neu, OVP und ungeöffnet. Bin 
aus Zeitgründen nicht zum Umbau gekommen.

Würde es gerne gegen das Stiftmultimeter tauschen. Spricht mich etwas 
mehr an :)

Bei Interresse einfach melden.

von foo (Gast)


Lesenswert?

Wie man sich mit dem Parkside umbringt:
Parkside multimeter zeigt bei gefährlicher Spannung 0 Volt:
https://www.youtube.com/watch?v=QxPIRtZb8Ck

von Benedikt M. (bmuessig)


Lesenswert?

foo schrieb:
> Wie man sich mit dem Parkside umbringt

Umgebaut sollte man sowieso nicht mehr als 60V messen, da ist der Fehler 
nicht besonders gefährlich. Es ist aber gut zu wissen, dass man ihn 
nicht zur Verifizierung von Spannungslosigkeit verwenden kann.

von Troll! (Gast)


Angehängte Dateien:

Lesenswert?

foo schrieb:
> Wie man sich mit dem Parkside umbringt:
> Parkside multimeter zeigt bei gefährlicher Spannung 0 Volt:

Du bist doch auch nur ein Troll, hier Dein Fisch:

Das PDM-300-C3 ist ein CAT-III-Gerät!
Wer denkt, das eben an mehr als 300V betreiben und etwas messen
zu müssen (500/1000V), dem ist sowieso nicht mehr zu helfen.

Aus der Bedienungsanleitung:
> CAT III 300 V (Digitalmultimeter und Messkabel)

Für Dich Troll aber auch noch einen extra Fisch:
Es steht sogar auf dem Gerät, einfach lesen und verstehen bildet da 
durchaus.

von Florian (bill_haze)


Angehängte Dateien:

Lesenswert?

Ist schon lange her, aber mega geiles Projekt !
Besteht die Möglichkeit, dass Programm für ein kleinen Obolus 
abzuspecken ?

Ich würde gerne für den Streaming Bereich nur das " Display" einblenden, 
also wirklich nur die Zahlen und welcher Modus aktuell aktiv ist.

Wäre super wenn du dich mir annehmen könntest :)
LG

von Benedikt M. (bmuessig)


Lesenswert?

Florian schrieb:
> Ist schon lange her, aber mega geiles Projekt !
> Besteht die Möglichkeit, dass Programm für ein kleinen Obolus
> abzuspecken ?
>
> Ich würde gerne für den Streaming Bereich nur das " Display" einblenden,
> also wirklich nur die Zahlen und welcher Modus aktuell aktiv ist.
>
> Wäre super wenn du dich mir annehmen könntest :)
> LG

Das lässt sich umsetzen. Schreib mir gerne eine PM.

Viele Grüße,
Benedikt

von Benedikt M. (bmuessig)


Angehängte Dateien:

Lesenswert?

Ich möchte euch ParksideWeb, die neue Alternative zu ParksideView 
vorstellen.

ParksideWeb ist, wie der Name schon andeutet eine Webversion von 
ParksideView, die im Browser (oder z.B. in OBS zum Aufnehmen/Streamen) 
läuft und damit auch endlich auf allen Platformen (insbesondere Linux 
und Mac) produktiv einsetzbar ist. Es ist zu ParksideView 
funktionskomplett (abgesehen von Min/Max und CSV mit Semikolon).

Der Code und weitere Dokumentation sind wie immer verfügbar und PRs 
gerne willkommen: https://github.com/bmuessig/ParksideWeb

Um direkt loszulegen, kann man das Programm z.B. wie folgt starten:
ParksideWeb.exe -p COM1 -o -c > data.csv

Zwar bin ich normalerweise dem Ersetzen nativer GUIs durch Webversionen 
eher kritisch eingestellt, doch bin ich der Ansicht hier einen guten 
Kompromiss eingegangen zu sein. Die Anwendung lässt sich komplett 
offline verwenden, bringt alle Ressourcen eingebettet mit und sollte 
auch mit älteren Browsern kompatibel sein.

Lässt man die Anwendung auf einem Computer im selben Netzwerk laufen, so 
kann man auch einen oder mehrere Mobilgeräte als externe, kabellose 
Displays nutzen.

Auch ist eine exklusive Nutzung auf der Kommandozeile möglich (-n -c 
streamt direkt CSV auf die Standardausgabe - ohne Server), aber auch die 
Integration in eigene Software (z.B. über die /config.json und 
/data.json Endpunkte).

Anbei gibt es Builds für die beliebtesten Platformen. Auf GitHub finden 
sich auch entsprechende Versionen für ARM. Viel Spaß!

: Bearbeitet durch User
von Benedikt M. (bmuessig)


Lesenswert?

Ich habe diese Woche den neusten LIDL/Parkside-Multimeter gekauft, um 
dessen Modifizierbarkeit zu testen. Der PDAM 300-A1 besitzt leider keine 
serielle Schnittstelle mehr. Das Display ist zwar dasselbe, aber das 
Chipset anscheinend nicht. Es verwendet einen externen I2C EEPROM für 
die Kalibrierung, der beim Starten abgefragt wird. Ich konnte die 
wichtigsten Signale an den inzwischen unbeschrifteten Testpunkten 
reverse-engineeren, habe aber auch durch festverdrahten einiger Signale 
beim Start keinen Output entdecken können.

https://www.lidl.de/p/parkside-digitales-autorange-multimeter-pdam-300-a1/p100371622

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
Noch kein Account? Hier anmelden.