VERO A/D converter per RS232 a discreti (7 BJT) by Piccio

Come promesso, pubblico lo schema del promesso A/D per seriale a discreti (circa 31 componenti). Accetta una tensione in ingresso tra 0 e qualche volt, ma nulla vieta di cambiare valori per estendere o stringere il range. La massa =E8 in comune col PC e l'ingresso ha un'impedenza abbastanza elevata.

In pratica, inviando una sequenza (una decina) di 0x00 scarico C1 tramite il timer Q6, Q7 e preparo il circuito al campionamento. Inviando un numero contato di 0xFF genero una rampa a gradini per mezzo del generatore di corrente Q1 e lo stesso C1. Gli start-bit fungono da impulsi per i gradini. Q2 e Q3 costituiscono un comparatore senza isteresi in grado di apprezzare la differenza tra la carica di C1 e la tensione Vi da campionare. Q4 polarizza correttamente Q2 e Q3 indipendentemente dalla tensione negativa della seriale.

Quando la rampa su C1 =E8 inferiore alla Vi, i codici 0xFF uscenti dal Tx ricompaiono sull'Rx per mezzo di Q5. Una volta superata tale tensione, cessa il passaggio. Quando i valori si approssimano i codici uscenti non sono bellissimi e potrebbe essere rilevato un qualche errore di ricezione, ma poco importa perch=E9 a noi interessa il numero di codici rientrati e non il loro valore.

Ammettiamo di emettere 256 codici e di vederne rientrare solo 100; il nostro valore di tensione sar=E0 proporzionale a quei 100.

L'ho provato connesso al PC e misurando con l'oscilloscopio, senza software. Sembra funzionare, ma alle 03:40 di notte mi riservo ogni bollettino. :)

[FIDOCAD] MC 65 55 1 0 200 MC 65 70 1 0 200 MC 65 130 0 0 040 MC 70 90 0 0 310 MC 85 120 0 0 180 MC 65 105 1 0 080 LI 65 85 65 90 LI 65 90 65 105 LI 65 115 65 120 LI 65 120 65 130 LI 85 120 85 115 LI 70 90 65 90 LI 85 50 65 50 LI 65 50 65 55 SA 65 90 MC 85 60 1 0 080 LI 85 60 85 50 LI 85 80 85 70 MC 110 115 0 0 300 MC 170 115 0 1 300 LI 125 125 155 125 LI 110 115 85 115 SA 85 115 SA 65 50 SA 140 125 MC 125 70 1 0 200 LI 85 50 90 50 LI 90 50 125 50 LI 125 50 125 70 LI 125 85 125 90 LI 125 90 125 105 MC 15 50 2 0 000 MC 155 80 1 0 080 MC 140 55 1 0 080 MC 155 65 3 0 310 LI 125 50 145 50 LI 165 50 185 50 LI 155 70 140 70 LI 140 70 140 65 LI 140 55 140 50 LI 155 65 155 80 LI 155 90 155 95 LI 155 95 155 105 SA 85 50 SA 125 50 SA 140 50 SA 155 70 MC 185 50 0 0 000 MC 185 115 0 0 000 MC 185 130 0 0 040 MC 185 130 0 0 000 LI 170 115 185 115 TY 195 120 5 3 0 0 0 * Vi MC 190 125 3 0 074 TY 130 55 5 3 0 0 0 * R3 TY 127 60 5 3 0 0 0 * 8K2 TY 88 83 5 3 0 0 0 * Q1 TY 127 107 5 3 0 0 0 * Q2 TY 146 107 5 3 0 0 0 * Q3 TY 158 80 5 3 0 0 0 * R4 TY 158 85 5 3 0 0 0 * 22K TY 88 60 5 3 0 0 0 * R2 TY 88 65 5 3 0 0 0 * 680R TY 49 110 5 3 0 0 0 * 100K TY 56 105 5 3 0 0 0 * R1 MC 85 130 0 0 040 TY 89 120 5 3 0 0 0 * C1 TY 89 125 5 3 0 0 0 * 10uF TY 3 41 5 3 0 0 0 * Tx(3) TY 68 61 5 3 0 0 0 * D2 TY 68 76 5 3 0 0 0 * D3 TY 128 75 5 3 0 0 0 * D5 TY 88 106 5 3 0 0 0 * D4 TY 152 42 5 3 0 0 0 * Q5 TY 182 42 5 3 0 0 0 * Rx(2) LI 60 50 65 50 MC 45 50 0 0 200 LI 45 50 15 50 SA 40 50 TY 50 42 5 3 0 0 0 * D1 MC 140 210 2 0 180 LI 140 200 140 190 SA 140 195 MC 120 175 1 0 200 MC 120 160 1 0 200 MC 125 155 0 0 300 MC 140 175 1 0 080 LI 140 145 140 140 LI 120 160 120 155 MC 115 195 2 0 200 MC 110 155 2 0 080 LI 110 155 125 155 LI 100 155 90 155 LI 90 155 90 195 LI 120 190 120 195 LI 115 195 140 195 LI 140 165 140 170 LI 140 170 140 175 LI 140 190 140 185 SA 120 155 SA 120 195 SA 90 195 TY 142 147 5 3 0 0 0 * Q4 TY 143 175 5 3 0 0 0 * R6 TY 143 180 5 3 0 0 0 * 2K2 TY 143 200 5 3 0 0 0 * C2 TY 143 205 5 3 0 0 0 * 100uF TY 102 148 5 3 0 0 0 * R5 TY 99 158 5 3 0 0 0 * 220K TY 104 187 5 3 0 0 0 * D8 TY 123 181 5 3 0 0 0 * D7 LI 100 195 40 195 LI 140 140 140 125 LI 40 195 40 50 MC 85 100 1 0 200 MC 140 210 0 0 040 MC 65 220 1 0 200 MC 65 235 1 0 200 MC 70 255 0 0 310 MC 65 270 1 0 080 LI 65 250 65 255 LI 65 255 65 270 LI 70 255 65 255 LI 65 215 65 220 SA 65 255 MC 85 225 1 0 080 LI 85 225 85 215 LI 85 245 85 235 TY 88 248 5 3 0 0 0 * Q6 TY 88 225 5 3 0 0 0 * R7 TY 68 241 5 3 0 0 0 * D10 MC 105 245 3 0 200 LI 105 230 105 215 LI 105 215 65 215 LI 65 215 40 215 LI 40 215 40 195 SA 40 195 SA 65 215 SA 85 215 TY 123 166 5 3 0 0 0 * D6 TY 68 226 5 3 0 0 0 * D9 TY 109 235 5 3 0 0 0 * D11 TY 49 275 5 3 0 0 0 * 150K TY 55 270 5 3 0 0 0 * R8 TY 88 230 5 3 0 0 0 * 5K6 TY 87 257 5 3 0 0 0 * BC556B TY 88 91 5 3 0 0 0 * BC556B LI 165 140 105 140 LI 105 140 105 115 SA 105 115 LI 105 245 105 265 LI 105 265 85 265 MC 85 305 0 0 040 MC 85 290 1 0 170 TY 88 291 5 3 0 0 0 * C1 LI 85 290 85 280 LI 85 305 85 300 MC 85 270 1 0 080 MC 65 305 0 0 040 LI 65 280 65 305 LI 85 270 85 265 SA 85 265 SA 85 285 MC 150 265 0 0 300 LI 140 265 150 265 MC 140 305 0 0 040 TY 144 298 5 3 0 0 0 * 4V7 TY 144 294 5 3 0 0 0 * DZ1 MC 165 305 0 0 040 LI 165 275 165 305 MC 140 290 1 0 230 MC 140 290 3 0 200 TY 144 277 5 3 0 0 0 * D12 LI 140 275 140 265 LI 165 255 165 140 LI 85 285 120 285 LI 120 265 140 265 LI 120 285 120 265 SA 140 265 TY 89 275 5 3 0 0 0 * 1K0 TY 89 270 5 3 0 0 0 * R9 TY 169 265 5 3 0 0 0 * BC337C TY 169 257 5 3 0 0 0 * Q7 TY 129 118 5 3 0 0 0 * 2 x BC517 TY 144 156 5 3 0 0 0 * BC337C TY 89 297 5 3 0 0 0 * 6n8 TY 215 60 5 3 0 0 0 * - nessuna parit=E0 TY 215 65 5 3 0 0 0 * - 1 stop bit TY 215 55 5 3 0 0 0 * - 8 bit dato TY 215 50 5 3 0 0 0 * - 9600 Baud TY 215 70 5 3 0 0 0 * - no handshake EV 220 100 225 105 EV 230 100 235 105 EV 240 100 245 105 EV 250 100 255 105 EV 225 110 230 115 EV 235 110 240 115 EV 245 110 250 115 EV 255 110 260 115 EV 260 100 265 105 LI 220 95 265 95 LI 260 120 225 120 LI 225 120 215 110 LI 215 110 215 100 LI 215 100 220 95 TY 220 95 6 3 0 1 0 * 1 TY 260 95 6 3 0 1 0 * 5 TY 225 115 6 3 0 1 0 * 6 TY 255 115 6 3 0 1 0 * 9 TY 280 105 6 3 0 1 0 * 3 =3D Tx TY 280 100 6 3 0 1 0 * 2 =3D Rx TY 280 110 6 3 0 1 0 * 5 =3D Gnd TY 215 85 6 3 0 0 0 * DB9 maschio - vista frontale PC LI 270 110 260 120 LI 270 100 270 110 LI 265 95 270 100 TY 40 15 8 4 0 1 0 * A/D Converter per porta seriale TY 40 25 6 3 0 1 0 * by Piccio - Agosto 2009 TY 200 165 5 3 0 0 0 * a) Spedire una sequenza di 0x00 per iniziare la conversione TY 200 175 5 3 0 0 0 * b) Spedire una sequenza di 0xFF TY 200 185 5 3 0 0 0 * c) Contare quanti codici sono rientrati dall'Rx MC 180 65 1 0 080 LI 180 50 180 65 LI 180 75 180 80 LI 180 80 180 90 TY 183 65 5 3 0 0 0 * R10 TY 183 70 5 3 0 0 0 * 10K MC 180 90 0 0 040

