Super-convertitore A/D per porta seriale con 6 discreti

Fa caldo. Vi propongo una mia piccola creazione del momento nella speranza che qualche buon'anima ci sviluppi intorno un softwarino applicativo (io non sono in grado, non sotto Windows).

Si tratta di un monostabile che "distorce" il dato uscente dal Tx della RS232 del PC in modo da far rientrare un codice (loop su Rx) dipendente da un valore di resistenza (polarizzazione del BC337). L'ho realizzato e funziona. Ho dato indicazioni decorose nello schema per semplificare la vita ai volenterosi. Chiaramente pu=F2 discriminare solo 8 livelli a meno di non commutare la baud rate per approssimazioni successive.

E' possibile anche sostituire il potenziometro con un commutatore fino ad 8 posizioni con opportuni trimmer in serie ad ogni via.

Il tutto =E8 autoalimentato e conta pochissimi discreti.

Tuuto =E8 nato dal caldo: volevo realizzare una sonda termica esterna da interfacciare al PC ma molto semplice perch=E9 sono pigro e il caldo mi fa andare in deriva termica. :(

Cosa ne pensate? Suggerimenti?

[FIDOCAD] MC 100 90 0 0 300 MC 115 100 0 0 040 MC 90 90 1 0 170 MC 90 100 0 0 040 MC 115 60 1 0 080 LI 115 45 115 60 MC 90 55 0 0 116 MC 75 70 3 0 200 LI 75 70 75 90 LI 75 90 100 90 LI 75 55 75 45 LI 90 55 90 45 LI 115 80 115 70 LI 115 75 130 75 LI 60 45 115 45 SA 75 45 SA 90 45 SA 115 75 SA 90 90 LI 90 80 90 90 MC 90 70 1 0 080 LI 90 70 90 65 MC 60 45 2 0 000 MC 130 75 0 0 000 TY 40 40 5 3 0 0 0 * Tx(3) TY 140 70 5 3 0 0 0 * Rx(2) TY 80 110 5 3 0 0 0 * Gnd(5) TY 95 55 5 3 0 0 0 * 470k TY 120 60 5 3 0 0 0 * 1k5 TY 120 85 5 3 0 0 0 * BC337C TY 95 70 5 3 0 0 0 * 47k TY 50 60 5 3 0 0 0 * 1N4148 TY 70 95 5 3 0 0 0 * 100nF TY 15 110 5 3 0 0 0 * - nessuna parit=E0 TY 15 115 5 3 0 0 0 * - 2 stop bit TY 15 105 5 3 0 0 0 * - 8 bit dato TY 15 100 5 3 0 0 0 * - 300 Baud TY 15 120 5 3 0 0 0 * - no handshake TY 15 15 8 4 0 1 0 * Super-convertitore A/D per porta seriale TY 15 25 6 3 0 1 0 * by Piccio - Agosto 2009 EV 20 150 25 155 EV 30 150 35 155 EV 40 150 45 155 EV 50 150 55 155 EV 25 160 30 165 EV 35 160 40 165 EV 45 160 50 165 EV 55 160 60 165 EV 60 150 65 155 LI 20 145 65 145 LI 65 145 70 150 LI 70 150 70 160 LI 70 160 60 170 LI 60 170 25 170 LI 25 170 15 160 LI 15 160 15 150 LI 15 150 20 145 TY 20 145 6 3 0 1 0 * 1 TY 60 145 6 3 0 1 0 * 5 TY 25 165 6 3 0 1 0 * 6 TY 55 165 6 3 0 1 0 * 9 TY 80 155 6 3 0 1 0 * 3 =3D Tx TY 80 150 6 3 0 1 0 * 2 =3D Rx TY 80 160 6 3 0 1 0 * 5 =3D Gnd TY 15 135 6 3 0 0 0 * DB9 maschio - vista frontale PC TY 10 180 6 3 0 0 0 * Spedire il codice 0x00, leggere il codice di rientro LI 25 235 30 235 LI 30 235 30 225 LI 30 225 35 225 LI 35 225 35 235 LI 35 235 85 235 LI 35 225 40 225 LI 40 225 75 225 LI 75 225 75 235 LI 40 225 40 230 LI 40 230 40 235 LI 45 225 45 230 LI 45 230 45 235 LI 50 225 50 230 LI 50 230 50 235 LI 55 225 55 230 LI 55 230 55 235 LI 60 225 60 230 LI 60 230 60 235 LI 65 225 65 235 LI 70 225 70 230 LI 70 230 70 235 LI 90 225 90 235 LI 90 235 140 235 LI 130 225 130 235 LI 95 225 95 230 LI 95 230 95 235 LI 100 225 100 230 LI 100 230 100 235 LI 105 225 105 230 LI 105 230 105 235 LI 110 225 110 230 LI 110 230 110 235 LI 115 225 115 230 LI 115 230 115 235 LI 120 225 120 235 LI 125 225 125 230 LI 125 230 125 235 LI 85 225 90 225 LI 85 235 85 225 LI 90 225 130 225 PL 30 245 75 245 2 PL 85 245 130 245 2 LI 20 255 150 255 PL 25 265 30 265 2 PL 75 265 85 265 2 PL 130 265 140 265 2 PL 30 265 30 245 2 PL 75 245 75 265 2 PL 85 265 85 245 2 PL 130 245 130 265 2 TY 35 220 6 3 0 0 0 * 0 TY 40 220 6 3 0 0 0 * 1 TY 45 220 6 3 0 0 0 * 2 TY 50 220 6 3 0 0 0 * 3 TY 55 220 6 3 0 0 0 * 4 TY 60 220 6 3 0 0 0 * 5 TY 65 220 6 3 0 0 0 * 6 TY 70 220 6 3 0 0 0 * 7 TY 75 225 6 3 90 0 0 * Stop TY 30 225 6 3 90 0 0 * Start TY 80 225 6 3 90 0 0 * Stop TY 15 245 6 3 0 0 0 * Tx PL 25 300 30 300 2 PL 75 300 85 300 2 PL 130 300 140 300 2 PL 30 300 30 280 2 PL 85 300 85 280 2 TY 15 280 6 3 0 0 0 * Rx PL 30 280 50 280 2 PL 75 290 75 300 2 PL 50 280 50 290 2 PL 50 290 75 290 2 LI 50 280 55 280 LI 55 280 75 280 LI 75 280 75 290 PL 130 290 130 300 2 LI 110 280 130 280 LI 130 280 130 290 PL 120 280 120 290 2 PL 120 290 130 290 2 LI 20 290 150 290 PL 85 280 120 280 2 TY 35 275 6 3 0 0 0 * 0 TY 40 275 6 3 0 0 0 * 0 TY 45 275 6 3 0 0 0 * 0 TY 50 275 6 3 0 0 0 * 1 TY 55 275 6 3 0 0 0 * 1 TY 60 275 6 3 0 0 0 * 1 TY 65 275 6 3 0 0 0 * 1 TY 70 275 6 3 0 0 0 * 1 TY 125 275 6 3 0 0 0 * 1 TY 120 275 6 3 0 0 0 * 1 TY 115 275 6 3 0 0 0 * 1 TY 110 275 6 3 0 0 0 * 0 TY 105 275 6 3 0 0 0 * 0 TY 100 275 6 3 0 0 0 * 0 TY 95 275 6 3 0 0 0 * 0 TY 90 275 6 3 0 0 0 * 0 TY 45 260 6 3 0 0 0 * 0x00 TY 100 295 6 3 0 0 0 * 0xE0 TY 45 295 6 3 0 0 0 * 0xF8 TY 100 260 6 3 0 0 0 * 0x00 TY 120 45 6 3 0 0 0 * Monostabile

Piccio.

Reply to
Piccio
Loading thread data ...

Imprecavo contro il nuovissimo ordinamento quando Piccio ha detto :

te lo farei io ma sto troppo incasinato e non dovrei neanche prendermi il tempo per rispondere sul NG :D ma posso darti un consiglio: Java. Per applicazioni di questo tipo va benissimo, sviluppi l'interfaccia grafica (netbeans) in 10minuti e il codice lo usi dove ti pare.

--
N1 under...
ZX-6r '04 Cocci & Dolori
R6 '06 *********
CRe 250 '99 Almost Glue
XS 400 "90" Nescafè Racer
Reply to
N1

Ehm...

1)Vieni a farti un giro quassù che stiamo freschi.

2)Se usi anche la parità c'hai un livello in più (se riesci a forzare la lettura del dato nonostante l'errore di parità).

3)Ma non dovrebbe essere riferito tutto al -15V (preso da un opportuna linea ausiliaria forzata bassa)?

4)Perchè hai messo il transistor? non è sufficiente il diodo+resistenza ed il condensatore?

Buon weekend

Pasu

Reply to
Pasu

L'idea mi pare molto carina. Sarebbe bello avere pi=F9 di 8 stati, per esempio distorcendo con questa tecnica due simboli consecutivi, ma temo che cos=EC non si possa fare con circuiti minimalisti come quello proposto. Ho un'unica perplessit=E0 a riguardo del fatto che il livello logico 1 viene segnalato dal transistor che chiude verso massa l'uscita, invece di mandarla ad una tensione negativa. Basta perch=E9 venga riconosciuto?

Per quanto riguarda il programma applicativo, credo che basti un emulatore di terminale per fare qualche prova. Per chi abbia ambizioni pi=F9 complesse, sostengo anch'io l'idea dell'usare Java, dato che non tutti utilizzano Windows ed =E8 un metodo efficiente per ottenere programmi multipiattaforma (vedi FidoCadJ).

Reply to
Darwin

Capisco...

Questa =E8 un'ottima idea! :)

la

Fa caldo...

In realt=E0 misuro solo una resistenza. Forse una seconda resistenza collegata ad una fonte esterna darebbe un contributo sulla carica del condensatore realizzando un vero e proprio A/D (mi scappa da ridere).

za

No. Provato. Ci speravo.

Ne ho bisogno!

Piccio.

Reply to
Piccio

Lo temo anch'io, ma ci sto lavorando.

S=EC, almeno empiricamente 10 volte su 10.

Mi sono scaricato "Simple Term Gold" (shareware che dura 15 min a sessione) e funziona alla grande!

Non arrivo fino a l=EC, sigh! :(

Ciao. Piccio.

Reply to
Piccio

Un bel giorno Darwin digitò:

Da standard no (mi pare che le soglie dovrebbero essere +3V e -3V), ma empiricamente non ho mai trovato una porta RS232 che "schifi" gli 0V, che vengono sempre considerati livello "1". In pratica questo circuito funziona sempre, e se devi solo trasmettere verso il PC ti permette di non mettere nessun traslatore TTL-RS232:

[FIDOCAD] MC 80 80 0 0 300 MC 95 90 0 0 040 MC 95 50 1 0 080 MC 95 50 3 0 010 TY 75 35 5 3 0 0 0 * 5V (o anche 3V) LI 95 60 95 70 LI 95 65 125 65 SA 95 65 MC 125 65 0 0 073 TY 125 70 5 3 0 0 0 * RS232 LI 65 80 80 80 MC 35 80 0 0 073 TY 35 85 5 3 0 0 0 * TTL MC 65 80 2 0 080 LI 45 80 55 80 TY 55 85 5 3 0 0 0 * 1k TY 100 50 5 3 0 0 0 * 1k
--
emboliaschizoide.splinder.com
Reply to
dalai lamah

Conscio delle conseguenze, dalai lamah un bel dì scrisse:

Sono +12 e -12

Io invece le ho trovate, soprattutto sui portatili.

--
Modem: Monumentally Overpriced Data Eating Machine 
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy -
http://www.socket2000.com ]
Reply to
Due di Picche

Due di Picche ha scritto:

No, sono proprio +3V e -3V, vedi:

formatting link

Marco

Reply to
Marco Trapanese

Conscio delle conseguenze, Marco Trapanese un bel dì scrisse:

Vero, m'ero perso "soglia"...

--
Don't let the computer bugs bite!
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy -
http://www.socket2000.com ]
Reply to
Due di Picche

Il giorno Sat, 22 Aug 2009 10:21:18 +0200, Marco Trapanese ha scritto:

Burocraticamente è vero, ma in molti receivers c'è solo un diodo che serve per proteggere il transistore d'ingresso dalla tensione negativa.

Qui:

formatting link

si vede bene che il circuito d'ingresso può benissimo funzionare senza tensione negativa, dal momento che viene eliminata dal diodo in ingresso.

Poi magari qualche ic è fatto in modo diverso, ma MC1489 è lo standard per RS232 da molti anni.

-- ciao Stefano

Reply to
SB

Un bel giorno Due di Picche digitò:

Come ti hanno già detto lo standard impone di trasmettere ±12V, ma impone anche di ricevere ±3V. Aggiungo che gran parte dei transceiver alimentati a

3.3V (MAX3232 e suoi cloni) arrivano a malapena a generare segnali a ±9V, quindi non aderiscono completamente allo standard. Fra l'altro questi transceiver riconoscono gli 0V "by design", tanto è vero che gli ingressi sono collegati internamente a massa con un pull-down per simulare un "1".

Chiaramente questo è un accrocchio che va bene per qualcosa di autocostruito, poi sono d'accordo con te che per un dispositivo commerciale sia sempre meglio mettere un transceiver, anche per altri motivi. Anzi, per un dispositivo commerciale è sempre meglio non usare del tutto la RS232. :)

--
emboliaschizoide.splinder.com
Reply to
dalai lamah

Anche qui...

Allora, ho montato il circuitello su un ritaglio di millefori. Mi pare che funzioni perfettamente anche con il mio convertitore USB/RS232 Keyspan (sono sotto MacOSX). Molto divertente! Per adesso, ho provato ad usare un emulatore di terminale. Se ho tempo scriver=F2 qualcosina in Java, ma sembra che l'accesso alla RS232 non sia facile da realizzare in maniera multipiattaforma. Se qualcuno ha esperienza in merito, sono in ascolto...

Reply to
Darwin

Conscio delle conseguenze, Piccio un bel dì scrisse:

HINT: utilizzare DTR per l'uscita e CTS per l'input. Il software conterà il tempo tra la generazione dell'impulso e lo scatto del monostabile. In questo modo si può aumentare di parecchio la risoluzione.

--
God is real, unless declared integer.
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy -
http://www.socket2000.com ]
Reply to
Due di Picche

la

Il mio tentativo era di slegare l'acquisizione da temporizzazioni non sempre facili da gestire, soprattutto sotto XP e simili. La game-port funziona(va) proprio con dei monostabili, tra le altre cose, ma il software poteva accedere direttamente alla porta senza dover sottostare troppo a politiche di sistema operativo.

Ciao. Piccio.

Reply to
Piccio

Sent=ECti ringraziamenti :) Adesso sto preparando la versione lusso che dovrebbe aumentare la risoluzione ad un numero quasi virtuale di bit! Sempre a BJT e sporcizia elettronica che tutti abbiamo nel cassetto, ovviamente! :)

