Ancora problemi con codice TIMER

13 Anni 8 Mesi fa #6 da Guido
Risposta da Guido al topic Re: Ancora problemi con codice TIMER
Salve, ho cambiato il valore della resistenza, purtroppo non posso porvare il codice dal vivo, volevo provare a far almpeggiare il led all frequenza voluta al premere del pulsante, ho provato a dare priorita alta e assegnare lo stesso led al pulsante ma non sono riuscito, una dritta (pezzetto di codice) per pilotarlo?
Grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Guido
  • Platinum Member
  • Platinum Member
Di più
13 Anni 8 Mesi fa #7 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Ancora problemi con codice TIMER
Ciao Guido,

prova ad usare un solo livello di priorità. Un esempio e' riportato sul testo.
Rispetto all'esempio metti tutto dentro la routine di gestione dell'interrupt.

Tutte le periferiche devono avere il bit di priorità settato su alto (valore di defualt) visto che il livello basso non viene più eseguito.

Non escludo in ogni modo che il codice abbia degli errori d'impostazione dei livelli di priorità o impostazioni.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
13 Anni 8 Mesi fa #8 da Guido
Risposta da Guido al topic Re: Ancora problemi con codice TIMER
Grazie dei consigli che mi ha fornito. Celo fatta ora premo il pulsante e lampeggia il led alla frequenza che ho settato. Una domanda come posso aggingere un altro pulsante per dargli un altra frequenza?
Allego codice:

# include <p18f4550.h>
# include <portb.h>

#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF


//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici



void High_Int_Event (void); //Prototipo di funzione basa priorità



#pragma code high_vector = 0x08
void high_interrupt (void) {
_asm GOTO High_Int_Event _endasm
}


#pragma code

#pragma interrupt High_Int_Event
void High_Int_Event (void) { //Funzione x la gestione dell'interrupt bassa priorità
int i; // Indice x il ciclo di pausa


if (( INTCONbits.RBIF == 1 ) && (INTCONbits.TMR0IF == 1)) { //Controllo che l'interrupt sia stato generato da PORTB
for (i=0; i<10000; i++) { //Pausa filtraggio spike
}
if (PORTBbits.RB4 == 0) { //Controllo la pressione di RB4
LATDbits.LATD1 = ~ LATDbits.LATD1; //Accendo il Led 1
}
INTCONbits.RBIF == 0; //Resetto il flag
INTCONbits.TMR0IF = 0; // Resetto il flag
}
}





void main (void) {
unsigned int i; //Variabile usata per creare un conteggio fittizio di pausa


//Imposto PORTA tutti ingrrssi

LATA = 0x00;
TRISA = 0xFF;

//Imposto PORTB tutti ingrrssi

LATB = 0x00;
TRISB = 0xFF;

//Imposto PORTC tutti ingressi

LATC = 0x00;
TRISC = 0xFF;

//Imposto PORTD tutte uscite

LATD = 0x00;
TRISD = 0x00;

//Imposto PORTE tutti ingrrssi

LATE = 0x00;
TRISE = 0xFF;


EnablePullups (); //Abilita i resistori di PUL-UP sulla PORTB




T0CONbits.TMR0ON = 1;// Timer0 On/Off Control bit:1=Enables Timer0 / 0=Stops Timer0
T0CONbits.T08BIT = 0;// Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
T0CONbits.T0CS = 0;// TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
T0CONbits.T0SE = 0;// TMR0 Source Edge Select bit: 0=low/high / 1=high/low
T0CONbits.PSA = 0;// Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
T0CONbits.T0PS2 = 0;// bits 2-0 PS2:PS0: Prescaler Select bits
T0CONbits.T0PS1 = 0;
T0CONbits.T0PS0 = 0;
TMR0H = 0xF9; // preset for Timer0 MSB register
TMR0L = 0x7D; // preset for Timer0 LSB register



INTCONbits.TMR0IE = 1; //Abilito le interruzioni del timer0

INTCON2bits.TMR0IP = 1; //Abilito le interruzioni del Timer come alta priorità



//Abilito le interruzioni

RCONbits.IPEN = 1; //Abilito interruzioni alta e bassa priorità


INTCONbits.GIEH = 1; //Abilito gli interrupt ad alta priorità

INTCONbits.GIEL = 0; //1Abilito gli interrupt a bassa priorità

while (1) { //Ciclo infinito

}
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Guido
  • Platinum Member
  • Platinum Member
Di più
13 Anni 8 Mesi fa #9 da Spazzoli
Risposta da Spazzoli al topic Re: Ancora problemi con codice TIMER
Provo a risponderti io, non garantisco però eh...:P
Direi che all'interno della routine di interrupt devi separare due casi, a seconda di quale pulsante venga premuto, e poi tutte le volte che individui la press del pulsante tari il timer in base alla frequenza che vuoi...

anto.spax
youtube robot gallery:
www.youtube.com/user/antospax?feature=mhum

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Spazzoli
  • Avatar di Spazzoli
  • Senior Member
  • Senior Member
Di più
13 Anni 8 Mesi fa #10 da Guido
Risposta da Guido al topic Re: Ancora problemi con codice TIMER
Grazie per avermi risposto, però portami un esempio di codice ho provato ma non sono riuscito.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Guido
  • Platinum Member
  • Platinum Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login