Newsgroup: it.hobby.elettronica.digitale
Titolo: Conversione analogico/digitale con PIC senza ADC

Ciao a tutti,
ho la necessità di convertire una tensione analogica determinata da
un trimmer (0-5V) con un PIC senza ADC, in particolare il PIC12C508A.
Non mi servono molti bit, anche 6-7 vanno più che bene.
Il metodo classico credo che sia quello di far caricare un condensatore
con tramite una resistenza variabile (appunto il trimmer).
Il circuito è simile a questo:
[FIDOCAD]
MC 55 40 0 0 600
MC 40 60 1 0 170
MC 40 70 0 0 040
MC 40 50 0 0 116
LI 55 50 40 50
MC 40 40 1 0 080
MC 40 40 3 0 010
Probabilmente la resistenza di valore fisso si può eliminare se si
utilizza un pin del micro che ha un pull-up interno.
Il pin del micro utilizzato è solo un esempio... probabilmente sarà
un altro ingresso.
Il problema è dimensionare il condensatore e le resistenze e scrivere
il software. Immagino che la tecnica sia:
1. si mette il pin in uscita a valore basso
2. si aspetta che il condensatore si scarichi (si legge il valore di
   quel pin anche se in uscita e si aspetta che sia 0)
3. si mette il pin in ingresso
4. si azzera TMR0
5. si aspetta che il pin torni alto
6. si legge il valore di TMR0 da cui si ricava un valore proporzionale
   grossomodo alla costante RC, quindi al valore del trimmer.
Purtroppo utilizzo già, nel firmware, il TMR0 e mi crea qualche problema
utilizzarlo anche per l'acquisizione A/D. Qualcuno ci ha già provato
con successo?

 con successo?
Io ho usato un metodo simile con un altro micro.
L'importante e' usare un ingresso schmitt trigger per leggere
la tensione e stabilizzare e filtrare bene la tensione di alimentazione.
Poi per misurare il tempo puoi usare il sistema che preferisci,
logicamente se usi il timer e' piu' semplice e preciso, ma e' fattibile
anche in polling contando i cicli di un programma. Ciao.
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:151Z30Z34Z200Y...@usenet.libero.it...


Mi basta saperlo a grandi linee
Beh, no di certo.
La precisione è limitata dalla precisione del comparatore, che in una
porta non è sicuramente accurata, e dalla curva di risalita dell RC
che non è lineare.
Quindi ti può dare un idea di dov'è il trimmer con una bassa
precisione, a naso direi 4 0 5 bits.
ciao
  Stefano

 la tensione e stabilizzare e filtrare bene la tensione di alimentazione.
Perché dici che è importante utilizzare un ingresso ST? Purtroppo
il 12F508 ha solo ingressi TTL :((( Però ho già visto dei circuiti in
cui questa tecnica è utilizzata proprio con il 12F508.


 
Perche gli ingressi ST hanno delle soglie 0-1 piu' affidabili e precise
degli ingressi normali, e inoltre agli ingressi normali, come regola
generale di progettazione, non vanno applicati segnali analogici.
Comunque verifica bene il datasheet del micro, sono quasi sicuro
che anche quel micro abbia almeno un ingresso a trigger, forse quello
del contatore. Riguardo alla precisione, dipende da molti fattori, ma
penso che sia ben migliore di 4 bit, direi che potrebbe essere 6-7 bit
senza troppe difficolta', cioe' 1% circa. Ciao.


precisione, a naso direi 4 0 5 bits.
Ho un appnote simile della National, ma non trovo il PDF (COP NOTE 1)
Qui c'è un appnote di un A/D con caratteristiche simili a quello che
volete fare voi usando un Analog Comparator che sui pic non c'è, ma è
solo per capire il fenomeno.
http://www.atmel.com/dyn/resources/prod_documents/DOC0942.PDF
Se qui danno una precisione di 6 bits con comparatore, direi che con 4
o 5 nell'altro modo non siamo lontani dal vero.
ciao
  Stefano

 del contatore.
Purtroppo credo proprio di no. Gli unici ingressi ST sono quelli dei pin
utilizzati per la programmazione ma solo DURANTE la programmazione. Durante
il normale funzionamento sono ingressi TTL.
L'unico ingresso Trigger è quello GP2/T0CKI ma solo quando è usato come
clock d'ingresso per il Timer TMR0. Se utilizzato come I/O generico,
l'ingresso è di tipo TTL.
Bisognerebbe capire se posso usare il TMR0 come timer (piuttosto che come
contatore) e configurare contemporaneamente il pin T0CKI come contatore
per utilizzare l'ingresso ST e contemporaneamente utilizzare il T0CKI come
ingresso uscita. Ma credo proprio di no :((((

 ingresso uscita. Ma credo proprio di no :((((
Da una lettura piů attenta del datasheet penso proprio che non si possa
fare. Quando imposto il TMR0 come timer (non come contatore), il pin
T0CKI diventa un normale I/O con buffer TTL in ingresso :((
Devo solo provare a non utilizzare il TMR0 come timer per le mie
temporizzazioni e configurare il TMR0 come contatore, anche se non
lo userň come tale, in modo che il pin T0CKI abbia un buffer ST.
Configuro TMR0 come contatore sui fronti di salita sul pin T0CKI
cosě, quando il condensatore si carica e supera la tensione di
soglia del buffer del pin, incrementa il registro TMR0. Controllando
gli incrementi di TMR0 posso capire quando il condensatore s'č caricato.
Ma mi sa proprio che per le mie temporizzazione non posso fare a
meno del TMR0 come Timer :((

meno del TMR0 come Timer :((
Se hai un ingresso con livelli ttl la cosa mi sembra molto imprecisa.
Puoi provare ad aggiungere un comparatore LM311 e ad usare il metodo
dell' appnote che ti avevo mandato nell'altro msg.
Oltretutto se usi una costante di tempo rapida puoi pensare di fare
anche un polling evitando di usare il timer.
ciao
  Stefano

 meno del TMR0 come Timer :((
Prova a dare un'occhiata alla AN512 della Microchip. Viene spiegato
come fare un ohmetro nel modo che desideri tu con un vecchio
modello di Pic. Dicono che si raggiungono 10 bit di precisione, usando
solo due resistenze e un condensatore. Algoritmo e' simile a quello
che avevi descritto tu, ma con un trucchetto per eliminare alcuni errori.


 solo per capire il fenomeno.
Beh, alcuni PIC hanno il comparatore...
-- 
There can never be a computer language in which you cannot write a bad program.
News 2000 [v 2.06] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

In questa pagina:
http://www.dattalo.com/technical/software/software.php
descrive come fare

descrive come fare
Ho letto, ma 12 bit con quel modo mi sembrano una cosa impossibile,
anzi una vera panzana...
ciao
  Stefano