Ciao. Piccio.

Reply to
Piccio

L'articolo di wikipedia fa un po' di confusione fra soglie, livelli minimi riconosciuti, isteresi...

Lo standard 232C specificava i livelli minimi di riconoscimento (in pratica le Vih e Vil) a +/-3V. La soglia deve quindi essere li` in mezzo, da qualche parte.

Se il circuito fosse simmetrico, sarebbe opportuno mettere la soglia in mezzo all'intervallo, per massimizzare la tolleranza al rumore. Ma visto comunque che gli intervalli di tensione sono ampi, per motivi essenzialmente di costo, la soglia in ricezione viene messa dalle parti di uno o due volt.

Sempre lo stesso articolo sembra dire che i ricevitori abbiano una isteresi, cosa che non ho mai visto e che non mi pare ci sia nello standard.

Gli ultimi standard (f, g?) hanno abbassato i livelli che il tx deve emettere (quelli che normalmente si chiamano Voh Vol), in modo da accettare anche segnali trasmessi a +/- 5V.

--

Franco

Wovon man nicht sprechen kann, darüber muß man schweigen.
(L. Wittgenstein)
Reply to
Franco

Ma di nulla, =E8 divertente.

Sar=E0 ancora pi=F9 divertente :-)

Ad ogni modo, ho provato a documentarmi un po' per quanto riguarda RS232 Java e la situazione non =E8 proprio simpatica. Sun mette a disposizione le estensioni Javacomm, che per=F2 non sono disponibili per Windows, e neppure per MacOSX:

formatting link
Esiste la libreria rxtx, che =E8 molto interessante:
formatting link
Ma i miei tentativi di installazione sotto MacOSX mi hanno fatto ricordare perch=E9 ho scelto di essere un elettronico e non un informatico.

Con lo scopo di occupare la serata, ho abbandonato Java e scritto un programmino in C che dovrebbe girare bene sui sistemi Posix (quindi MacOSX e Linux). Non ho idea se c'=E8 la possibilit=E0 di farlo andare anche su Windows con Cygwin, ma comunque l'interfaccia =E8 solo a linea di comando. Mi spiace per gli amici che usano Windows, ma =E8 davvero semplice accedere alla RS232 con Linux e d'altronde non avrei la possibilit=E0 di fare altrimenti. Il programma apre la seriale, manda in continuazione il carattere 0x00 e mostra a schermo una barra proporzionale alla posizione del potenziometro nel circuito di Piccio. Sarebbe una banalit=E0 modificarlo perch=E9 faccia qualcos'altro, tipo fare un log su file o simile. Per la compilazione, ho usato il classico gcc e non ho neppure usato make perch=E9 il programma =E8 un file minuscolo da una settantina di righe. Mi =E8 stato utile questo tutorial, molto chiaro:

formatting link
Eccolo qui (alla fine, seguono informazioni su come compilare):

/* PSADC - Written by Davide Bucci, August 22, 2009

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see

*/

#include #include #include

int main(int argc, char **argv) { int fd; int res; int v; struct termios tio; char buf[1];

printf("\nPSADC - Piccio's Super Analog Device Converter, v.

0.1\n"); printf("Written by Davide Bucci, August 2009\n");

if (argc0) printf("****");

fflush(stdout); } close (fd); }

Per compilare, basta semplicemente lanciare gcc (supponiamo che il file sorgente si chiami rs232_piccio.c): $ gcc rs232_piccio.c -o psadc dove il dollaro rappresenta il prompt della vostra shell. Per utilizzare il programma, ammesso che la compilazione sia andata a buon fine, basta lanciarlo, specificando quale dispositivo utilizzare come porta seriale. Ecco la linea di comando che uso io: $ ./psadc /dev/tty.USA19Hb2P1.1 Dove /dev/tty.USA19Hb2P1.1 =E8 il nome di sistema del mio convertitore USB/RS232, facile da trovare dando un'occhiata in /dev. Molti utenti Linux potrebbero trovarsi a lanciare il programma con linee del tipo: $ psadc /dev/ttyS0 oppure $ psadc /dev/ttyS1 A seconda di dove hanno collegato il convertitore. Spero sia utile a qualcuno.

Reply to
Darwin

Dimenticavo: occhio al vostro newsreader, se spezza le righe del listato!

Reply to
Darwin

Aggiungo un paio di considerazioni su aspetti da migliorare del programma:

- il loop in cui viene effettuata la comunicazione occupa in maniera inutile il processore. Sarebbe pi=F9 razionare fare in modo che il programma si metta in pausa quando un carattere non =E8 ancora disponibile sulla porta seriale, invece di fare un polling matto e disperatissimo.

- forse sarebbe meglio scrivere "Analog to Digital Converter" in vece del nome vagamente pubblicitario che ho lasciato nel sorgente... Sar=E0 perch=E9 nel loro catalogo ci sono ottimi convertitori?

Reply to
Darwin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.