Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Registro CMCON PIC16F628

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[31] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 28 set 2014, 23:29

Si forse dal codice non si capisce bene;
i tempi sono sicuro 3,08 invece di 2,48 ms.

Lo stato dell' On l' ho impostato a 1,7 ms
Codice: Seleziona tutto
tempoon=170;

, e per differenza
Codice: Seleziona tutto
tempooff=(248-tempoon)+100;


tempo dello stato off = 780 us, dove +100 serve solo per non resettare il timer.
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[32] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 28 set 2014, 23:33

No, forse non sono stato chiaro, quello che c'è nel codice l'ho visto e credo di averlo interpretato correttamente; vorrei sapere quali sono i tempi rilevati con l'oscilloscopio.

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

[33] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 29 set 2014, 0:47

Foto UtenteDavide90, a prescindere dalla questione dei tempi, tieni presente che in pratica il tempo dello stato off in teoria (poi in pratica si vedrà) non corrisponde a 780 microsecondi come da te ipotizzato.
I valori assoluti delle variabili "tempoon" e "tempooff" assumono, rispettivamente, 170 e 178.
Questi rappresentano di fatto, nei due loop "while", delle soglie ma, in questi controlli, ti sfugge il fatto che il secondo statement
Codice: Seleziona tutto
while(tempooff>tempo && tempo>tempoon)
non contempla la condizione per la quale la variabile tempo supera quello di "tempooff".
E accade perché l'incremento della variabile "tempo" prosegue sino al limite da te previsto (248) però all'interno del while in causa non ci passi più.
In pratica non ti cambia nulla perché non perpetui più l'assegnazione di zero a MOTORE1OUT e MOTORE2OUT che, nei fatti, rimangono a quel valore (zero) ma non credo proprio sia stato intenzionale da parte; ma potrei sbagliarmi e se invece dovesse essere come scrivo ti suggerisco di "irrobustire" quei controlli.

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

[34] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 29 set 2014, 8:17

I tempi che rilevo con l' oscilloscopio sono 1,44 ms in ON e 1,68 in OFF

il codice l' ho cambiato in questo modo, ho solo una condizione di entrata nel secondo While, così quando termina l'esecuzione del primo statement , il timer continua ad andare fino a 248, dopodichè si resetta, ed inizia nuovamente il conteggio.

Codice: Seleziona tutto
void start();
// variabili globali
unsigned int tempo=0;
unsigned int impulsoStick=100;

unsigned int tempoon=0;
unsigned int tempooff=0;
void main(void){

    start();// chiamo la funzione di inizializzazione

}

void start(){
    // imposto le porte come input o output
    INTCON=0b10101101;
    T2CON=0b0000100;// Timer2
    PR2=40;//Timer2
    PIE1=0b00000010; // Abilito il flag Interrupt TMR2IE
    // Configuro le porte A come uscite
    CMCON=0x07;
    OPTION_REG=0b00000000; //Prescaler =1/2
    TRISA=0b00001111; //Tutte le porte sono input
    TRISB=0b11110000;// solo le porte RB7>RB4 sono input( per sfruttare gli interrupt)
    // imposto le porte come livello basso
    PORTA=0;
    PORTB=0;
   
    // imposto il valore di partenza del TMR0
    TMR0=236;

    while(1){
       
       tempoon=170;
       
           
                    while(tempo<tempoon){
                        MOTORE1OUT=1;
                        MOTORE2OUT=1;
                 
                     }
                   
                     while(tempo>tempoon) {
                        MOTORE1OUT=0;
                        MOTORE2OUT=0;
                 
                     }

           
         
     }
}




void interrupt ISR(void){
    if(TMR2IF){
        TMR2IF=0;
         T0IF=0;
         PR2=40;
    if (tempo>248)
          tempo=0;
    tempo++;
    }
    if (RBIF){
        RBIF=0;
   
    }
    if (T0IF) // l' interrupt è stato causato dall' overflow del timer0
    { //l'interrupt è generato ogni 10 microsecondi
     
      T0IF=0;
      TMR0=236;
      if (impulsoStick>248)
      impulsoStick=100;
      impulsoStick++;




     /*
   
      */
    }
  // fine interrupt service routine
}


ma i tempi si allungano ulteriormente 3,52 On e 1,6 Off.
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[35] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 29 set 2014, 11:36

Davide90 ha scritto:Il quarzo è diventato a 16 MHz
... saresti in grado di escludere la possibilità d'operare a 8 MHz ivece che a 16 MHz ?

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

[36] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 29 set 2014, 13:34

Si posso mettere un quarzo a 8 MHz.. Cosa potrebbe cambiare?
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[37] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 29 set 2014, 14:37

Ho inteso scrivere: stai utilizzando un quarzo a 16 MHz ma è poi quella la frequenza alla quale sta funzionando il microcontrollore o, magari, sta funzionando alla metà (di quella) ?

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

[38] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 29 set 2014, 14:50

Penso di si, nei FUSES ho impostato

Codice: Seleziona tutto
#define _XTAL_FREQ 16000000



come posso verificarlo?
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[39] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteWALTERmwp » 1 ott 2014, 10:42

Tenendo presente che il timer 2 viaggia con "pilota automatico", per quale motivo fare quelle inizializzazioni ogni volta che si verifica l'interrupt ?

Saluti

p.s.
... attendo ...
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

[40] Re: Registro CMCON PIC16F628

Messaggioda Foto UtenteDavide90 » 1 ott 2014, 12:04

Se intendi l'inizializzazione PR2=40, è stata solo una prova fatta, ora l'ho tolto.

Ho provato a cambiare il quarzo usandone uno a 20mhz, ora i tempi sono quasi corretti, nel senso che il periodo oscilla tra 2,48 e 2,52 ms, e i tempi di ON e OFF hanno una differenza tra quello impostato e quello effettivo(misurato con l'oscilloscopio) nell'ordine dei 200us, la mancata precisione potrebbe essere dovuta ai condensatori (22pF) e/o alla qualita del quarzo e/o al fatto di aver configurato il quarzo come HS?
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti