Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Registro CMCON PIC16F628

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[51] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 7 ott 2014, 22:46

Davide90 ha scritto:é possibile che l'interrupt del timer0 mi faccia perdere qualche interrupt del timer 2
direi di no perché quando sei nella ISR risulta disattivata la flag GIE quindi, se si dovesse verificare l'interrupt del timer 2, una volta "uscito" dalla ISR ritroveresti comunque la TMR2IF ancora attiva; questa condizione ti riporterebbe di nuovo a schedulare la ISR.
Questo ...
Davide90 ha scritto:(...)( dilatando cosi i tempi)?
... invece si, si verifica.
Però ho fatto qualche calcolo e, seppur per approssimazione, non è possibile raggiungere le dilatazioni che invece pare ci siano, considerando i valori che hai scritto.

Questa valutazione che ho riportato avrebbe riscontro certo se si trattasse di istruzioni in ASM mentre nel nostro caso il sorgente deve poi essere convertito in istruzioni; la precisazione è doverosa anche se, per questo, comunque, non mi aspetterei significative differenze rispetto ad un programma scritto direttamente seguendo l'intruction set.

Facendo un riepilogo quindi, e avendo ora come riferimento il codice del tuo Post [49], potresti scrivere per cortesia qual è il quarzo che stai utilizzando e qual è il valore che "vorresti" ottenere per: il periodo, per la durata ON, per la durata OFF.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[52] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 7 ott 2014, 22:59

Però ho fatto qualche calcolo e, seppur per approssimazione, non è possibile raggiungere le dilatazioni che invece pare ci siano, considerando i valori che hai scritto.


quali valori ottieni?

il quarzo usato è 16 MHz
desidero ottenere un periodo di 2,48 ms, lo stato ON deve durare 1,7 ms mentre lo stato OFF deve durare 2,48-1,7 = 0,78 ms
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[53] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 7 ott 2014, 23:55

Davide90 ha scritto:quali valori ottieni?
... sarebbero solo pochi micro-secondi, nemmeno ripetitivi nella loro incidenza, ed imputabili all'esecuzione delle istruzioni associate al timer 0 nella ISR.
Se non altro per uniformità, ti propongo di portarle fuori dalla ISR sostituendole con una flag come fatto per il timer 2; la differenza è minima ma rende più lineare l'esecuzione che, ad ogni interrupt diverrebbe:

Codice: Seleziona tutto
void interrupt ISR(void)
{
    if(TMR2IF)
    {
        TMR2IF=0;
        flagT2=1;
    }

    if(RBIF)
    {
        RBIF=0;
    }

    if(T0IF)
    {
        T0IF=0;
        TMR0=236;
        flagT0=1;   
    }
}


mentre nel loop "while(1)" inserisci:
Codice: Seleziona tutto
        if(flagT0>0)
        {
            if (impulsoStick>248)
                  impulsoStick=100;
            impulsoStick++;
            flagT0=0;   
        }


Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[54] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 10 ott 2014, 6:16

provato, migliora lievemente, da 8,4 passiamo ad un periodo di 6,8 ms.

La cosa strana è che cambiando l' impostazione di TMR0, portandolo , ad esempio ,da 236 a 20 , ottengo una dilatazione del periodo( degli interrupt del timer2) fino a 20 mS.
Sembra quasi che io stia comandando la variabile tempo con il TMR0 e non con il timer2.
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[55] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 10 ott 2014, 11:03

Davide90 ha scritto:Sembra quasi che io stia comandando la variabile tempo con il TMR0 e non con il timer2.
... ?

Meglio scriverle "una" volta in più le cose, quindi:

i) il codice in esecuzione è quello del Post [49];
ii) il quarzo usato è da 16 MHz;
iii) periodo richiesto pari a 2,48 ms con stato ON di 1,7 ms (quindi OFF paria a 2,48-1,7 = 0,78 ms);
iv) periodo rilevato pari a 8,4 ms con stato ON di 3,8 ms e OFF di 4,6 ms;
v) dopo le variazioni descritte nel Post [53] viene rilevato un periodo pari a 6,8 ms.

E' corretto quanto sopra ?
Perché le "distanze" sono significative.
L'include delle definizioni del microcontrollore corrisponde a quello che stai usando ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[56] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 14 ott 2014, 14:54

Davide90 ha scritto:
Sembra quasi che io stia comandando la variabile tempo con il TMR0 e non con il timer2.
... ?

si, perché variando il valore di precaricamento del timer0 (TMR0) , lo stato tra ON e OFF si allunga di molto, ed anche il periodo arriva ( in funzione del valore TMR0) anche a 20Ms.

si, tutto corretto quanto hai scritto.

L'include delle definizioni del microcontrollore corrisponde a quello che stai usando ?


si, ho provato sia con
Codice: Seleziona tutto
#include <PIC.h>

che con
Codice: Seleziona tutto
#include <pic16f628a.h>


medesimo risultato.
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[57] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 22 ott 2014, 18:54

Può darsi che nel frattempo tu abbia evoluto la tua sperimentazione ma, non dovesse essere così, avendo controllato i parametri in configurazione (poi qualcosa può darsi mi sia sfuggito) senza rilevare incoerenze, se trascuriamo il timer0, ti proporrei di ridurre il codice ai minimi termini, anche se è già "ridotto" di suo.

Considerato il fatto che il periodo lo gestisci, in pratica e al momento, solo con il timer2, toglierei dal sorgente quello che non lo interessa, ovvero il timer0.
Eliminerei, inoltre, la variabile "tempooff" che non ti serve a nulla.
L'intenzione sarebbe quella di verificare se la funzione relativa alla temporizzazione corrisponde alle impostazioni definite.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti