Salve a tutti!
Vorrei qualche consiglio sulla logica di programmazione.
Devo fare un light dimmer a 4 canali, ho già realizzato il circuito per rilevare lo zero crossing e funziona molto bene.
Per il progetto uso un pic18f2455 con quarzo da 20mhz ed userò gli 8bit della PORTA per eseguire la selezione delle tempistiche di accensione.
Volevo sapere se la logica per la programmazione del PIC possa in qualche modo funzionare o se devo rivederla da capo.
Avevo pensato di programmare il PIC in questo modo:
1-Imposto il timer per avere circa 12ms all'overflow.
2-Arriva l'impulso dal circuito zero crossing
3-Spengo le 4 uscite con i triac
4-avvio il timer
5-quando il valore del timer è uguale a quello impostato dalla PORTA innesca i triac
6-Leggi il valore di portA
7- ricomincia dal punto 2
Chiaramente il tutto avviene in polling in quanto uso il compilatore MIKROBASIC e purtroppo con applicazioni time sensitive sono un po' legato.
Grazie a tutti!
Info logica di programmazione
Moderatore:
Paolino
8 messaggi
• Pagina 1 di 1
1
voti
0
voti
Prima di parlare d' altro:
- Il triac non lo spegni, semmai lo accendi. Si spegne da solo passando per lo zero.
- Perche' vuoi settare il timer proprio a 12ms?
- Il triac non lo spegni, semmai lo accendi. Si spegne da solo passando per lo zero.
- Perche' vuoi settare il timer proprio a 12ms?

"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Per il triac hai pienamente ragione :)
Essendo la prima volta che uso triac potrei dire qualche cavolata, le correzzioni son sempre bene accette
il timer lo imposto a 12ms per sicurezza, pensavo appunto di avviare il timer al passaggio per lo zero e innescare il triac passati X millisecondi (da 0 a 10). Quando il timer arriva a 10 lo resetto manualmente.
La tempistica è data per forza di cose dal semiperiodo della semionda.
Questa è una MIA logica per la programmazione ed infatti sono quà per confrontarla, proprio perché è la prima volta che mi trovo a fare light dimmer.
Conosci altri modi di programmazione per fare la stessa cosa?
Non mi interessano pezzi di codice, ma proprio la logica!
Il codice me lo scrivo da solo, altrimenti cosa imparo....
grazie
Essendo la prima volta che uso triac potrei dire qualche cavolata, le correzzioni son sempre bene accette
il timer lo imposto a 12ms per sicurezza, pensavo appunto di avviare il timer al passaggio per lo zero e innescare il triac passati X millisecondi (da 0 a 10). Quando il timer arriva a 10 lo resetto manualmente.
La tempistica è data per forza di cose dal semiperiodo della semionda.
Questa è una MIA logica per la programmazione ed infatti sono quà per confrontarla, proprio perché è la prima volta che mi trovo a fare light dimmer.
Conosci altri modi di programmazione per fare la stessa cosa?
Non mi interessano pezzi di codice, ma proprio la logica!
Il codice me lo scrivo da solo, altrimenti cosa imparo....
grazie
0
voti
La logica del programma mi sembra giusta.
Se vuoi fare una cosa più raffinata puoi misurare il tempo che passa tra un segnale di zero-cross e l'altro e caricare il valore nel registro di overflow del timer.
Così tieni il PIC sempre sincronizzato.
Se vuoi fare una cosa più raffinata puoi misurare il tempo che passa tra un segnale di zero-cross e l'altro e caricare il valore nel registro di overflow del timer.
Così tieni il PIC sempre sincronizzato.
"Computers, operating systems, networks are a hot mess. They're barely manageable, even if you know a decent amount about what you're doing. Nine out of ten software engineers agree: it's a miracle anything works at all."
@fasterthanlime
@fasterthanlime
0
voti
I 12ms non servono.
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- carica il timer
- quando va in overflow accendi il triac
Questo se usi una sola uscita altrimenti
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- azzeri il timer
- quando il valore del timer e >= al livello della rispettiva lampada accendi il triac corrispondente.
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- carica il timer
- quando va in overflow accendi il triac
Questo se usi una sola uscita altrimenti
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- azzeri il timer
- quando il valore del timer e >= al livello della rispettiva lampada accendi il triac corrispondente.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
DonJ ha scritto:La logica del programma mi sembra giusta.
Se vuoi fare una cosa più raffinata puoi misurare il tempo che passa tra un segnale di zero-cross e l'altro e caricare il valore nel registro di overflow del timer.
Così tieni il PIC sempre sincronizzato.
Ciao, grazie per il suggerimento.
Misurare il tempo tra un segnale zero cross e l'altro non ha molto senso, in quanto essendo frequenza di rete, mi trovo 100Hz fissi sul piedino del PIC. O forse ho capito male io e intendevi un'altra cosa?
TardoFreak ha scritto:I 12ms non servono.
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- carica il timer
- quando va in overflow accendi il triac
Questo se usi una sola uscita altrimenti
- Attendi il passaggio per lo zero
- Leggi il valore sulla porta
- azzeri il timer
- quando il valore del timer e >= al livello della rispettiva lampada accendi il triac corrispondente.
Grazie per i consigli e il chiarimento sulla tecnica di sviluppo del software, il timer non l'ho ancora mai usato in quanto per i piccoli progettini che ho sviluppato non ne necessitavano. Però ho dato una buona letta al datasheet e non mi sembrano affatto complicati da usare.
i 12ms è un valore "astratto" che supera la frequenza del zero crossing, in modo tale da non andare in overflow.
0
voti
Ma e' inutile.
Il timer funziona in incremento quindi o usi l' overflow e quindi lo carichi in modo da andare in overflow dopo un certo tempo inferiore a 10ms (primo caso da me citato) o lo azzeri e continui a leggerlo fino a quando non raggiunge o supera il valore da te richiesto (secondo caso).
Il primo caso e' piu' preciso, sopratutto se utilizzi l' interrupt.
Il timer funziona in incremento quindi o usi l' overflow e quindi lo carichi in modo da andare in overflow dopo un certo tempo inferiore a 10ms (primo caso da me citato) o lo azzeri e continui a leggerlo fino a quando non raggiunge o supera il valore da te richiesto (secondo caso).
Il primo caso e' piu' preciso, sopratutto se utilizzi l' interrupt.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Grazie per il chiarimento.
Appena mi arriva la easypic6 faccio delle prove e vedo come va.
Gentilissimo.
Buona serata!
Appena mi arriva la easypic6 faccio delle prove e vedo come va.
Gentilissimo.
Buona serata!
8 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 14 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


