RxMet1 – ricevitore per sensore esterno Hygro-Thermo a 433 MHz

Questo circuito permette di ricevere i dati trasmessi da un sensore Oregon Scientific modello THGR228NF (visibile nella figura sottostante) in radiofrequenza a 433 MHz.

sensor-THGR228NFIl circuito è stato pubblicato (a mio nome) sulla rivista CQ Elettronica nel numero di Settembre 2007 (consultare la rivista per maggiori dettagli).

Il microcontrollore utilizzato è un Atmel ATtiny2313 ; lo schema è visibile qui sotto:

Per una visione nitida, scaricare il PDF da questo link

Cliccare l’immagine per ingrandirla ; il file PDF può essere scaricato da questo link

Nella prossima immagine si può vedere il prototipo del circuito con i componenti montati :

rxmeteoIl circuito stampato è visibile nell’immagine qui sotto ; ovviamente, per realizzare un circuito mediante fotoincisione, bisogna stampare l’immagine in scala 1:1 e pertanto è opportuno scaricare il file PDF raggiungibile tramite il link nella didascalia dell’immagine.

stampato

Il file PDF in scala 1:1 può essere scaricato da questo link

Infine, nella prossima immagine si può vedere la disposizione dei componenti sul circuito.

montaggio

Il file contenente l’elenco dei materiali, il codice HEX da scrivere sul micro ed i batch files per settare il clock esterno e per effettuare la programmazione dell’ATtiny2313 (tramite il programma freeware SP12), può essere scaricato da questo link. Se desiderate dare un’occhiata al codice sorgente in C dell’applicazione, cliccate questo link.

I dati in uscita dal circuito sono “grezzi”, cioè rappresentano in Ascii l’insieme di bits ricevuti dal sensore, raggruppati in notazione esadecimale. Nella figura sottostante, i dati ricevuti dal sensore sono mostrati nel riquadro a sfondo verde (quello in alto, per i daltonici..) mentre la “traduzione” in temperatura e umidità sono nel riquadro a sfondo blu (quello in basso).

Screenshot del programma su PC per la visualizzazione dei dati

Screenshot del programma su PC per la visualizzazione dei dati

Ho realizzato il programma in VB6 ; chi fosse interessato può scaricare il file d’installazione da questo link. Ricordo che il programma è offerto gratuitamente a scopo di test e non ha alcuna clausola di garanzia e nessuna assunzione di responsabilità da parte mia per eventuali danni o malfunzionamenti.

Il “cuore” di questo programma è una DLL (libreria) scritta da me per decodificare il protocollo di trasmissione del sensore. Chi volesse scrivere un proprio programma per visualizzare i dati forniti dal sensore, potrà usare liberamente tale DLL scaricandola da questo link e inserendola nel proprio programma. Di seguito, un esempio di come utilizzare la DLL in un programma VB6 per decodificare la stringa di dati “grezzi” ricevuti dal sensore in valori leggibili di temperatura e umidità:

// declare the convert function
Private Declare Function RawConvert Lib "meteo.dll" (ByVal text As String) As String

// use the function
//  rxraw contains the full ascii string received from RxMet1
//  rxd contains the decoded Temperature and Hygro
dim rxd as string
dim rxraw as string

    rxd = RawConvert(rxraw)

Nota: questo materiale fu già pubblicato su un mio vecchio sito (ora cancellato) e venne citato da “Hack-a-day” nel settembre del 2007.

One button, two leds using single GPIO on RPi

Once again, a “superused” GPIO… This time, the RPi I/O is used for driving two leds (one blue, one red) and a pushbutton. The schematic is simple, look at the pic below:

tri-schAnd here is the prototype realized on perfboard:

tri-picNote: pictures are taken with leds off, red led on, blue led on.

There is also a new Python script named service2.py :

import RPi.GPIO as GPIO
import time
from subprocess import call

cnt = 0  # reset counter for pushbutton pressed
toggle = 0  # reset toggle flag
GPIO.setmode(GPIO.BCM)  # set GPIO mode
while True:  # main loop
    GPIO.setup(4, GPIO.OUT)  # GPIO.4 set as output
    GPIO.output(4, False)  # GPIO.4 output set at low level (red led ON)
    time.sleep(0.2)  # 200mS pause with red led ON
    if toggle != 0:  # if toggle flag set
        GPIO.output(4, True)  # GPIO.4 output set at high level (blue led ON)
        time.sleep(0.2)  # 200mS pause with blue led ON
    GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_OFF)  # GPIO.4 set as input, no pull-ups (both leds OFF)
    for n in range(0,2):  # exec twice
        time.sleep(0.1)  # wait for 100 mS prior to read pushbutton status
        if GPIO.input(4):  # if GPIO.4 is high (button NOT pressed)
            if cnt >= 4 and cnt <= 6:  # if was pressed for 2-3 sec
                 toggle ^= 1  # invert toggle flag
                 if toggle == 0:  # if changed to 0
                     call("sudo killall x11vnc", shell=True)  # terminate x11vnc server
                 else:  # if changed to 1
                     call("sudo x11vnc", shell=True)  # start x11vnc server
             cnt = 0  # reset counter for pushbutton pressed
         else:  # if GPIO.4 is low (button pressed)
             cnt += 1  # increment counter for pushbutton pressed
     if cnt >= 10:  # if continuously pressed for 5 seconds (cnt increments 2 times in a second)
        GPIO.setup(4, GPIO.OUT)  # GPIO.4 set as output
        GPIO.output(4, False)  # GPIO.4 output set at low level (fix red led ON as signal for user)
        call("sudo poweroff", shell=True)  # terminate and shutdown
        break  
    if toggle != 0:  # if toggle flag set
        time.sleep(0.4)  # (blue blinked for 0.2 Sec) wait the remaining time for 1 Sec main cycle
    else:  
        time.sleep(0.6)  # (blue off) wait the remaining time for 1 Sec main cycle

How it works:

Normally, the red led is lighted for 200 mS, then the button is sampled for pressed state. If the button is pressed for a time between 2 and 3 seconds, then the variable toggle is inverted. When toggle is “1”, after the red led turns off, the blue one turns on for 200 mS. If the button is pressed again for 2-3 Sec, the variable toggle is inverted again and at next cycle the blue led will no more turn on. When the toggle variable changes, there are two actions performed by the script : if toggle is 0 (off) then a call to “killall x11vnc” is performed, while if is 1 (on) a call to “x11vnc” is done. This means that I can control the start or stop of x11vnc server with my pushbutton. If I press the button for a time over 5 seconds, there is a call to the “poweroff” and the board will turn off. Please, note that when the pushbutton is pressed the blue led can’t turn on, while the red one will be forced on (at low current, 1mA).

Here is a video of circuit and program running:

tri-film di robotop

Hope this will be useful for someone… 🙂

Double function GPIO on RPi

I’m using the Raspberry Pi board in some projects. Many of these needs to run 24/7, so the hardware has battery backup in case of power fail. Sometimes, the device controlled by RPi board has to be powered off for maintenance, so it’s also necessary to turn off the control board, but there’s no video, no keyboard, neither mouse attached. The operator must connect all of these to perform a clean shutdown. Ok, that’s unacceptable: I decided to add a blinking led to inform the operator that the board is running and a switch to manually perform the shutdown, without the need for keyboard, mouse and video.
There was a problem: I just had ONE single GPIO free, the GPIO.4 , so I decided to use it for both led driving and pushbutton input. The principle is very simple: change the port direction and use it alternatively for led and for pushbutton. Here is the schematic:

rpi-led-sw-schAnd this is the prototype circuit mounted for testing purposes:

rpi-led-sw-picThe 1K resistor limits the current from GPIO.4 to about 1.5mA (the red led lights well) and the 470 Ohm resistor limits the current from the pin in case of software error (it happens, sometime) that sets the GPIO.4 as output and its value as high (3.3v). In such case, even if you press the pushbutton switch, the GPIO.4 is loaded with max 7mA (3.3V / 470 Ohm) that is acceptable for the output. When you press the button, the led turns ON even if the GPIO is in input mode, but the current that flows in the led is smaller than in case of GPIO is output-low, being the resistor value 1K + 470 Ohm (approx 1mA will flow thru the led). Note that the resistor values are important : you can’t decrease significantly the value of 470 Ohm, ‘cause the current drawn from GPIO in case of “output high” will be out of GPIO current limits and you also can’t increase that value, ‘cause the partition with led and 1K resistor will supply a voltage out of specs when pressing the pushbutton while the port is in input mode. With actual values, the voltage at GPIO pin when in input and with switch closed is about 0.5V that is in range for being read as logical “0”. Voltage over 0.8V may create unstable “0” reads or can be interpreted as “1” (switch open). Similarly, you can’t increase the value of 1K, ‘cause the current that flows in the led (and its brightness) will proportionally decrease. So, the values proposed in the schematic are “well balanced”…

Now, we have a double function pin. Here is the listing of a Python script I realized to make all this principle working : it’s named “service.py”.

import RPi.GPIO as GPIO
import time
from subprocess import call

# reset counter for pushbutton pressed
cnt = 0
# set GPIO mode
GPIO.setmode(GPIO.BCM)
# main loop
while True:
	# GPIO.4 set as output
	GPIO.setup(4, GPIO.OUT)
	# GPIO.4 output set at low level (led ON)
	GPIO.output(4, False)
	# 200mS pause with led ON
	time.sleep(0.2)
	# GPIO.4 set as input with pull-up (led OFF)
	GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_UP)
	# wait for 100 mS prior to read pushbutton status
	time.sleep(0.1)
	if GPIO.input(4):
		# if GPIO.4 is high (button NOT pressed)
		# reset counter for pushbutton pressed
		cnt = 0
	else:
		# if GPIO.4 is low (button pressed)
		# increment counter for pushbutton pressed
		cnt += 1
	# repeat pushbutton read after 100 mS (ensure isn't a spike)
	time.sleep(0.1)
	if GPIO.input(4):
		cnt = 0
	else:
		cnt += 1
	if cnt >= 10:
		# if continuously pressed for 5 seconds (cnt increments 2 times in a second)
		# GPIO.4 set as output
		GPIO.setup(4, GPIO.OUT)
		# GPIO.4 output set at low level (fix led ON as signal for user)
		GPIO.output(4, False)
		# terminate and shutdown
		call("sudo poweroff", shell=True)
		break  
	# if not terminated, wait the remaining time for 1 Sec main cycle
	time.sleep(0.6)

The main loop has 1 Sec total time : led turns ON for 200mS (so the GPIO is used as output and value is 0) then turns off when the port mode changes to input. After a delay of 100mS the pushbutton state is tested (twice) and a counter is incremented if the switch is closed; if the switch opens, the counter is reset to zero. When the counter reaches 10, so the button was continuously pressed for 5 seconds, the led is forced ON putting the GPIO in output mode with value 0. The shutdown command is then sent to the OS and the Raspberry turns off. At end of shutdown the led that was fixed ON will turn off, obviously.

Note: when you push the button, the led will turn ON ‘cause you connect the cathode to gnd via 1K + 470 Ohm resistence, but you still can see the 200mS blinks due to difference of current flowing in the led when the GPIO is in input state and in output state with value = low (gnd).

Hope this will be useful for someone. It was for me 🙂

Calcolatrice Android con messaggio segreto…

Nota 15/02/2015: ho modificato “pesantemente” l’applicazione, risolvendo alcuni problemi grafici (per esempio a causa di un utente che scelga nelle impostazioni di accessibilità un set di caratteri ingranditi) ed altri legati ai calcoli in virgola mobile, che sono sempre un po’ spinosi, a prescindere dal linguaggio con cui si scrive il programma. La matematica, in certe occasioni, sembra non essere una scienza esatta… ma ecco come appare, adesso, il programma, quando viene avviato:

Screenshot_2015-02-15-18-19-17A parte le normali funzioni ed operazioni, ho voluto aggiungere le “Terne Pitagoriche”, eseguite mediante un tasto (quello con il triangolo rettangolo) che permette di calcolare le misure dei cateti a fronte dell’ipotenusa inserita come parametro d’ingresso.  Il valore dell’ipotenusa dovrà avere al massimo due cifre decimali ed i valori risultanti dei cateti avranno, anch’essi, la stessa precisione. Quindi… i risultati proposti dal programma saranno selezionati tra quelli che hanno un risultato con MASSIMO due decimali, senza approssimazioni. Nella figura sottostante, vediamo il risultato dell’operazione a fronte di un valore di ipotenusa (indicata con ” i”) pari a 17:

Screenshot_2015-02-15-18-19-37L’applicazione è disponibile gratuitamente su Google Play Store.

———————————————————————————————————————

Iniziamo l’anno con un regalo: una piccola applicazione per il vostro Smartphone (o Tablet) Android. Si tratta di una semplice calcolatrice, che però nasconde un piccolo segreto. Digitando una speciale sequenza di caratteri, viene mostrato un messaggio segreto. Di sotto vedete un’immagine di come si presenta l’applicazione appena avviata…

L'applicazione appena avviata.

L’applicazione appena avviata.

Ora proviamo a inserire la “sequenza segreta” che per default è composta da 9 caratteri che sono 1 / 1 / 2014 =  (senza cancellazioni : in caso di errore ricominciate da capo). Appena digitata la sequenza, vedremo che il programma reagirà a questa particolare combinazione mostrandoci il messaggio segreto, come si vede nell’immagine sottostante:

Svelato il messaggio segreto: sono gli auguri per un buon 2014...

Svelato il messaggio segreto: sono gli auguri per un buon 2014…

Bene, preso atto degli auguri, possiamo ora personalizzare sia la sequenza di attivazione che il messaggio segreto. Questo sarà utile per creare una “versione privata” e fare un omaggio ad una persona cara, attivando, per esempio, un messaggio di auguri personalizzato con la data di nascita. Altra applicazione utile può essere quella di scrivere una password che vogliamo tenere nascosta, facendola visualizzare solo inserendo una specifica sequenza (una data o un numero che ricordiamo bene) ; possiamo perfino nascondere nel messaggio segreto una formula matematica che non ricordiamo… 🙂 . Naturalmente dobbiamo usare, per la sequenza di attivazione, solo i caratteri che possiamo digitare sulla tastiera della calcolatrice, altrimenti sarà impossibile richiamarla !

Per attivare la modifica della sequenza e del messaggio segreto, dovremo digitare otto volte 8 e poi cliccare, invece dei tasti, direttamente l’area del display. Così facendo avremo la prima fase di modifica, quella che riguarda la sequenza di accesso…

Scegliamo una nuova sequenza di accesso...

Scegliamo una nuova sequenza di accesso…

Possiamo decidere di modificare la sequenza, oppure no (se vogliamo usare la stessa sequenza per un altro tipo di messaggio segreto). In caso di modifica, scriviamo nella casella di testo la nuova sequenza e quindi clicchiamo Modifica. Appena eseguita questa operazione, comparirà la seconda finestra di input, per modificare il messaggio segreto…

Qui possiamo modificare il messaggio segreto...

Qui possiamo modificare il messaggio segreto…

Anche qui, possiamo scegliere se modificare o lasciare inalterato il messaggio segreto. Se avremo modificato o la chiave di accesso, o il messaggio, la nuova configurazione sarà salvata e diventerà subito operativa.

Se clicchiamo la finestra del display, senza che sia stato prima digitato il numero speciale 88888888, si aprirà invece una finestra di dialogo per chiudere l’applicazione. Potremo scegliere se sì o no.

Per il momento è tutto. Spero che questa piccola applicazione vi piaccia e vi faccio i miei migliori auguri per un lieto 2014.

L’applicazione è disponibile gratuitamente su Google Play.

Nota 10/2/2015: ho rimosso l’applicazione da Google Play poiché ho deciso di usare il “market” solo per le App a pagamento. E’ comunque ancora possibile scaricare l’App gratuita da questo link (cliccare “scarica” sulla pagina che si apre).

FreeBasic + FireFly = ambiente di sviluppo visuale Windows gratuito

Ho ricevuto un messaggio tramite il relativo form su una pagina del vecchio sito. Rispondo pubblicamente in quanto la richiesta è interessante… Chi mi scrive ha usato con successo il FreeBasic per convertire vecchi programmi da GW-Basic e altri “dialetti” Basic. Tutti questi programmi, per ora, girano nella solita “finestra DOS” e così mi si chiede se io possa suggerire un modo semplice per scrivere qualcosa che funzioni come una qualsiasi applicazione Windows. Personalmente, utilizzo a questo scopo l’ambiente IDE gratuito chiamato FireFly. Ho aggiunto un link sulla colonna a destra (links utili) per poterne fare il download. L’ambiente di sviluppo si integra perfettamente con FreeBasic e il risultato è ottimo. Le applicazioni scritte sono assolutamente “eleganti” e ricordo che si tratta di eseguibili completi, non serve alcuna “runtime”. Io utilizzo la FIREFLY_FB_350 che è liberamente scaricabile dal sito dell’azienda produttrice. Questa versione per FreeBasic è gratuita, ma ne esistono altre a pagamento (per esempio quella relativa a RealBasic). Il link che ho indicato è (guarda caso) quello della versione libera per FreeBasic. Nel file di download sono presenti anche alcuni esempi, che aiutano a prendere pratica del programma. Comunque, se si ha una certa esperienza di ambienti di sviluppo “visuali”, il tempo di apprendimento è piuttosto basso. Consiglio caldamente questo “partner” di FreeBasic ; l’abbinamento dà luogo ad un formidabile sistema di sviluppo per programmare sotto Windows e …cosa meravigliosa in questi momenti bui… è tutto gratis. Purtroppo il grande pregio di FreeBasic, quello di esistere anche in ambiente Linux, non viene rafforzato da FireFly_FB, dato che quest’ultimo esiste solo su piattaforma Windows, ma penso che ci si possa accontentare 🙂 Esiste un IDE per FreeBasic anche sotto Linux (Glade?), ma al momento non l’ho ancora utilizzato e quindi non sono la persona giusta per dare consigli ! Spero che la mia risposta sia stata utile…

una schermata relativa ad uno dei programmi di esempio

una schermata relativa ad uno dei programmi di esempio (cliccare l’immagine per ingrandire)

Tombolara: la tombola di E.Ficara

Prima di tutto, tanti auguri per Natale e anno nuovo. Poi, un piccolo regalo… Se volete giocare a tombola, ma avete perso il sacchetto con i numeri, oppure solo qualche numero, potrete ugualmente farlo. Ecco qui un semplicissimo “cartellone” da tombola elettronico, che potrete installare sul vostro smartphone Android.

screenshot

Immagine del gioco in funzione (in rosso i numeri usciti)

Appena lanciata l’applicazione, sentirete una voce “elettronica” che dice: “Tombola” (vi consiglio di mettere al massimo il volume della sezione multimediale, cosa che potrete fare accedendo alle impostazioni -> audio). Potrete iniziare il gioco premendo “Estrai” per ogni nuovo numero. Le estrazioni avvengono con assoluta casualità e non c’è il rischio d’imbrogli. Volendo, si potrebbe fare anche con gli imbrogli, ma io non sono la persona giusta. Nel caso in cui qualche giocatore si sia distratto e non abbia sentito il numero, potrete premere “Ripeti” e l’ultimo numero verrà nuovamente pronunciato dalla solita voce sintetica. Faccio notare che l’applicazione è scritta per smartphone in modalità portrait (verticale) e utilizza il motore TTS (Text To Speech) per pronunciare frasi e numeri, quindi è necessario abilitare questa funzione sul proprio dispositivo, possibilmente aggiornando anche il dizionario dei fonemi dopo aver selezionato la propria lingua. E’ poi necessario regolare il volume delle applicazioni multimediali, che in diversi telefoni è settato per default al minimo.

L’applicazione è disponibile gratuitamente su Google Play.

Dadotron

Ho pensato che potrebbe essere utile disporre di questo speciale “dado” anche se lontani da un PC ; ho quindi deciso di ri-scrivere l’applicazione anche per smartphone (o tablet) Android. Il funzionamento è identico a quello descritto per la versione PC, mentre l’aspetto estetico è un po’ diverso. Qui sotto c’è lo screenshot del mio Nexus dopo aver estratto 3 numeri su un “dado” a 24 facce.

Screenshot_2014-11-02-20-29-06Se interessati, potete scaricare l’applicazione gratuita da Google Play .

Applicazione per PC che realizza un dado elettronico multifaccia, utile per diversi giochi RPG nei quali è necessario, per l’appunto, utilizzare dadi “strani”. Inoltre, usando un dado a 90 facce, si può tentare la fortuna e farsi dare tre numeri buoni per un terno al lotto…
Lo scrissi nel 2009 per provare il linguaggio di programmazione XBlite (freeware).

dadotron_cap

Screenshot del gioco. In tre successivi “lanci” sono stati estratti: 15, 24 e 12

Dopo aver installato e quindi avviato il programma (è stato testato con WinXP e Win7), vedrete due trattini a sinistra sul display. Questo indica che il programma è in attesa di sapere quante facce ha il “dado” che vogliamo usare. Supponiamo siano 30 : cliccate 3 e poi 0. A questo punto ogni volta che cliccherete GO verrà estratto un numero da 1 a 30 e sarà mostrato sul display (che scorrerà a sinistra). Se volete la somma di tutti i numeri usciti fino a quel momento, cliccate il tasto +.
Ogni volta che premerete un tasto numerico da 0 a 9 per cambiare il numero di facce del dado, il totale accumulato verrà azzerato.

Nota per il download : non viene fornita nessuna garanzia implicita o esplicita di funzionamento del programma. Non mi assumo nessuna responsabilità per eventuali problemi si dovessero presentare sul dispositivo dove l’applicazione verrà installata. Il programma è un “dimostrativo” e non viene fornita assistenza, né supporto di alcun genere. Scaricando ed installando il programma, accettate implicitamente le mie condizioni di non assunzione di responsabilità. Se non siete d’accordo, non scaricate il file e non installatelo !

Ho letto e compreso la nota, voglio scaricare il file dadotron-install.zip (116 KB)

Nota: il file zippato ha una password. Prima di decomprimere il file ed avviare l’eseguibile per l’installazione, controllate che il codice di verifica MD5 del file sia valido ; se il codice calcolato sul file scaricato non corrisponde a quello scritto qui sotto, NON DECOMPRIMETE, INSTALLATE o UTILIZZATE IL FILE SCARICATO ! Non è quello originale ! Per calcolare il codice MD5 potete usare l’applicativo HashTab, gratuito per uso personale (lo trovate sulla colonna a destra tra i links utili).

codice MD5 originale: 977F0CB6B6DF77383238BD4F46831976
p
assword per decomprimere lo zip: eficara

Simple trick to add zip file to jpg image

Sometimes I have a PCB (printed circuit board) to realize. Usually, I send my design to local (italian) producers, but recently I’ve seen on a famous internet shop (four letters, starting with ‘e’ ending with ‘y’) some advertise from chinese producers, giving the PCB service at VERY low price. My PCB design files are always in GERBER format, with all sections shrinked in a single zip file.

If you decide to send your design to such chinese producers, generally you must mail your zipped gerber to the factory using your private email, ‘cause the “famous internet shop” only accepts jpg files as attachments in messages from buyer to seller (or viceversa).

This limit gaves me an idea : to create a jpg file that has a image part (my logo, for example) and hidden embedded gerber file. This way, I can send the data using the mail messaging offered by “the famous internet shop” without the need to use my private email account.

The procedure to create such embedded jpg is VERY simple:

