Newsgroup: it.hobby.elettronica.digitale
Titolo: comparatore e Vref nei PIC

salve
dovrei usare il comparatore interno ai PIC (12F675) per verificare
quando l'onda di ingresso passa per lo zero V (zero crossing).
dal manuale sembrerebbe che la Vref (VRCON) si possa mettere a 0V;
(VRR=1 e VR3:0=0) è congruo ciò? con questi set la Vref=0V?
grazie, emi

 grazie, emi
A dire il vero io ho sempre usato, per circuiti non isolati dalla rete, una
resistenza da 3.9 M connessa ad un pin di interrupt.

F. Bertolazzi ha scritto:

per usi "generici" va bene, l'ho sempre fatto pure io....perņ in questo
modo c'č un ritardo, o un anticipo, tra lo "zero crossing" della
sinusoide e la variazione di livello sentita dal pin. mi serve avere
esattamente l'istante di "zeo crossing" e quindi ho pensato di
usare il comp. interno con la Vref messa a 0V, se č fattibile.
emi

usare il comp. interno con la Vref messa a 0V, se è fattibile.
Secondo me funzionerebbe male, perchè il comparatore a 0V non è detto che
discrimini e anche se lo facesse la tensione sul pin per commutare dovrebbe
scendere fino a valori negativi, ma a -0.6V il diodo di substrato inizia a
condurre.
Se ti serve davvero una cosa del genere devi mettere un comparatore esterno tipo
LM311, magari alimentato a tensione duale.
--
ciao
  Stefano

 LM311, magari alimentato a tensione duale.
il circuito è alimentato direttamente dalla V di rete con il classico
condensatore+diodo+zener....avere una V duale mi complica tutto.

 mi serve avere esattamente l'istante di "zeo crossing"
Ne sei sicuro?
Il PIC comunque non potrà rispondere istantaneamente.
Io mi sincronizzerei sulla semionda dalla quale ho il segnale anticipato e
genererei l'altro zero crossing con un timer.
Se poi uso lo stesso timer, con un conteggio un pelino più breve, per
riabilitare l'interrupt di zero crossing, potrei anche ignorare eventuali
"sporcizie" sull'alimentazione.

 genererei l'altro zero crossing con un timer.
qui c'è il problema che le porte non hanno tutte lo stesso livello
di V per commutare da 0->1->0....sicuramente per uno "zero crossing"
standard è una soluzione ottimale, ma se si cerca il pelo nell'uovo
mi sa che ci vuole una soluzione "hardware"
emi

 di V per commutare da 0->1->0....
Di quanti decimi di volt parliamo? Secondo me, su +/-310V sono
assolutamente trascurabili.
Comunque siamo d'accordo sul fatto che, se vuoi una soluzione perfetta,
metterci un PIC di mezzo non è il modo per ottenerla.
Vista la tua riservatezza immagino che l'applicazione finale sia un
brevetto che cambierà le sorti del mondo...

 brevetto che cambierà le sorti del mondo...
ma...non mi sembra di avere tenuto una grande riservatezza, si
dovrebbe aver capito che voglio migliorare il sistema di "zero
crossing" di un uC, evitando di avere delle forme d'onda di uscita
"tagliate" anche quando devo avere il 100%! se usiamo dei uC ,che
non fanno nessuna fatica a lavorare, direi c'è buona cosa cercare
di farli lavorare sempre meglio!

 buona cosa cercare di farli lavorare sempre meglio!
Sempre tenendo conto dei principi della termodinamica... ;-)

 Uh? Devi comandare un triac? Eddillo, allora.
la prossima volta pubblicherò l'intero progetto... :-)

 la prossima volta pubblicherò l'intero progetto... :-)
Se pubblichi quella pubblicana di tua sorella, ancor meglio.

 una maniera per ottenere ciň!
usando il comparatore interno al pic, scatta un interrupt quando hai il vzc?
avresti modo di postare uno schemino?
grazie!
-ice- 

 avresti modo di postare uno schemino?
scusa, ma cos'è "vzc"? (voltage zero crossing????)
sfrutto il fatto che il comp. interno puo generare un interrupt ogni
qual volta la sua uscita cambia di stato (0->1->0...).dal datasheet
sembrerebbe che si possa dare come Vref 0V, ovvero mettere a GND
il piedino + del comp. (VR3-0 del VRCON tutti a 0 e VRR a 1).
per postare uno schemino che cosa intendi? forse il listato C?
oppure proprio lo schema del circuito con il PIC?
chiedi e ti sarà dato! :-)
emi

 oppure proprio lo schema del circuito con il PIC?
si, questo!
giusto per capire come hai dimensionato... parliamo di vzc della tnsione di 
rete?
grazie!
-ice- 

 Se pubblichi quella pubblicana di tua sorella, ancor meglio.
hai esperienza a riguardo, la tua sorella e' conosciuta ovunque 

 
ciao
faccio prima a dirtelo a "voce", anche perchè non ho nessun schema (il
test l'ho fatto "al volo" con la scheda Easypic4 della Mikroelettronica)
ho configurato i vari reg. del comp. del PIC: comp. con IN- su GP1 e
IN+ su CVref, la quale è settata a 0V. sul piedino 6(GP1), ho collegato
la Va 50Hz tramite una resistenza per limitare la I. All'interrupt,
attivo un uscita (GP5) per 500usec (il trigger del triac). Con un
oscilloscopio ho controllato che ritardo c'era tra la il valore 0
della V di rete e il fronte di salita dell'impulso generato, ed era
di circa 100usec (f lavoro del pic 4MHz)
se ti puo interessare il codice, dimmelo che te lo posto.
emi

 la Va 50Hz tramite una resistenza per limitare la I. All'interrupt,
si, questo punto mi interessava particolarmanete... hai messo un solo 
resistore?
non un partitore insomma...
resistore da 1Mohm?
grazie per la disponibilità!
-ice- 

ice ha scritto:

ciao
nelle prove che ho fatto io, ho usato un trasf. 220/9V e ho messo 22k
in serie al pin usato per lo zc. in una applicazione ,in cui il pin
era pilotato dalla 220V di rete, ho inserito 470K...ma in molti
progetti ho visto 1M; penso che non sia molto influente questa R,
serve solo a limitare la I quando conducono i 2 diodi posti sull'
ingresso della porta e riferiti a GND e Vcc.
emi

 in serie al pin usato per lo zc.
Ah, esattamente il setup di cui parlavamo. 
Dove posso mandarti? Fammi pensare...

 Dove posso mandarti? Fammi pensare...
Nel posto dove sei stato mandato tu da un pezzo da una nutrita 
schiera di utenti per caso? Mi sa che rimarrai solo...
-- 
Gotta run, the cat's caught in the printer.
News 2002 [v 2.4] - [ StopDialers/PopDuster/SMTP Proxy - 
http://www.socket2000.com
 ]

F. Bertolazzi ha scritto:

scusami, ma soffri di qualche demenza senile? ma hai capito qualcosa
di quello che ho postato? ma di quale setup stai cianciando?
emi

 ma di quale setup stai cianciando?
Di una resistenza da 3,9 M posta tra un pin di interrupt del controller e
la 220VAC. A quel punto hai un segnale che, non fosse per i diodi di clamp,
varierebbe tra i + e - 310V, che ha un ritardo (o anticipo) veramente
minimo rispetto allo vzc e sostanzialmente indipendente dalla soglia di
commutazione del pin del processore.
Certo che, se invece della semplice resistenza ci metti un partitore o,
peggio, un trasformatore, il discorso non si applica ed avrai dei forti
ritardi o anticipi, che varieranno apprezzabilmente in funzione della
soglia di commutazione del pin di interrupt.
Purtroppo ti sei degnato di specificare questa tua soluzione balenga solo
nel tuo ultimo post, facendo perdere inutilmente tempo a tutti quanti.
Non ti è bastato realizzare una soluzione poco astuta ed esporla malamente,
ancora pretendi di aver ragione. Vabbé, non mi mancherai.

 ancora pretendi di aver ragione. Vabbé, non mi mancherai.
:-) anche emilio nel Kill-file di Bertolazzi? certo che questo individuo e' 
forte veramente avrei voluto conoscerlo di persona ma non ha voluto. 

nel tuo ultimo post, facendo perdere inutilmente tempo a tutti quanti.
Non è una soluzione più balenga di tante altre, ha i suoi pro e i suoi contro, e
poi ogni progettista è libero di usare la circuitazione che preferisce,
l'importante è che sia conscio di quello che decide.
Non vedo la ragione per cui ci si debba accappigliare per banalità come queste.
Io gli avevo consigliato un altra soluzione, ma rispetto le sue scelte.
--
ciao
  Stefano


Se leggi gli altri suoi messaggi verso quelli che lui reputa inferiori a lui 
sono dello stesso tipo, quindi e' tempo sprecato, lui e' l'unico conoscitore 
della verita', questo e il suo credo. 

questo e il suo credo.
ho dimenticato di metter l' accento, non si sa mai :-) va finire che mi 
rilegge "il suo Kill-file va a singhiozzo"

 ancora pretendi di aver ragione. Vabbé, non mi mancherai.
perfetto....ritorna ad occuparti delle celle di carico e relativi
condizionatori "perfetti" che non si sa cosa danno fuori. a dir la
verità ,tu, non mi sei mai mancato.....
CI HAI MAI PENSATO CHE CI SARA UN MOTIVO PERCHè STAI SUI MARONI (E NON
QUELLO DELLA LEGA) A TANTISSIMI SU QUESTO NG......

 Io gli avevo consigliato un altra soluzione, ma rispetto le sue scelte.
ricordo....ma il mio quesito non era su come dare la AC alla porta del
uC, ma su come rilevare in modo + accurato lo zc dell'onda AC. si vede
che il Bertolazzi, preso dalle sue celle di carico, non ha neppure
letto l'argomento del post. e allora cosa risponde? bohhh?
emi

 QUELLO DELLA LEGA) A TANTISSIMI SU QUESTO NG......
Un consiglio? lascia perdere sprechi tempo, gia' sei stato fortunato che non 
abbia detto che il problema sono quei schifosi dei PIC e di passare di 
conseguenza ad ATMEL.
Volevo chiederti visto che gia' nello stesso messaggio ti eri esposto :-) a 
far vedere il sorgente, se era possibile........magari se non vuoi farlo sul 
newsgroup potresti mandarmi una email a 
incarnaAS...@caltanetASKJHDU.it ovviamente togliendo le maiuscole 


Usare il comparatore o un qualsiasi pin del micro č concettualmente lo stesso, cambiano solo le soglie e quindi gli errori. Qualche cento millivolt positivi per il comparatore e circa mezza tensione di alimentazione per un pin qualsiasi. Se si mette una resistenza diretta dalla rete al pin la tensione di soglia diventa insignificante rispetto la tensione di picco e i due sistemi sono proprio lo stesso. Se si mette un partitore la tensione di soglia diventa piů importante rispetto la tensione di picco e la discriminazione dello zero puň subire ritardi apprezzabili all'inizio della semionda positiva e anticipi all'inizio di quella negativa. Il partitore resistivo non introduce ritardi di fase, ma sposta il punto di commutazione che si traduce in un errore di fase.
Si puň compensare l'offset della soglia mettendo una resistenza di pullup, cioč in pratica facendo un partitore non verso massa ma verso la vcc. In pratica bisogna fare in modo che con tensione di rete uguale a zero il pin veda non zero ma la sua tensione di soglia.
In genere tutta questa pignoleria non č necessaria, ma se vuoi spaccare il grado devi tenere conto di quanto esposto.
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 per banalità come queste.
A me non sembra una banalità che uno si permetta di fare domande senza
precisare, nè in prima istanza né dopo ripetute richieste, tutte le
condizioni significative di contorno.

 dalle sue parti Steinmetz e Tesla non sono mai passati.
Ma ancora non č chiaro? E' un informatico prestato all'elettronica. 
E' giusto in grado di collegare moduli preconfezionati tra loro. 
Tutto il resto per lui č arabo e quando non capisce una cosa sono 
scemi gli altri...
-- 
No program done by an undergrad will work after she graduates.


 ritardi apprezzabili all'inizio della semionda positiva e anticipi all'inizio
NESSUNO ha mai parlato di partitori in questo thread, solo 
l'innominabile.
-- 
IBM: I'll Buy Macintosh


 Si puň compensare l'offset della soglia mettendo una resistenza di pullup
Ottima idea, ma il partitore che si viene cosě a formare potrebbe
"comprimere" il segnale.
Secondo me, se vuoi spaccare il grado in modo ripetibile con un AVR, che so
che ha in quasi tutti i modelli quanto serve, la soluzione migliore č di
usare il comparatore con il terminale - collegato al diodo bandgap di
riferimento (circa un volt) ed usare un timer per stabilire il vzc e
disabilitare il comparatore per 19,99 ms, filtrando quindi molti disturbi.

 fasi č di 23V, cosa ben diversa. 
Ah certo, utilizzando un input digitale COME INSISTEVI tu siamo 
d'accordo. Ma proprio per questo motivo ha voluto fare lo zero 
crossing SULLO 0 e non sul valore di soglia della porta. Tant'č vero 
che ottiene 100uS di zero crossing con 9 volt di trasformatore 
oltretutto ISOLATO galvanicamente...
-- 
Maybe Computer Science should be in the College of Theology.  - R. S. Barton


 condizioni significative di contorno.
mio bel ragioniere, ti riposto il messaggio originale:
"dovrei usare il comparatore interno ai PIC (12F675) per verificare
quando l'onda di ingresso passa per lo zero V (zero crossing).
dal manuale sembrerebbe che la Vref (VRCON) si possa mettere a 0V;
(VRR=1 e VR3:0=0) è congruo ciò? con questi set la Vref=0V? "
per rispondere ad un quesito cosi, cosa ti serviva di sapere ?
allora ritorna di attualità la "demenza senile"!

 
c'è una piccola contraddizione nel tuo ragionamento, per il 70% congruo,
se la V di rete e 0V ed è applicata ad un pin con una R di pullup ,la V
che vi si legge è sempre 0V. l'unica cosa che varia è la I che scorre
nella R di p.u. in gener tutto questo non è necessario, ma se vuoi
migliorare lo zc,devi fare quello che fanno nelle schede degli SSR
industriali, ovvero usano un comp. con un pin messo a massa (z.c.
comparator); e da qui è nata la mia richiesta: visto che il PIC lo
ha gia internamente, lo si puo usare come z.c.comparator? dalle
prove che ho fatto ti posso dire di si! il ritardo che ottieni è
di circa 100usec, al livello delle schede industriali per SSR.
emi

 
nessun problema.....ma non ho qui con me il sorgente. domani
lo posto di seguito a questo post. controlla nel pomeriggio!
emi

 comparator);
è una soluzione equivalente ad usare un ic "dedicato" tipo il tlp620?
-ice- 

 emi
Ti ringrazio, comunque per contribuire posto uno schema funzionante al 100% 
che permette di dare l'alimentazione al micro partendo dalla tensione di 
rete senza usare trasformatori.
[FIDOCAD ]
MC 70 70 1 0 080
MC 95 70 1 0 170
MC 120 85 3 0 200
MC 155 60 0 0 300
LI 70 80 70 100
LI 70 100 170 100
LI 170 100 170 70
LI 120 85 120 100
LI 95 80 95 100
LI 70 70 70 55
LI 95 70 95 65
LI 120 65 120 70
LI 120 65 120 60
LI 120 60 160 60
SA 120 100
SA 95 100
SA 70 100
LI 95 60 70 60
LI 95 60 120 60
LI 95 65 95 60 4
MC 70 40 1 0 080
LI 70 55 70 50 4
SA 70 60 4
SA 95 60 4
SA 120 60 4
TY 75 45 5 3 0 0 4 * R1 470 k
TY 95 80 5 3 0 0 4 * C1 10nF
TY 70 80 5 3 0 0 4 * R2 100k
TY 145 70 5 3 0 0 4 * T1 BC547
MC 170 35 0 0 000
LI 170 50 170 35 4
TY 150 25 5 3 0 0 4 * verso in. micro
MC 120 110 0 0 040
LI 120 110 120 100 4
TY 125 80 5 3 0 0 4 * D1 1N4148
MC 65 35 2 0 000
LI 65 35 70 35 4
LI 70 35 70 40 4
TY 45 30 5 3 0 0 4 * Fase
MC 75 -10 0 0 080
MC 75 5 0 0 170
LI 70 35 70 5 4
LI 70 5 75 5 4
LI 75 5 70 5 4
LI 70 5 70 -10 4
LI 70 -10 75 -10 4
LI 85 5 95 5 4
LI 95 5 95 -10 4
LI 95 -10 85 -10 4
MC 105 -10 0 0 080
LI 95 -10 105 -10 4
MC 130 10 3 0 230
LI 115 -10 130 -10 4
LI 130 -10 130 -5 4
MC 130 25 0 0 040
LI 130 25 130 10 4
MC 115 15 2 0 000
LI 115 15 130 15 4
SA 130 15 4
SA 70 5 4
SA 70 -10 4
SA 95 -10 4
TY 95 20 5 3 0 0 4 * Neutro
TY 95 5 5 3 0 0 4 * D2 12v zener
TY 75 -20 5 3 0 0 4 * R3 1M
TY 75 10 5 3 0 0 4 * C2 470nF
TY 105 -20 5 3 0 0 4 * R4 230 3w
MC 140 -10 0 0 200
LI 130 -10 140 -10 4
SA 130 -10 4
TY 150 -20 5 3 0 0 4 * D2 1N4007
MC 155 0 0 0 180
LI 130 15 155 15 4
LI 155 15 155 10 4
LI 155 0 155 -10 4
TY 160 0 5 3 0 0 4 * C3 470 mF
MC 185 -10 0 0 080
LI 155 -10 185 -10 4
TY 190 -20 5 3 0 0 4 * R5 120 1/2w
SA 155 -10 4
RV 210 -10 230 5 4
TY 215 -5 5 3 0 0 4 * 7805
LI 155 15 220 15 4
LI 220 15 220 5 4
LI 195 -10 200 -10 4
LI 200 -10 200 -5 4
LI 200 -5 210 -5 4
MC 200 0 1 0 170
LI 200 0 200 -5 4
LI 200 10 200 15 4
SA 155 15 4
SA 200 15 4
SA 200 -5 4
TY 175 5 5 3 0 0 4 * C4 100nf
MC 260 0 1 0 170
MC 295 0 0 0 180
LI 220 15 295 15 4
LI 295 15 295 10 4
LI 260 10 260 15 4
LI 230 -5 295 -5 4
LI 295 -5 295 0 4
LI 260 0 260 -5 4
SA 260 -5 4
SA 295 -5 4
TY 230 5 5 3 0 0 4 * C5 100nf
TY 265 5 5 3 0 0 4 * C6 220mf
MC 330 -5 0 0 010
LI 295 -5 330 -5 4
TY 310 -20 5 3 0 0 4 * +5v verso vcc Micro

 di rete senza usare trasformatori.
Mi scuso con Emilio che effetivamente ha iniziato chiedendo una cosa ed 
invece siamo andati a finire su altre cose, credo che comunque possa servire 
a qualcuno.

ice ha scritto:

direi che in molti casi va bene...ti isola dalla rete ma ti rimane
il problema del ritardo per la semionda positiva.Li ho usati in un
progetto per verificare se erano presenti le fasi di alimentazione
di un motore 
asinc.ma
 era un sistema on/off
emi

 lo si puo usare come z.c.comparator?
Il comparatore del pic non ha la soglia proprio a zero volt.


 
dal data sheet sembrerebbe ,invece, che puoi settare la Vref a 0V!
se scarichi il datasheet del 12F675, e guardi sotto la sezione del
comparatore, settando il registro VRCON, puoi porre la Vref a 0V.
E ha come Vcm 0-(Vdd-1.5), quindi accetta lo 0V come IN
è proprio questo il quesito che avevo posto io.....non mi interessava
niente come applicavo la Vac al pin ,isolata non isolata,ecc...
emi

diego ha scritto:

