Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Maggiore precisione con contagiri PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[31] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 4 lug 2011, 10:36

Eccomi. Ho scritto qualcosa. TardoFreak se hai un minuto ti andrebbe dare un'occhiata al codice per vedere se sto procedendo correttamente? Ho utilizzato un quarzo da 8Mhz con prescaler da 8 per sfruttare l'esempio che mi hai dato.

// Inizializzazione LCD su cui indicare i giri/min

sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RC7_bit;
sbit LCD_D7 at RC6_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISC7_bit;
sbit LCD_D7_Direction at TRISC6_bit;

int periodo=0;
int ricevuto=0;
int risultato=0;
int cont=0;
char testo[6];


void interrupt()
{
ricevuto=1;
periodo=TMR1H<<8+TMR1L;
TMR1H=0;
TMR1L=0;
INTCON.INTF=0;


}


void main()

{
PORTB = 0; // Initialize PORTB
PORTC = 0;
TRISB = 1; // PORTB is output


OPTION_REG=0xC0;
INTCON=0x90;

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Delay_ms(500);
T1CON=0x31;
TMR1H=0;
TMR1L=0;




/*----------------------------------------------------------------------------*/


while(1)
{

if(ricevuto==1)

{
INTCON.GIE=0;
INTCON.INTE=0;
risultato=60000/periodo;
ricevuto=0;
INTCON.GIE=1;
INTCON.INTE=1;
}

WordToStr(risultato,testo);
Lcd_Out(2,1,testo);
}


}
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[32] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteTardoFreak » 4 lug 2011, 10:39

3 cose:
- Il sorgente lo devi mettere fra i tags [ code ] e [ /code ] (senza spazi fra le parentesi)
- Prima prova il programma poi, se non funziona, ne parliamo
- Oggi sono assai incasinato e di tempo, purtroppo, ne ho poco. Rispondo quando faccio partire le compilazioni :?
"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

[33] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 4 lug 2011, 10:45

Ok! Dopo provo e ti scrivo. Non importa se non mi rispondi subito. Puoi anche farlo tra una settimana. Non mi interessa. Dipende dal tempo che si ha. Io in ogni caso scrivo i risultati che ottengo. Magari c'è un altro che vuole realizzare la medesima cosa. :-)

Edge
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[34] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 5 lug 2011, 17:03

Eccomi. Tempo permettendo sono riuscito a testare il programma. L'esito è che sul display compare sempre 65535 e da lì non si schioda...
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[35] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 6 lug 2011, 13:33

Macché! Nulla da fare. Ho provato come sempre a verificare con l'oscilloscopio se effettivamente i triggers arrivano correttamente alla routine di interrupt. Tutto a posto.

E' sbagliata la relazione con cui ricavo gli rpm forse?
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[36] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteTardoFreak » 6 lug 2011, 13:44

Inizia a far visualizzare il periodo, vedi se funziona e che indicazioni dà.
"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

[37] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 6 lug 2011, 14:02

In debug effettivamente nella variabile risultato permane il valore -1, metre la variabile Periodo rimane a 0
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[38] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 6 lug 2011, 22:45

Nulla da fare. Fatto così ho qualche problema. Credo di aver sbagliato concettualmente il firmware. Forse devo ragionare come se utilizzassi TMR0, ovvero arriva il primo impulso e faccio partire TMR1, poi arriva il secondo fronte ed è qui che devo azzerare Timer1....
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

0
voti

[39] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteTardoFreak » 6 lug 2011, 23:53

Il problema è che il timer 1 non s' incrementa. E' di sicuro una fesseria, un particolare che una volta risolto ... insomma non c'e' differenza fra un timer e l' altro, di sicuro manca un passaggio, un' istruzione ma questa sera ho il cervello che si è spento da solo dopo avere risolto un problema che mi assillava da quasi una settimana. :mrgreen:

sorry Love to but can' t.
"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

[40] Re: Maggiore precisione con contagiri PIC

Messaggioda Foto UtenteEdge » 11 lug 2011, 17:03

Eccomi. Ho avuto da fare al lavoro. Allora ho riprovato e ho riscritto il codice:

Codice: Seleziona tutto
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;

int periodo=0;
int ricevuto=0;
int risultato=0;
int cont=0;
char testo[6];
char txt1[]="Tach/hr";

void interrupt()
{
TMR1ON_bit=1;
cont++;
INTCON.INTF=0;
if(PIR1.TMR1IF)
{
PIR1.TMR1IF=0;
  TMR1H=0;
  TMR1L=0;
  risultato=0;
}
}


void main()

{
  PORTB = 0;               // Initialize PORTB
  PORTC = 0;
  TRISB = 1;               // PORTB is output


  OPTION_REG.INTEDG=1;
  INTCON=0x90;

  Lcd_Init();                        // Initialize LCD

  Lcd_Cmd(_LCD_CLEAR);                // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);           // Cursor off
  Lcd_Out(1,1,txt1);           // Write text in first row
  Delay_ms(500);
  T1CON=0x30;



/*----------------------------------------------------------------------------*/


  while(1)
  {

  if(cont==2)
  {
  TMR1ON_bit=0;
  periodo=((TMR1H<<8)+TMR1L);
  TMR1H=0;
  TMR1L=0;
  risultato=((60/4e-6)/periodo);
  cont=0;
  WordToStr(risultato,testo);
  Lcd_Out(2,1,testo);
 
  }
  }
}


Ora sul display si visualizza qualcosa ma sono numeri improbabili e troppo alti. A volte salta a oltre 33000 giri senza senso. Cerco di capire dove sta l'errore...
Avatar utente
Foto UtenteEdge
60 1 3
New entry
New entry
 
Messaggi: 98
Iscritto il: 3 ago 2010, 17:22
Località: Ro Ferrarese (Ferrara)

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti