sorecaro Inserito: 24 maggio 2015 Segnala Share Inserito: 24 maggio 2015 (modificato) Buongiorno, ho questo triac (BT137 6000D) connesso come da schema su di un pic 12F675: Il problema è che per far spegnere le lampade devo dare un valore alto GPIO.F0=1; spegni lampada 1 anche la routine per l'accensione della lampada è al contrario: *****esempio**** if(tasto1){ gpio.0=0; delay_us(10); gpio.0=1; } Ho fatto anche una prova, messo un pic vuoto, le lampade si accendono. Dove sto sbagliando??? Modificato: 24 maggio 2015 da sorecaro Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Se lo schema è questo non può funzionare. Come piloti il gate dal pic? cos'hai un trasformatore d'impulsi? un fotoaccoppiatore? Dovresti mettere lo schema completo. Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Non risulta dallo schema quale sia il terminale comune , massa (spero che sia quello collegato ai T1 dei triac). Se l'uscita comune del ''PIC'' è il negativo (massa ) e l'ingresso comune per i triac è quello dei T1(altrimenti credo che il PIC non ci sia più ), credo che Tu debba invertire la logica nel programma . Fa un test semplice : alimenti i triac a 220 Vca e comandi l'ingresso gpio.x con un impulso positivo da 5-10 Vdc ;dovresti ottenere un impulso luminoso dal canale corrispondente . Scusa Livio , non avevo visto il Tuo messaggio ! Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Livio lo schema è proprio questo, ho solo tralasciato la parte che alimenta il Pic. La scheda mi è stata data già assemblata con questi componenti. in più c'è una resistenza da 10Mohm che serve per lo zero crossing ( funziona ) #define LUCE_1 GPIO.F4 //definisci gpio.4 come luce_1 #define LUCE_2 GPIO.F5 //definisci gpio.5 come luce_2 #define LUCE_3 GPIO.F2 //definisci gpio.2 come luce_3 #define LUCE_4 GPIO.F1 //definisci gpio.1 come luce_4 #define ON 0 // definisci stato 1 come 0 #define OFF 1 // definisci stato 0 come 1 unsigned bit zero_crossing; // appoggio variabili signed int tempo; i; pausa; // appoggio variabili void accendi_1(void){ //funzione accendi luce_1 if(zero_crossing){ //se passaggio per lo zero LUCE_1=ON; // attiva luce_1 Delay_us(10); LUCE_1=OFF; } } void accendi_2(void){ //funzione accendi luce_2 if(zero_crossing){ LUCE_2=ON; Delay_us(10); LUCE_2=OFF; } } void accendi_3(void){ //funzione accendi luce_3 if(zero_crossing){ LUCE_3=ON; Delay_us(10); LUCE_3=OFF; } } void accendi_4(void){ //funzione accendi luce_4 if(zero_crossing){ LUCE_4=ON; Delay_us(10); LUCE_4=OFF; } } void interrupt (void){ //routine interrupt if (intcon.GPIF){ if(gpio.f3) { stato=1; } if((gpio.f3==0)&(stato==1)){ zero_crossing=1; i++; stato=0; } INTCON.GPIF=0; //reset interrupt INTCON.GIE=1; // abilita interrupt } } void main() { // CMCON = 7; //Disabilita Comparatore. ADCON0 = 0; //Disabilita convertitore A/D ANSEL = 0b00000000; //Tutte le porte in digitale GPIO= 0; //metti a zero le porte gpio TRISIO = 0b00001000; //Tutti i pin in OUT tranne gpio3 IOC= 0b001000; //abilita cambio stato su gpio3 INTCON.GPIE=1; //abilita interrupt porta gpio INTCON.GIE=1; //abilita interrupt porta gpio i=0; zero_crossing=0; //inizializza variabile while(1) //Eseguo un ciclo finito { LUCE_1=OFF; //////////////////////////////////////// LUCE_2=OFF; /////////////////////////////////////// LUCE_3=OFF; //comincia ciclo con lampade spente // LUCE_4=OFF; ////////////////////////////////////// if ((i>1)&(i<100)) { accendi_1(); } if ((i>100)&(i<300)) { LUCE_1=OFF; } if ((i>400)&(i<500)) { accendi_1(); } if((i>500)&(i<700)) { LUCE_1=OFF; } if(i>800){ zero_crossing=0; i=0; } } } } Il seguente codice funziona, la lampada si accende e si spegne ( sto usando la logica invertita come consivaglia gabri-z). Il problema è che devo sincronizzare due schede con la frequenza di rete. Se collego due schede con due pic identici per un po funzionano in sincronia, ma dopo un pò una anticipa l'altra. Con simulazione fatta con Proteus noto che con questo codice il Pic ha un carico di lavoro del'82% e la variabile i che viene incrementata nella routine di interrupt perde qualche incremento. Invece se faccio #define ON 1 #define OFF 0 il pic lavoro in modo perfetto, non perde nessun incremento Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 (modificato) Ma scusa che mi intrometto , come fanno le schedine a interpretare la frequenza di rete ? Non è che hanno i ''clock'' separati , ed evidentemente diversi , da creare sfasamenti ? Cosa sono 'ste schedine e come sono collegate ? Dobbiamo tirarti le parole con la pinza ? Ricordati che solo le domande chiare , precise possono rendere risposte chiare . (anche '' non lo so '' è una risposta chiara , ma almeno non giriamo 200 messaggi ) Dicci qualcosa di più su queste schedine ! Anche rispondere alle domande di chi vuole aiutarti è gradito (la/le domande di Livio sono ancora senza risposta ) Modificato: 24 maggio 2015 da gabri-z Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Ma scusa che mi intrometto , come fanno le schedine a interpretare la frequenza di rete ? Non è che hanno i ''clock'' separati , ed evidentemente diversi , da creare sfasamenti ? Ci mancherebbe che ti intrometti, anzi :-) Sto usando lo zero crossing ( interrupt su gpio.3) per fare la sequenza di accensione e spegnimento, cosi hanno un riferimento bene preciso, almeno l'idea è questa. Infatti nella routine di interrupt ad ogni passaggio per lo zero viene incrementata una variabile i, e dipende dal valore di quella variabile quale lampada accendere Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Le "schedine" sono schede già assemblate dove un pic 12f675 deve pilotare 4 triac collegati come da schema del post 1. Per quanto riguarda lo zero crossing viene preso tramite una resistenza da 10Mohm collegata direttamente alla 220VAC. L'alimentazione del pic viene prelevata direttamente dalla 220VAC ( c'è un circuito che abbassa e stabilizza tramite zener ), se può essere di aiuto posto lo schema. inoltre c'è un potenziometro collegato all'ingresso AN0 ( ma non deve fare nulla) Se può essere di aiuto disegno lo schema oppure la foto della scehda Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Se può essere di aiuto disegno lo schema op.. Se completo , si , se è a razioni mensili , aspettiamo il completo ! Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Se sono interfacciate direttamente in quel modo è una cosa veramente pessima, senza nessuna separazione da rete. C'è almeno una An microchip che spiega molto bene come realizzare lo zero crossing per sincronizzarsi sulla rete. Funziona tanto bene che si può anche realizzare sia PLC (Power Line Comunication) che dimmerare la tensione. L'AN è anche completa di schemistica, ti consiglio vivamente di ricercarla sul sito Microchip e studiarla attentamente. Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Livio purtroppo come dicevo non posso fare modifiche hardware sulla scheda Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Anche se non le puoi modificare intanto ti rendi conto di come deve essere realizzato un simile dispositivo per funzionare decentemente. Se il sincronismom sullo zero è reale e l'interrupt parte proprio sullo zero, la differenza che puoi avere tra le due schede è solo quella del comando, quindi devi anche sincronizzare il comando. Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Ok, sto disegnando lo schema completo cosi lo posto Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Se il sincronismom sullo zero è reale e l'interrupt parte proprio sullo zero, la differenza che puoi avere tra le due schede è solo quella del comando, quindi devi anche sincronizzare il comando. Dove risulta che il problema non sta nel.....titolo (poveri triac , ) Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Povero me, no poveri triac Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 maggio 2015 Segnala Share Inserita: 24 maggio 2015 Povero me, no poveri triac Secondo me , dovresti fare vedere lo schema intero (non sarà mica secreto industriale ) ed in base a quello , eliminati eventuali errori ''hard'' , qualcuno , (mi NO ! ), Ti :potrà aiutare nella parte ''soft'' . Credo che sia la più corta strada per risolvere il Tuo problema Link al commento Condividi su altri siti More sharing options...
sorecaro Inserita: 24 maggio 2015 Autore Segnala Share Inserita: 24 maggio 2015 Certo, appena ho fatto posto lo schema Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora