Quattro eventi mi sembrano più che sufficienti...
Per temporizzarli ho impostato appunto il timer 0, modalità CTC e interrupt sul canale A (impostando OCR0A a 4ms)
se imposto il OCIE0B e OCR0B il TIMER0_COMPB_vect dovrebbe funzionare, giusto? ovviamente al raggiungimento di OCR0B e a interrupt attivi
problema PWM timer 0
Moderatore:
Paolino
29 messaggi
• Pagina 3 di 3 • 1, 2, 3
0
voti
Mi pare che usi l'interrupt per andare poi a controllare via software l'uscita di innesco, questo vedi che ti impegna un lavoro di interrupt molto spesso.
Fermo restando che il ciclo di interrupt deve essere sempre il più leggero possibile, rimane comunque il problema che altro software, chiamato nel main, sarà sempre fermato dall'interrupt, ancora peggio se avessi altri interrupt che lavorino indipenentemente.
La soluzione migliore è sempre avere l'uscita del timer direttamente collegata al pin, avviarlo tramite gate dal Sync di ingresso, non so però se il tuo micro lo supporti.
saluti.
Fermo restando che il ciclo di interrupt deve essere sempre il più leggero possibile, rimane comunque il problema che altro software, chiamato nel main, sarà sempre fermato dall'interrupt, ancora peggio se avessi altri interrupt che lavorino indipenentemente.
La soluzione migliore è sempre avere l'uscita del timer direttamente collegata al pin, avviarlo tramite gate dal Sync di ingresso, non so però se il tuo micro lo supporti.
saluti.
-

lelerelele
4.899 3 7 9 - Master

- Messaggi: 5505
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
lelerelele ha scritto:Mi pare che usi l'interrupt per andare poi a controllare via software l'uscita di innesco, questo vedi che ti impegna un lavoro di interrupt molto spesso.
Sì l'uscita del fotoaccoppiatore la controllo da un interrupt, è vero le interrupt service routine vanno fatte più leggere possibili, ma sinceramente penso che non sia un grosso problema mettere qualche istruzione in più, è vero, potrei spostare il codice del "conteggio" nel main (fatto in una vecchia versione del codice), ma sinceramente per una questione di organizzazione del codice preferisco tenerla lì, cambia veramente poco in termini di istruzioni...
lelerelele ha scritto:ancora peggio se avessi altri interrupt che lavorino indipenentemente.
Si, gli interrupt generati sono 5, due interrupt esterni, e tre dai timer, di cui due solo dal timer 2 che si attivano alternativamente (quando sta attivo uno, l'altro è disattivato) e per tempi limitati, servono per i conteggi di utilizzo del compressore e per poter cambiare stato alla valvola di caldo/freddo (che si puo fare dopo una quindicina di minuti che il compressore è spento), invece il timer 0 è attivo solo nel caso ci sono degli eventi programmati, sinceramente dopo che ho scritto il codice non l'ho riguardato, ma credo che dovrebbe farcela, alla fin fine nel circuito originale c'è un micro con quarzo a 4 MHz e se ce la fa con freqenza di clock più bassa dovrebbe farcela alla grande il 328 a 16MHz che ho montato ora...
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
0
voti
il tuo micro, ha la possibilità di impostare la priorità degli interrupt? credo che ti servirà.
-

lelerelele
4.899 3 7 9 - Master

- Messaggi: 5505
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
Non lo so, comunque volevo chiedere una cosa del genere: ma se capitano due interrupt insieme cosa accade?
Nel datasheet nella sezione interrupt non sembra che ne parli
Nel datasheet nella sezione interrupt non sembra che ne parli
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
0
voti
Cioè uno si presenta mentre l'altro è in esecuzione. Dovrebbero accodarsi purché non provengano dalla stessa sorgente. Oppure nidificarsi (nested interrupts). Se usi un linguaggio ad alto livello dovrebbe pensarci il compilatore. Dico inesattezze?
1
voti
Se ci sono le gestioni degli interrupt, pare che vengano interrotti anche gli interrupt più bassi, se sopraggiunge un interrupt più alto. Forse però dipenda dal tipo di micro.daniele1996 ha scritto:Non lo so, comunque volevo chiedere una cosa del genere: ma se capitano due interrupt insieme cosa accade?
leggi qua, mi pare interessante.
e qua
saluti.
-

lelerelele
4.899 3 7 9 - Master

- Messaggi: 5505
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
Scusate la mia assenza, a quanto pare non c'è la priorità degli interrupt (in questi micro), ho trovato questo, e dice che gli interrupt non vanno disattivati, in caso vengano disattivati e si verifica un interrupt, verrà richiamata la sua funzione alla riattivazione degli interrupt.
Arrivati a questo punto si può pensare che il codice scritto dentro gli ISR potrebbe essere chiuso tra la disattivazione e la riattivazione degli interrupt... Qui mi sorge una domanda... se ad esempio la porta seriale riceve dei dati mentre è in esecuzione già un interrupt e quindi l'esecuzione viene rimandata a quando finisce il codice dell'interrupt precedente, il valore ricevuto persiste fino alla lettura? (nel caso sia solo un valore), nel caso siano più di un valore trasmesso, il "ritardo" dell'esecuzione del codice potrebbe provocare la sovrascrittura del valore precedente?
Arrivati a questo punto si può pensare che il codice scritto dentro gli ISR potrebbe essere chiuso tra la disattivazione e la riattivazione degli interrupt... Qui mi sorge una domanda... se ad esempio la porta seriale riceve dei dati mentre è in esecuzione già un interrupt e quindi l'esecuzione viene rimandata a quando finisce il codice dell'interrupt precedente, il valore ricevuto persiste fino alla lettura? (nel caso sia solo un valore), nel caso siano più di un valore trasmesso, il "ritardo" dell'esecuzione del codice potrebbe provocare la sovrascrittura del valore precedente?
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
0
voti
è opportuno salvare i registri dall'indirizzo 0 a 1F?
in questo caso ogni interrupt necessiterebbe di un blocco singolo solo per salvarli... un vettore di 31 caratteri... vuol dire che con un paio di centinaia di byte non ci sarebbero problemi...
in questo caso ogni interrupt necessiterebbe di un blocco singolo solo per salvarli... un vettore di 31 caratteri... vuol dire che con un paio di centinaia di byte non ci sarebbero problemi...
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
29 messaggi
• Pagina 3 di 3 • 1, 2, 3
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 37 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)
