Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Info logica di programmazione

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

1
voti

[1] Info logica di programmazione

Messaggioda Foto UtenteDryden » 9 gen 2011, 12:06

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!
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[2] Re: Info logica di programmazione

Messaggioda Foto UtenteTardoFreak » 9 gen 2011, 17:09

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? :-M
"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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Info logica di programmazione

Messaggioda Foto UtenteDryden » 9 gen 2011, 20:12

Per il triac hai pienamente ragione :)

Essendo la prima volta che uso triac potrei dire qualche cavolata, le correzzioni son sempre bene accette :ok:

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.... :-P

grazie
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[4] Re: Info logica di programmazione

Messaggioda Foto UtenteDonJ » 9 gen 2011, 21:43

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.
"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
Avatar utente
Foto UtenteDonJ
4.611 6 10 13
Master EY
Master EY
 
Messaggi: 2559
Iscritto il: 19 lug 2009, 22:13
Località: Croccamauria

0
voti

[5] Re: Info logica di programmazione

Messaggioda Foto UtenteTardoFreak » 9 gen 2011, 22:11

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.
"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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[6] Re: Info logica di programmazione

Messaggioda Foto UtenteDryden » 9 gen 2011, 23:14

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.
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[7] Re: Info logica di programmazione

Messaggioda Foto UtenteTardoFreak » 9 gen 2011, 23:25

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.
"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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[8] Re: Info logica di programmazione

Messaggioda Foto UtenteDryden » 9 gen 2011, 23:45

Grazie per il chiarimento.
Appena mi arriva la easypic6 faccio delle prove e vedo come va.


Gentilissimo.

Buona serata!
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 23 ospiti