a) put the gerber.zip (or ANY OTHER zip file) and the “container” image.jpg on a temp folder…

b) open a “dos command” window, navigate to the temp folder, then type: copy /b image.jpg + gerber.zip miximage.jpg (I usually create a batch file with this command in that folder,)

This command creates a copy (binary copy, thanks to the /b option) of the jpg PLUS the zip file. Now, if you open the resultant miximage.jpg with an image viewer, you will see the “container” image, but if you right click on the same jpg file, choosing “open with”, and selecting the application 7zFM.exe (from folder 7-Zip, under program files), you will discover that all your zip file contents are also present. The link to 7Z, my favourite zip/unzip application, is on the right side of this page, under useful links.

With this “mixed” file, you can use the mail message system of the “famous internet shop” to send your data to the chinese factory, attaching to your message the embedded jpg file. This is good for avoiding to use your private email and for have a seller-buyer transaction covered by the payment protections of the shop.

Hope this will be useful for someone…

Log two Multimeters with single serial port

Update – new version :
Logger for Android @ http://ficara.altervista.org/?p=3208

As promised in my previous post, here is the program to log the data coming from two multimeters. I opened the Rs232 box of one multimeter (we are talking about the DT4000-ZC model) and discovered that there is no GND reference ! Look at the picture :

rs232-ifAt left side, you can see the “circuit” that’s in the rs232 connector box ; at right, what I suppose it’s inside the multimeter. The GND reference isn’t needed ‘cause the pin 2 of DB9 connector is normally polarized at -5V, that is the voltage level coming from the pin 3 (Txd) via 10K resistor. When the DTR signal (pin 4) goes high, the PNP transistor acts like a switch, commutating the pin 2 level from -5V to +5V depending on serial signal captured by the PNP phototransistor. In this case, the GND reference is inside the PC serial port and therefore there is no need to insulate the two multimeters one respect to the other.

But… I just want to use a single rs232 port on my PC to log both the multimeters, as channel #1 and #2. Ok, if the circuit inside the multimeter is like I supposed it to be, I can simply make an ‘OR’ of the outputs, powering via RTS one channel, and via DTR the other, once at a time. The schematic for this mixer is here:

That's not CAD, but MAD (Manually Aided Design)

That’s not CAD, but MAD (Manually Aided Design)

In the next picture you can see the prototype I built to test the program.

mixer-detailsNow, all is ready to test. I used a USB battery charger (very simple circuit, look on my previous articles for details) and two multimeters to measure the battery voltage and the charging current.

IMG_20130818_180318 Ok, the multimeters are running. Now I can launch my new application, having set the com port as in the previous program. Starting the log, I can see on the screen the samples, alternatively taken from the multimeter #1 and the #2. At the start of each line, I added a time stamp, for successive data elaboration, may be in graphical form.

dos2x2The application has been written in FreeBasic (look at the right column of this page for the link to the free, open source compiler) and doesn’t need for installation. Please, look at the previous post for more details on starting from batch. The new program acts exactly as the previous, only has enhanced data stream verification and, obviously, double channel capabilities 🙂

Note: this article was cited on “Hack-a-day” on Aug 26 2013.

Disclaimer: this application is provided with no explicit or implicit warranties of operation. I do not assume any responsibility for problems that may arise on the device where the application is installed. The program is a “demonstration” and no support of any kind is provided. By downloading and installing the program, you implicitly accept my terms of not taking responsibility. If you do not agree, do not download and / or install the file !

I have read and understood the note, accept the terms and want to download the file DT4000x2.zip (42.204 bytes)

Note: the zip file has a password. Check the hash of the zipped file, then extract it and you will have your executable ready to run. If you don’t have a tool for computing the hash, I suggest HashTab, free for personal use.
Note: DO NOT extract or use the downloaded file if MD5 doesn’t match with the following code : MD5 = 0EEA13D48A3E915B2C4E53CC54663679
The password is: eficara

Logger for DT-4000ZC digital multimeter

Update 31 Dec 2016:
Look at the end of this article for new version of EXE
Log 2 multimeters with one serial port @ http://ficara.altervista.org/?p=1602
Logger for Android @ http://ficara.altervista.org/?p=3208

I recently purchased a digital multimeter with RS232 serial output. If interested to, search ebay for “IN06158” and you will find the item from UK seller al reasonable low price.

The device measures actual temperature. Uh, it's hot :)

The device measures actual temperature.
Uh, it’s hot 🙂

The reason for this was that I’m going to design my own LiFePO4 battery charger and want to create a test diagram for Voltage and Current while battery is charging. The Multimeter is shipped with software that has graphical style and logging capabilities, but I always choose to write my own application ‘cause it will be certainly “tailored” for my needs.

So, a quick search on Google pointed me to the serial protocol, that’s very simple (read about the protocol at this link). All the infos are sent via 14 bytes frames, with the digits and icons bitmapped on various bytes. I used the FreeBasic compiler to create an executable that shows on screen (in console mode) the decoded frames and also saves the data on a text file. The executable (actually tested under Win7, but I’m pretty sure that will work on XP) doesn’t need for installation, it can be run directly clicking on the .exe icon. The first step is to supply the com port that must be used for communication, as you can see in the picture below.

Type in the com port you want to use

Type in the com port you want to use

After the com port is open, the program stands for an UP-arrow to start communicating with the Multimeter ; a DOWN-arrow will pause the communication, while the ESC key will terminate the program (saving the log file). Every row shown on the screen is also saved on disk. The digits are enclosed in brackets [ ] just for “cosmetic” reasons. You can see an example of records in next picture.

A frame error message is shown if first byte is wrong

A frame error message is shown if first byte is wrong

The protocol isn’t very “sure”, ‘cause there is no check on the full string or on single bytes, but you can filter it easy if some “strange” value appears on decoded segments or if the sequence of high nibbles (they start with 0x1n and end with 0xEn) is non-continuous. The serial cable is short (about 1 m), so errors would be rare.

The executable (zipped) can be downloaded from the link supplied at end of this page, after the disclaimer. Please, note that the zip file also contains a batch file .bat that can be modified to start the program without the need for typing the com port. In fact, if you modify the .bat file, substituting the com port value (on my PC is com22), you can simply start the executable, using the selected port, just clicking on .bat file icon.

I’m also planning to create a new version of this file for logging two multimeters simultaneously,  ‘cause I need for Voltage and Current sampled at same time. Obviously I would use two multimeters with different com ports and probably I would apply some interface for isolating the serial ports of the Amp and Volt meters. Ok, stay tuned for improvements 🙂

Disclaimer: this application is provided with no explicit or implicit warranties of operation. I do not assume any responsibility for problems that may arise on the device where the application is installed. The program is a “demonstration” and no support of any kind is provided. By downloading and installing the program, you implicitly accept my terms of not taking responsibility. If you do not agree, do not download and / or install the file !

I have read and understood the note, accept the terms and want to download the file DT4000.zip – updated 2016/12/31

Note: the zip file has a password. Check the hash of the zipped file, then extract it and you will have your executable ready to run. If you don’t have a tool for computing the hash, I suggest HashTab, free for personal use.
Note: DO NOT extract or use the downloaded file if MD5 doesn’t match with the following code : MD5 = BC558E8F4A118548BAB949535087FEC0
The password is: eficara

2016/12/31: I modified the executable after a request from a reader. Now you can add in the command line a flag to autostart the log and on every line of the log you can read the timestamp of the sample in the format hh:mm:ss.

The screenshot of the new version of the program

The screenshot of the new version of the program

The program running with autostart flag set in the command batch file

The program running with autostart flag set in the command batch file

The downloadable zip file also contains an example of batch file to automatically start the logging on port Com3.

Note that some USB -> RS232 interfaces can’t control the DTR / RTS lines (due to missing commands in the drivers), so… such interfaces cannot work. I tried with an original Prolific PL2303 interface and it works. There are some non-original PL2303 chips that can have problems. The control of DTR / RTS lines is MANDATORY for this program to work.

Well, that’s all (for now)…