Correzione e consigli su codice un pulsante x una

13 Anni 1 Mese fa #6 da Guido
Ciao, lo provato con PROTEUS non va, al posto dello speaker ho messo un led e questo rimane fisso, non lampeggia, vi ho collegato un oscilloscopio, linea piatta. Per essere certo che il programma DEMO funzionasse vi ho caricato il codice per far laccendere un led alla pressione del pulsante publicato nella guida Step by Step, ha funzionato.
Ripropongo il codice per vedere se qualch'uno trova l'errore.

#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 per alta priorità

// Impostazione e Gestione priorità alta //
#pragma code high_vector = 0x08

void high_interrupt (void) {
_asm GOTO High_Int_Event _endasm //Salto x la gestione dell'interrupt alta priorità
}
#pragma code
#pragma interrupt High_Int_Event

void High_Int_Event (void) { // Funzione x la gestione dell'interruzione ad alta priorità

int i; // indice x il ciclo di pausa

if (INTCONbits.RBIF == 1 ) { //Controllo che l'interrup sia stato generato da PORTB
for (i=0; i<10000; i++) { // Pausa filtraggio spike INTCONbits.TMR0IF == 1
}
if (PORTBbits.RB0 == 0) { // Controllo la pressione di RB0

T0CONbits.T08BIT = 0; //Modalità a 16 bit
T0CONbits.T0CS = 0; //Clok interno
T0CONbits.T0SE = 0; // TMR0 Source Edge Select bit: 0=low/high / 1=high/low
T0CONbits.PSA = 1; //Non abilito Prescaler
T0CONbits.T0PS2 = 0; // bits 2-0 PS2:PS0: Prescaler Select bits
T0CONbits.T0PS1 = 0; //
T0CONbits.T0PS0 = 0; //
TMR0H = 0xE0; // preset for Timer0 MSB register
TMR0L = 0x7F; // preset for Timer0 LSB register

LATCbits.LATC1 = 0x0F; // Esce freq. 620Hz
}
INTCONbits.RBIF == 0; //Resetto il flag x permettere nuove interuzioni

}
}



void main (void){


unsigned int i; //variabile usata per creare un conteggio fittizio


// Imposto PORTA tutti ingrassi
ADCON1 = 0x0F; // Imposto tutti ingressi digitali
PORTA = 0x00;
LATA = 0x00;
TRISA = 0xFF;


// Imposto PORTB tutti ingressi
PORTB = 0x00;
LATB = 0x00;
TRISB = 0xFF;

//Imposto PORTC tutti ingressi ed RC1 come uscita
PORTC = 0x00;
LATC = 0x00;
TRISC = 0b11111101;

// Imposto PORTD tutti ingressi
PORTD = 0x00;
LATD = 0x00;
TRISD = 0xff;

// Imposto PORTE tutti ingressi

PORTE = 0x00;
LATE = 0x00;
TRISE = 0xFF;

EnablePullups (); //Abilito resistori di pullups

INTCONbits.TMR0IF == 1; //Controllo che l'interrup sia stato generato da TMR0
INTCONbits.RBIE = 1; //Abilito le interruzioni su PORTB
INTCON2bits.RBIP = 1; //Abilito le interruzioni su PORTB come alta priorità

INTCONbits.TMR0IE = 1; //Abilito le interruzioni del Timer
INTCON2bits.TMR0IP = 1; //Abilito le interruzioni del Timer come alta priorità
T0CONbits.TMR0ON = 1; //Abilito il Timer0


INTCONbits.GIEH = 1; //Abilito gli interrups ad alta priorità
INTCONbits.TMR0IF == 0; //Resetto il flag x permettere nuove interuzioni

// Ciclo infinito
for (;;) {

} //end for

} // end main


Grazie.

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

  • Guido
  • Platinum Member
  • Platinum Member
Di più
13 Anni 1 Mese fa #7 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Correzione e consigli su codice un pulsante x una
Ciao Guido,

non ho mai usato proteus per simulare i programmi per PIC, per cui non sono certo dei suoi limiti.
Alcune periferiche potrebbero non essere simulabili.

L'esempio che hai simulato e fatto funzionare faceva uso degli interrupt?

Questo weekend rilascio il nuovo PCB di Freedom II (vers. 3).
Della versione attuale ho ancora dei pezzi (vers. 2).
Se vuoi un PCB te ne posso regalare uno (contattami privatamente).

Aggiungi i componenti minimi per sperimentare la tua applicazione e potrai eseguire il codice in pratica.
In questo modo puoi fare delle prove sul banco e non pensare troppo a eventuali limiti del simulatore.

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 1 Mese fa #8 da Guido
Sei troppo gentile, ma ti dico di no, sto abbusando della tua pazzienza e questo mi basta.
Grazie Guido

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

  • Guido
  • Platinum Member
  • Platinum Member
Di più
13 Anni 1 Mese fa #9 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Correzione e consigli su codice un pulsante x una
Non è un problema.
Nel limite del mio tempo tendo sempre a rispondere.
...per esempio questa settimana sono stato un po' impegnato...e non ho risposto. :)

La morale del PCB è che dovresti fare anche qualche esperienza pratica.
Ti assicuro che sbattere la testa per vedere lampeggiare un LED vero da' molte soddisfazioni e dà una maggior sensazione di controllo sul microcontrollore. Nel tuo caso potresti anche usare una breadboard.

Usando i simulatori devi conoscere bene l'ambiente di sviluppo e i limiti che questo può avere.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
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