nessun problema, se si rimane su tematiche elettroniche e argomenti
civili, va sempre bene. ti posto il listato della prova che ho
fatto usando il comp. come rilevatore di zc e relativo interrupt.
ho usato un potenz. per leggere una V che mi varia il ritardo dell
impulso di trigger al triac. ho usato MikroC della Mikroelettronica
ed è derivato da un precedente listato di un altro progetto.
emi
/********************************************************/
//* SSR_advanced
//*
//* PIC12f675.
//* internal 4MHz oscillator
//* To drive TRIAC, the output is taken high
//* NOTE: This program is designed to work with a 50Hz
//*
//* GPIO<0> =
//* GPIO<1> = sync 50Hz
//* GPIO<2> = reg. % out
//* GPIO<3> = phase-burst select
//* GPIO<4> = led status
//* GPIO<5> = out triac
/********************************************************/
char RIT;
#define SYNC        GPIO.F1     //sync 50Hz
#define TRIAC       GPIO.F5     //Output to TRIAC
#define SETPWR      GPIO.F3     //Dim button
#define STATUS      GPIO.F4     //switch phase/cycling
void CONVERSION ();
void TRIGGER ();
void INTERRUPT();
/********************************************************/
void INTERRUPT (){                      //interrupt COMP
                   TMR0=255-RIT;
                   while (INTCON.T0IF==0);
         TRIGGER ();                     //triac=on
                 //}
                  if (CMCON.COUT==1) STATUS=1;
                  else STATUS=0;
         INTCON.T0IF=0;
         PIR1.CMIF=0;                //res. flag COMP
      }
/********************************************************/
void CONVERSION (){                     //sub.conversione ADC
         ADCON0.GO=1;                    //start ADC
         while (ADCON0.GO);              //end conversion?
         }
void TRIGGER (){                        //sub. TRIAC on/off
          TRIAC=1;
          delay_us(500);                 //pulse=500usec
          TRIAC=0;
         }
/********************************************************/
void main(){
         INTCON= 0;                      //interrupt disable
         GPIO = 0;                       //res. porta GPIO
         TRISIO =0b00001111;             //GPIO I or O
         GPIO.F4=1;
         delay_ms(250);
         GPIO.F4=0;
         CMCON = 0b01000100;             //COMP.=enable/intern
         VRCON= 0b10100000;              //Vref=0V
         ADCON0 =0b00001001;             //ADC=on,AI=AN2
         ANSEL =0b10000100;              //ANS2=AI,Fclk=Fclk/4
         OPTION_REG=0b00000110;          //no PU,no Prescaler
         INTCON= 0b11000000;             //interrupt enable
         PIE1.CMIE=1;                    //interrupt COMP=enable
         PIR1.CMIF=0;                    //res. flag COMP
while (1){
               CONVERSION ();
               RIT= (adresh*10/31);
               }
}

 consentono.
Ti ricordo (mi ci è caduto l'occhio adesso, ma lo avevo letto a suo tempo)
che ti aveva espressamente risposto "il circuito è alimentato direttamente
dalla V di rete con il classico condensatore+diodo+zener....avere una V
duale mi complica tutto"  (cosa tra l'altro non vera).
E poi viene invece fuori che "nelle prove che ho fatto io, ho usato un
trasf. 220/9V e ho messo 22k in serie al pin usato per lo zc."
Ritiro quello che ho detto: non sono informazioni insufficienti, ma
decisamente contrastanti, errate e fuorvianti.
Tu, giustamente, l'hai lasciato perdere subito, io invece non riuscivo a
capire da dove potesse venire il ritardo che lamentava. 
Quando l'ha chiarito gli ho scritto "Ah, esattamente il setup di cui
parlavamo. Dove posso mandarti? Fammi pensare..."
La mia ti sembra una reazione spropositata?
Ti sembra quanto ha risposto lui proporzionato all'"offesa"? 
Senza contare che continuava a non capire un tubo.

PIC o non PIC travisando ciò che aveva scritto?
Non so, forse ti è sfuggita la faccenda del comparatore.
--
ciao
  Stefano

Senza contare che continuava a non capire un tubo.
Potevi semplicemente non rispondere, come ho fatto io quando ha detto che
preferiva usare il comparatore interno.
Noi siamo qui solo per consigliare l'op, poi lui decide cosa fare.
--
ciao
  Stefano