Ciao. Piccio.

Reply to
Piccio
Loading thread data ...

Mi sembra molto interessante. Mi riservo di studiare lo schema pi=F9 in dettaglio, ma mi chiedevo se per caso alcuni dei diodi in serie nei vari generatori di corrente non potessero essere sostituiti (eventualmente, ritoccando un poco i valori delle resistenze sull'emettitore) da un solo diodo led rosso, che dovrebbe tra l'altro compensare meglio la deriva termica della giunzione del transistor. Per il resto, mi sembra un sistema interessante ed economico per effettuare una conversione di un segnale che varia lentamente, come quello di un sensore di temperatura. Se ho un po' di tempo, prover=F2 a scrivere due righe di software nei prossimi giorni e fare qualche prova.

Reply to
Darwin

S=EC. Ho usato degli 1N4148 per sfruttare meglio il range di tensione di seriali poco "serie". :)

Ci conto! :))))

Sto montando il PCB sviluppato in Fidocad. Se va come mi aspetto lo pubblico entro 2 ore.

Ciao. Piccio.

Reply to
Piccio

On 24 Ago, 16:06, Darwin wrote:

Ecco il PCB:

[FIDOCAD] PA 280 55 14 14 4 0 1 PA 280 135 14 14 4 0 1 RV 290 70 270 120 3 RP 282 55 278 70 3 RP 282 120 278 135 3 LI 283 177 248 177 3 BE 283 177 301 132 229 132 248 177 3 PA 275 165 14 14 6 0 1 PA 255 165 14 14 6 0 1 PA 265 150 14 14 6 0 1 LI 286 166 245 166 3 PA 255 135 14 14 6 2 1 RP 253 135 257 125 3 RP 245 115 265 120 3 PA 255 75 14 14 6 0 1 RV 245 125 265 85 3 RP 253 85 257 75 3 PL 205 115 205 95 8 1 PL 205 95 230 70 8 1 PL 230 70 230 55 8 1 PA 230 115 14 14 6 2 1 RP 228 115 232 105 3 RP 220 95 240 100 3 PA 230 55 14 14 6 0 1 RV 220 105 240 65 3 RP 228 65 232 55 3 PL 230 115 255 90 8 1 PL 255 90 255 75 8 1 PL 255 135 255 140 8 1 PL 255 140 265 150 8 1 PL 230 55 280 55 8 1 PL 275 165 280 160 8 1 PL 280 160 280 135 8 1 PL 255 165 250 165 8 1 PL 250 165 245 165 8 1 PL 245 165 230 150 8 1 PL 230 150 230 135 8 1 PL 255 135 255 125 8 1 PL 255 125 265 115 8 1 PL 265 115 290 115 8 1 PL 265 215 300 215 8 1 PL 300 125 300 135 8 1 PL 300 125 290 115 8 1 PL 100 135 100 140 8 1 PL 100 140 110 150 8 1 PL 100 135 100 130 8 1 PL 120 165 125 160 8 1 PL 125 160 125 135 8 1 PA 75 115 14 14 6 2 1 RP 73 115 77 105 3 RP 65 95 85 100 3 PA 75 55 14 14 6 0 1 RV 65 105 85 65 3 RP 73 65 77 55 3 PL 75 115 100 90 8 1 PL 100 90 100 75 8 1 PL 50 55 125 55 8 1 PA 50 135 14 14 4 0 1 PA 50 215 14 14 4 0 1 RV 60 150 40 200 3 RP 52 135 48 150 3 RP 52 200 48 215 3 PA 50 55 14 14 6 2 1 RP 52 55 48 65 3 RP 60 75 40 70 3 PA 50 115 14 14 6 0 1 RV 60 65 40 105 3 RP 52 105 48 115 3 LI 128 177 93 177 3 BE 128 177 146 132 74 132 93 177 3 PA 120 165 14 14 6 0 1 PA 100 165 14 14 6 0 1 PA 110 150 14 14 6 0 1 LI 131 166 90 166 3 PL 50 115 50 135 8 1 PL 50 135 80 165 8 1 PL 80 165 100 165 8 1 PL 50 215 80 185 8 1 PA 125 55 14 14 4 0 1 PA 125 135 14 14 4 0 1 RV 135 70 115 120 3 RP 127 55 123 70 3 RP 127 120 123 135 3 PL 125 55 205 55 8 1 PA 230 195 14 14 6 2 1 RP 228 195 232 185 3 RP 220 175 240 180 3 PA 230 135 14 14 6 0 1 RV 220 185 240 145 3 RP 228 145 232 135 3 PA 75 135 14 14 4 0 1 PA 75 215 14 14 4 0 1 RV 85 150 65 200 3 RP 77 135 73 150 3 RP 77 200 73 215 3 PL 100 200 100 215 8 1 PL 75 135 100 135 8 1 PL 75 215 165 215 8 1 PA 300 135 14 14 4 0 1 PA 300 215 14 14 4 0 1 RV 310 150 290 200 3 RP 302 135 298 150 3 RP 302 200 298 215 3 PL 140 200 140 185 8 1 PL 80 185 140 185 8 1 PA 100 200 12 12 4 0 1 PA 140 200 12 12 4 0 1 RV 90 180 150 220 3 PL 140 185 165 185 8 1 PL 165 185 175 195 8 1 PL 210 175 230 195 8 1 PL 190 175 210 175 8 1 PL 165 215 190 215 8 1 PL 190 215 265 215 8 1 PA 265 190 12 12 4 2 1 PA 265 210 12 12 4 0 1 EV 245 180 285 220 3 TY 247 170 15 9 0 1 3 * + PL 230 195 240 195 8 1 PL 240 195 245 190 8 1 PL 245 190 265 190 8 1 PL 175 195 205 195 8 1 PA 190 215 14 14 6 0 1 PA 190 175 14 14 6 0 1 PA 210 195 14 14 6 0 1 LI 178 213 178 178 3 BE 178 213 223 231 223 159 178 178 3 LI 189 216 189 175 3 PA 165 215 14 14 6 2 1 RP 163 215 167 205 3 RP 155 195 175 200 3 PA 165 155 14 14 6 0 1 RV 155 205 175 165 3 RP 163 165 167 155 3 PA 165 75 14 14 6 2 1 RP 167 75 163 85 3 RP 175 95 155 90 3 PA 165 135 14 14 6 0 1 RV 175 85 155 125 3 RP 167 125 163 135 3 PL 165 155 165 135 8 1 PL 145 95 165 75 8 1 PL 145 155 145 95 8 1 PL 145 155 140 160 8 1 PL 140 160 140 185 8 1 PA 325 55 14 14 6 2 1 RP 327 55 323 65 3 RP 335 75 315 70 3 PA 325 115 14 14 6 0 1 RP 327 105 323 115 3 PL 325 115 325 155 8 1 PL 325 155 340 170 8 1 PL 350 135 325 135 8 1 PL 325 55 400 55 8 1 PL 300 215 340 215 8 1 PL 205 55 220 40 8 1 PL 220 40 310 40 8 1 PL 310 40 325 55 8 1 PA 400 55 14 14 4 0 1 PA 400 135 14 14 4 0 1 RV 410 70 390 120 3 RP 402 55 398 70 3 RP 402 120 398 135 3 PA 350 135 14 14 6 2 1 RP 348 135 352 125 3 RP 340 115 360 120 3 PA 350 75 14 14 6 0 1 RV 340 125 360 85 3 RP 348 85 352 75 3 PA 375 75 14 14 6 2 1 RP 377 75 373 85 3 RP 385 95 365 90 3 PA 375 135 14 14 6 0 1 RV 385 85 365 125 3 RP 377 125 373 135 3 PA 325 155 14 14 4 0 1 PA 405 155 14 14 4 0 1 RV 340 145 390 165 3 RP 325 153 340 157 3 RP 390 153 405 157 3 PL 375 135 400 135 8 1 PL 350 75 375 75 8 1 PL 375 160 375 135 8 1 PL 280 55 325 95 8 1 PL 340 170 340 175 8 1 PL 370 195 370 190 8 1 PL 370 190 370 165 8 1 PL 370 165 375 160 8 1 PL 390 175 390 170 8 1 PL 390 170 390 160 8 1 PL 390 160 395 155 8 1 PL 395 155 405 155 8 1 PL 265 190 325 190 8 1 PL 325 190 335 190 8 1 PL 335 190 340 190 8 1 PL 340 190 360 210 8 1 PL 360 210 375 210 8 1 PL 375 210 385 200 8 1 PL 385 200 390 195 8 1 PL 325 95 455 95 8 1 PA 430 115 14 14 6 2 1 RP 428 115 432 105 3 RP 420 95 440 100 3 PA 430 55 14 14 6 0 1 RV 420 105 440 65 3 RP 428 65 432 55 3 LI 443 103 443 68 3 BE 443 103 488 121 488 49 443 68 3 PA 455 95 14 14 6 0 1 PA 455 75 14 14 6 0 1 PA 470 85 14 14 6 0 1 LI 454 106 454 65 3 PL 480 125 490 135 8 1 PL 470 85 470 90 8 1 PL 470 90 470 125 8 1 PL 430 55 490 55 8 1 PL 455 75 460 70 8 1 PL 430 55 430 95 8 1 PL 400 55 415 40 8 1 PL 415 40 510 40 8 1 PL 510 40 525 55 8 1 PL 525 55 540 55 8 1 PL 495 75 540 75 8 1 PL 490 70 495 75 8 1 PL 460 70 490 70 8 1 PA 490 55 14 14 4 0 1 PA 490 135 14 14 4 0 1 RV 500 70 480 120 3 RP 492 55 488 70 3 RP 492 120 488 135 3 PA 515 95 14 14 4 0 1 PA 515 175 14 14 4 0 1 RP 517 95 513 110 3 RP 517 160 513 175 3 PL 515 175 540 175 8 1 PL 515 95 515 75 8 1 PL 515 175 515 180 8 1 PL 515 180 515 210 8 1 PL 515 210 540 210 8 1 PA 540 175 16 16 6 0 1 PA 540 150 16 16 6 0 1 PA 540 75 16 16 6 0 1 PA 540 55 16 16 6 0 1 PA 540 210 16 16 6 0 1 PA 205 115 14 14 6 2 1 RP 203 115 207 105 3 RP 195 95 215 100 3 PA 205 55 14 14 6 0 1 RV 195 105 215 65 3 RP 203 65 207 55 3 TY 197 74 15 8 0 0 3 Lucida++Console D1 TY 222 74 15 8 0 0 3 Lucida++Console D2 TY 247 92 15 8 0 0 3 Lucida++Console D3 TY 222 153 15 8 0 0 3 Lucida++Console D4 TY 422 74 15 8 0 0 3 Lucida++Console D5 TY 367 101 15 8 0 0 3 Lucida++Console D6 TY 342 93 15 8 0 0 3 Lucida++Console D7 TY 317 81 15 8 0 0 3 Lucida++Console D8 TY 67 74 15 8 0 0 3 Lucida++Console D9 TY 58 78 15 8 270 0 3 Lucida++Console D11 PA 100 130 14 14 6 2 1 RP 98 130 102 120 3 RP 90 110 110 115 3 PA 100 70 14 14 6 0 1 RV 90 120 110 80 3 RP 98 80 102 70 3 TY 107 83 15 8 270 0 3 Lucida++Console D10 TY 173 99 15 8 270 0 3 Lucida++Console D12 TY 171 167 15 8 270 0 3 Lucida++Console DZ1 TY 292 166 15 8 0 0 3 Lucida++Console R1 TY 272 88 15 8 0 0 3 Lucida++Console R2 TY 482 89 15 8 0 0 3 Lucida++Console R3 TY 392 89 15 8 0 0 3 Lucida++Console R5 TY 356 148 15 8 0 0 3 Lucida++Console R6 TY 117 88 15 8 0 0 3 Lucida++Console R7 TY 67 168 15 8 0 0 3 Lucida++Console R8 TY 42 168 15 8 0 0 3 Lucida++Console R9 TY 523 123 15 8 270 0 3 Lucida++Console R10 TY 247 192 15 8 0 0 3 Lucida++Console C1 TY 332 188 15 8 0 0 3 Lucida++Console C2 TY 112 192 15 8 0 0 3 Lucida++Console C3 TY 242 139 15 8 0 0 3 Lucida++Console Q1 TY 473 158 15 8 0 0 3 Lucida++Console Q3 PA 340 215 12 12 4 2 1 PA 340 175 12 12 4 0 1 EV 360 215 320 175 3 TY 365 222 15 9 180 1 3 * + PA 390 175 14 14 6 0 1 PA 390 215 14 14 6 0 1 PA 370 195 14 14 6 0 1 LI 402 177 402 212 3 BE 402 177 357 159 357 231 402 212 3 LI 391 174 391 215 3 TY 447 49 15 8 0 0 3 Lucida++Console Q5 TY 380 187 15 8 0 0 3 Lucida++Console Q4 TY 86 138 15 8 0 0 3 Lucida++Console Q6 TY 183 187 15 8 0 0 3 Lucida++Console Q7 RV 35 30 565 240 1 TY 548 47 15 8 0 0 3 Lucida++Console Tx TY 549 67 15 8 0 0 3 Lucida++Console Rx TY 548 142 15 8 0 0 3 Lucida++Console Vi TY 539 216 15 8 0 0 3 Lucida++Console Gnd TY 539 180 15 8 0 0 3 Lucida++Console Gnd TY 179 32 15 8 0 4 1 Lucida++Console Piccio Ago.'09 RV 35 30 565 240 3 RV 335 65 315 105 3 PL 390 195 440 195 8 1 PL 420 175 420 165 8 1 PL 420 165 430 155 8 1 PL 430 155 430 115 8 1 PL 360 235 490 235 8 1 PL 515 210 490 235 8 1 PL 340 215 360 235 8 1 RV 525 110 505 160 3 PA 420 215 14 14 6 0 1 PA 420 175 14 14 6 0 1 PA 440 195 14 14 6 0 1 LI 408 213 408 178 3 BE 408 213 453 231 453 159 408 178 3 LI 419 216 419 175 3 PA 455 125 14 14 4 0 1 PA 455 205 14 14 4 0 1 RV 465 140 445 190 3 RP 457 125 453 140 3 RP 457 190 453 205 3 PL 390 215 420 215 8 1 PL 420 215 435 215 8 1 PL 435 215 440 220 8 1 PL 440 220 465 220 8 1 PL 465 220 470 215 8 1 PL 470 215 480 215 8 1 PL 500 195 500 190 8 1 PL 500 190 500 185 8 1 PL 500 185 495 180 8 1 PL 495 180 495 165 8 1 PL 495 165 510 150 8 1 PL 510 150 540 150 8 1 PL 455 205 480 180 8 1 PL 480 180 480 175 8 1 PL 480 125 455 125 8 1 PA 480 215 14 14 6 0 1 PA 480 175 14 14 6 0 1 PA 500 195 14 14 6 0 1 LI 468 213 468 178 3 BE 468 213 513 231 513 159 468 178 3 LI 479 216 479 175 3 TY 429 172 15 8 0 0 3 Lucida++Console Q2 TY 447 157 15 8 0 0 3 Lucida++Console R4

Piccio.

Reply to
Piccio

Allora, nella speranza di aver capito come funziona il protocollo, ho provato a scrivere un programmino in C che permetta di leggere e mostrare a schermo (su console) il risultato della conversione. Come nel caso del programma presentato per il convertitore pi=F9 semplice, dovrebbe funzionare adeguatamente su ogni sistema POSIX. Io l'ho provato su MacOSX, ma dovrebbe andare benone anche su Linux. Il vantaggio di questa situazione =E8 che non =E8 necessaria nessunissima libreria aggiuntiva oltre ad un compilatore standard C, che =E8 quasi universale nei sistemi Unix. Tengo a sottolineare che non ho (ancora) realizzato il circuito e che quindi il programma potrebbe comportare degli errori, ma =E8 comunque un punto di partenza per una conversione ad 8 bit. Piccio, non hai pi=F9 scuse a tirare fuori la tua macchina Linux, soprattutto adesso che non avresti neppure problemi ad usarci FidoCad ;-) Usarvi Python =E8 pure molto semplice. Revenons =E0 nos moutons. Disponendo del compilatore gcc e chiamando il sorgente rs232_piccio_adv.c, la compilazione si effettua con il comando seguente:

$ gcc rs232_piccio_adv.c -o psadc2

($ rappresenta il prompt Bash o della vostra shell preferita). Il programma richiede come argomento il dispositivo seriale da utilizzare. In molti sistemi Linux, il comando da eseguire sar=E0 quindi simile a quanto segue:

$ ./psadc2 /dev/ttyS0

oppure:

$ ./psadc2 /dev/ttyS1

A seconda di quale seriale state utilizzando. Nel mio caso (MacOSX con adattatore USB/seriale), la riga =E8 per esempio la seguente:

$ ./psadc2 /dev/tty.USA19Hb22P1.1

Ecco quindi qui il codice rs232_piccio_adv.c. Attenzione a che il vostro newsreader non spezzi le linee troppo lunghe!

/* PSADC2 - Written by Davide Bucci, August 24, 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; int i; struct termios tio; char buf[1];

printf("\nPSADC2 - Piccio's Super Analog Digital Converter 2, v.

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

if (argc

Reply to
Darwin

SLURP! :)

Infatti. DOmani reinstallo Kubuntu con KDE4 su una macchina decorosa e passo all'azione. Il PCB funziona, ma sto usando per provarlo un programma terminal che all'apparenza =E8 accattivante ma in funzionamento non mi soddisfa. Non ralizza un vero full-duplex; quando comincia a ricevere spezza la trasmissione in modo poco simpatico considerando che sta funzionando su un quad-core! Il risultato sgradito =E8 che spezza la rampa di tensione che utilizzo per il confronto, anche se ci=F2 non pregiudica la misura. Ho osservato che per valori prossimi agli 0V si presenta qualche spike, ma credo in un imminente futuro di poter leggere anche tensioni negative ed il problema sparir=E0 da solo.

Intanto grazie per la preziosa partecipazione.

Ciao. Piccio.

Reply to
Piccio

Credo comunque che il programma possa girare bene anche su macchine non recentissime ed esistono distribuzioni di Linux abbastanza leggere. Ho realizzato il PCB ed ho montato quasi tutto il circuito, solo che mi mancano i BC517. Nei prossimi giorni sar=F2 un po' impegnato e non so quando avr=F2 tempo di provare il convertitore finito, comunque =E8 sulla buona strada.

Reply to
Darwin
[Darwin]
[Piccio] Vanno bene degli NPN qualsiasi a patto che il guadagno sia abbastanza alto (anche BC237). Anche io sono impegnato oltre le aspettative; dal 24 hanno riaperto tutti e non hanno mancato di farmelo sapere... :( Devo terminare il firmware di un emulatore di telecomando IR universale per la maggior parte dei protocolli. E dispongo di poca flash...

Piccio.

Reply to
Piccio

Piccio ha scritto:

Schema interessante. Ricordo che anche i vecchi computer MSX avevano un convertitore A/D da collegare alla porta joystick che se non ricordo male funzionavano all'incirca con lo stesso principio di funzionamento. Lo schema era su una rivista di hobbysti, ma sono passati tanti anni, non ricordo più.

Saluti.

--
Prima di rispondermi devi togliere le dita dal naso!!! :-)
Reply to
Telespalla Bob

Allora, sto facendo qualche prova sul circuito terminato. Mi mancavano i transistor darlington e lo zener da 4,7V, che ho sostituito con tre led in serie (intervengono con circa 5V). Sto facendo le prime prove ed ho qualche perplessit=E0. Premetto che i mark e gli space all'uscita della mia interfaccia USB/ RS232 sono a circa +/- 6 V, la tensione =E8 quindi ben negativa per gli space. Il condensatore C3 (quello da 6,8 nF marcato C1 sullo schema) si carica tramite il generatore di corrente Q6 quando invio 0x00, ma ritorna a scaricarsi tramite D11 per ogni bit di stop che ricevo. In altri termini, la tensione sulla base di Q7 =E8 sempre negativa ed il transistor non scarica mai il condensatore C1 (quello da 10 uF), che =E8 poi ci=F2 che avvia la rampa. Il mio Q6 non un BC556B, ma piuttosto un 2N2907, dato che ne ho in quantit=E0.

Reply to
Darwin

Bon... mi sono accorto che avevo cortocircuitato D10 e che quindi il generatore di corrente formato da Q6 non funzionava a dovere. Adesso va meglio ed il circuito funziona. Il mio programma lavora su 256 valori, gli estremi corrispondenti della tensione in ingresso sono 0 V -- 1,3 V. Ad una prima prova molto rapida, la linearit=E0 mi pare pi=F9 che buona ed essendo un convertitore a rampa non dovrebbero esserci problemi di monotonicit=E0. Ecco la versione messa a punto del programma. Attenzione come al solito ai salti di riga. Se vi servisse il file, scrivetemi in privato (la mail =E8 valida).

/* PSADC2 - Written by Davide Bucci, August 30, 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; int i; struct termios tio; char buf[1];

printf("\nPSADC2 - Piccio's Super Analog Digital Converter 2, v.

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

if (argc

Reply to
Darwin

Scusa l'assenza, ma il lavoro mi ha impedito. Come avrai notato da altri post in IHE-digitale, mi sto ri-attrezzando per il C. Ho sempre lavorato in BASIC, FORTH, PASCAL, ma soprattutto asembler di tante piattaforme e il C =E8 rimasta la mia grande lacuna anche se ne conosco bene i principi e non riveste difficolt=E0 di comprensione. Manca la pratica, cio=E8 solo il 99.99% del lavoro. Mi ero ripromesso di verificare la scheda in QBasic prima di pubblicarla, ma gli strumenti mi davano ragione (abbastanza...). Ho risistemato il Dev-C++ e credo che utilizzer=F2 quello assieme al GCC, utile per la portabilit=E0 con gli AVR, ormai mio cavallo di battaglia.

Rinnovo con encomio la tua collaborazione perch=E9 rende possibile la fruibilit=E0 di appassionati a progettini altrimenti impediti ai singolim, soprattutto per motivi di impegno.

Il mio sforzo era di realizzare una semplice interfaccia gestibile da un software non troppo legato a parametri di difficile gestione e credo di aver compiuto un primo passo; altri ne verranno.

Purtroppo il comparatore Q2-Q3 non permette grandi prestazioni vicino allo 0V ma tipicamente le necessit=E0 portano l'utlizzo a range lontani da tale valore (verifica stato battreria, sonde termiche, ecc.).

Correggo un refuso: il designator C1 =E8 distrattamente duplicato e indicheremo con C3 quello che fa capo a Q6.

Tale sezione circuitale altro non =E8 che un timer basato su C1. Nel momento di non emissione e/o di bit "1", la RS232 presenta un livello negativo (-12V) e carica immediatamente tramite D11-R9 la capacit=E0 C3 fino al livello determinato da DZ1+D12 che, tra l'altro, si compensano termicamente. Se il periodo a +12V (start-bit e/o bit "0") =E8 sufficientemente lungo, Q7 viene portato in conduzione e scarica C2, incaricato della rampa, in modo da poter avviare una nuova conversione. Volendo cambiare baud-rate, occorre cambiare C3 od R7 in modo da riproporre lo stesso effetto. Ora =E8 tarata su 9600 baud, per cui il ritardo =E8 di circa 400uS, indipendenti dai vlori di tensione della porta (da qui l'utilizzo del generatore di corrente per la scarica di C3 e lo zener). Cambiando anche C1, si pu=F2 salire coi bit di risoluzione. D'altro canto, spedendo dei bit a 0 LSB oltre allo start-bit, si accelera il processo di carica della rampa dimezzando i tempi di conversione (e la risoluzione). La fantasia far=E0 il resto. :)

Procedo con l'implemetazione del tuo software. :)

Grazie. Piccio.

Reply to
Piccio

Idem.

Ho visto :-)

Non =E8 tanto difficile ed =E8 un bel linguaggio, molto espressivo. Mi piace perch=E9 mi permette di essere vicino alla macchina quando ce n'=E8 bisogno.

E' divertente occuparsi di queste cose, anche se non sono un softwarista e sono pi=F9 a mio agio fra i circuiti.

Nonostante la RS-232 inizi ormai ad avere sulle spalle 40 anni di onoratissimo servizio e la cosa si fa sentire, si tratta di un sistema di comunicazione semplice da gestire, robusto e non troppo legato alle idiosincrasie del sistema operativo di moda al tal momento.

Per fare qualche prova, questa sera mi sono divertito a fare una piccola sonda termica (vedi sotto) da dimenticare in un angolo della scrivania. Ho misurato il valore fornito per l'acqua ghiacciata (punto di 0=B0) e per l'acqua bollente (punto di 100=B0) ed ho scritto un programmino che mostra la temperatura facendo una regressione lineare. La risoluzione =E8 di poco superiore ad 1=B0C, dato che non posso aspettarmi niente di meglio per quanto riguarda la linearit=E0 della sonda e la precisione del convertitore (che ha una deriva terminca pure lui (mi preoccupa soprattutto D2 che non =E8 compensato). Nel mio prototipo, ottengo una lettura di 190 in acqua ghiacciata e di

102 in acqua bollente. Basta specificare i due valori ed il programma temperature.c far=E0 tutto lui. Ho fatto una tabellina con l'utility Unix cron, che lancia il mio programma ogni 10 minuti e salva l'ora e la temperatura in un file che viene aggiornato ogni 10 minuti.

Ho visto. Non avevo fatto i conti e pensavo che ci volessero diversi byte perch=E9 il condensatore C3 si caricasse, mentre invece avviene ogni volta che viene inviato 0x00.

Appunto.

Bene, fammi sapere.

Ecco lo schemino della sonda:

[FIDOCAD] MC 125 85 1 0 200 FCJ TY 130 90 4 3 0 0 0 * D2 TY 130 95 4 3 0 0 0 * 1N4007 MC 125 100 1 0 200 FCJ TY 130 105 4 3 0 0 0 * D3 TY 130 110 4 3 0 0 0 * 1N4007 LI 125 80 125 85 0 MC 75 60 0 0 200 FCJ TY 80 45 4 3 0 0 0 * D1 TY 80 50 4 3 0 0 0 * 1N4148 MC 125 70 1 0 080 FCJ TY 130 70 4 3 0 0 0 * R1 TY 130 75 4 3 0 0 0 * 100k MC 100 65 0 0 180 FCJ TY 105 65 4 3 0 0 0 * C1 TY 105 70 4 3 0 0 0 * 100u LI 90 60 100 60 0 LI 100 60 100 65 0 LI 100 60 125 60 0 LI 125 60 125 70 0 LI 100 75 100 120 0 LI 100 120 125 120 0 SA 100 60 0 MC 75 60 2 0 000 FCJ TY 45 57 4 3 0 0 0 * a Tx(3) TY 60 45 4 3 0 0 0 * MC 140 85 0 0 000 FCJ TY 150 83 4 3 0 0 0 * a Vin TY 150 90 4 3 0 0 0 * MC 140 120 0 0 000 FCJ TY 150 118 4 3 0 0 0 * a GND TY 150 125 4 3 0 0 0 * LI 125 120 140 120 0 LI 140 85 125 85 0 SA 125 85 0 SA 125 120 0 LI 125 115 125 120 0 TY 60 25 7 4 0 0 0 * Davide Bucci, agosto 2009 TY 50 15 10 5 0 1 0 * Sonda termica per PSADC2

Programma temperature.c:

/* temperature - Written by Davide Bucci, August 30, 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; int i,j; struct termios tio; char buf[1]; double T0; double T100; double alpha; double beta; double temp;

if (argc

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.