Stesso sorgente, pic diverso, diverso risultato...
- ElleErre
-
Autore della discussione
- Nuovo Utente
-
Less
Di più
14 Anni 2 Mesi fa - 14 Anni 2 Mesi fa #1
da ElleErre
ElleErre
Stesso sorgente, pic diverso, diverso risultato... è stato creato da ElleErre
Ho nuovamente bisogno di aiuto e mi cospargo il capo di cenere.
Nel corso C18 di Mauro c'e' un esempio (perfettamente funzionate su 4550) dell'utilizzo dell'interrupt (Cap.8, pag. 173).
Ho provato a ricompilare il tutto per 18F45k20 e, alla pressione del tasto, non vedo cambiare lo stato del led, come invece dovrebbe.
Il led del Timer0, invece, funziona perfettamente.
Secondo me, nonostante i vari settaggi, le porte RB1...RB4 restano analogiche, ma non sono certo di questo.
Preso dal dubbio, ho pure provato con un 45K20 formato DIP - nessuna variazione
Nel datasheet c'e' uan nota: " ... RB port change interrupts also require the individual pin IOCB enables."
Ho provato anche questo, ma nulla.
Questo il sorgente modificato...
... di questo passo, nel mio avatar, al posto del pic ci metto la mia testa
Grazie per il vostro aiuto!
Nel corso C18 di Mauro c'e' un esempio (perfettamente funzionate su 4550) dell'utilizzo dell'interrupt (Cap.8, pag. 173).
Ho provato a ricompilare il tutto per 18F45k20 e, alla pressione del tasto, non vedo cambiare lo stato del led, come invece dovrebbe.
Il led del Timer0, invece, funziona perfettamente.
Secondo me, nonostante i vari settaggi, le porte RB1...RB4 restano analogiche, ma non sono certo di questo.
Preso dal dubbio, ho pure provato con un 45K20 formato DIP - nessuna variazione
Nel datasheet c'e' uan nota: " ... RB port change interrupts also require the individual pin IOCB enables."
Ho provato anche questo, ma nulla.
Questo il sorgente modificato...
Code:
/* settaggi per 18F4550
#include <p18f4550.h>
#include <portb.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
*/
#include <p18f45k20.h>
#include <portb.h>
#pragma config FOSC = HS, FCMEN = OFF, IESO = OFF
#pragma config PWRT = OFF, BOREN = OFF, BORV = 30
#pragma config WDTEN = OFF, WDTPS = 32768
#pragma config MCLRE = ON, LPT1OSC = OFF
#pragma PBADEN = OFF // forzo porte B in digitale
#pragma CCP2MX = PORTC
#pragma config STVREN = ON, LVP = OFF, XINST = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
#pragma config EBTRB = OFF
void Low_Int_Event (void);
void High_Int_Event (void);
#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)
{
int i;
LATDbits.LATD2 = ~LATDbits.LATD2; // aggiunto per test - non cambia stato
if (INTCONbits.RBIF == 1 )
{
LATDbits.LATD3 = ~LATDbits.LATD3; // aggiunto per test - non cambia stato
for (i=0; i<10000; i++){}
if (PORTBbits.RB4 == 0) // se porta B4.. allora
{
LATDbits.LATD1 = ~LATDbits.LATD1; // non cambia stato
}
INTCONbits.RBIF = 0;
}
}
#pragma code low_vector = 0x18
void low_interrupt (void)
{
_asm GOTO Low_Int_Event _endasm
}
#pragma code
#pragma interruptlow Low_Int_Event
void Low_Int_Event (void)
{
if (INTCONbits.TMR0IF == 1 )
{
LATDbits.LATD0 = ~LATDbits.LATD0; // led funziona
INTCONbits.TMR0IF = 0;
}
}
//************************************************************
// main program
//************************************************************
void main (void)
{
unsigned int i;
LATA = 0x00; // ports A,B,C all inputs
TRISA = 0xFF;
LATB = 0x00;
TRISB = 0xFF;
LATC = 0x00;
TRISC = 0xFF;
LATD = 0x00; // port D output
TRISD = 0x00;
LATE = 0x00; // port E input
TRISE = 0xFF;
EnablePullups();
INTCONbits.RBIE = 1; // interrupt on port B enabled
INTCON2bits.RBIP = 1; // high priority
T0CONbits.T08BIT = 0; // 16 bit on
T0CONbits.T0CS = 0; // internal clock
T0CONbits.PSA = 0; // prescaler
T0CONbits.T0PS0 = 0; // prescaler 32
T0CONbits.T0PS1 = 0;
T0CONbits.T0PS2 = 1;
INTCONbits.TMR0IE = 1; // timer 0 interrupt
INTCON2bits.TMR0IP = 0; // low priority
T0CONbits.TMR0ON = 1; // timer 0 on
RCONbits.IPEN = 1;
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1 ;
while (1){ }
}
... di questo passo, nel mio avatar, al posto del pic ci metto la mia testa

Grazie per il vostro aiuto!
ElleErre
Ultima Modifica 14 Anni 2 Mesi fa da admin.
Si prega Accesso o Crea un account a partecipare alla conversazione.
14 Anni 2 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Stesso sorgente, pic diverso, diverso risultato...
Ciao,
non ho usato il PIC specifico a cui fai riferimento, ma nel programma di esempio che hai messo non trovo la configurazione del registro IOCB a cui fa riferimento il datasheet.
Saluti,
Mauro
non ho usato il PIC specifico a cui fai riferimento, ma nel programma di esempio che hai messo non trovo la configurazione del registro IOCB a cui fa riferimento il datasheet.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
14 Anni 2 Mesi fa - 14 Anni 2 Mesi fa #3
da ElleErre
ElleErre
Risposta da ElleErre al topic Re: Stesso sorgente, pic diverso, diverso risultato...
Cosi' funziona:
Code:
(...)
LATA = 0b00000000;
LATB = 0b00000000;
LATC = 0b00000000;
LATD = 0b00000000;
LATE = 0b00000000;
TRISA = 0b00000011;
TRISB = 0b11111111;
TRISC = 0b11111100;
TRISD = 0b00000000;
TRISE = 0b00000000;
//************************************************************
// Abilito i pulsanti per le interruzioni ad alta priorita'
//************************************************************
// Abilita i resistori di pull-up sulla PORTB
EnablePullups();
IOCB = 0b11110000;
(...)
ElleErre
Ultima Modifica 14 Anni 2 Mesi fa da admin.
Si prega Accesso o Crea un account a partecipare alla conversazione.
14 Anni 2 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Stesso sorgente, pic diverso, diverso risultato...
perfetto,
quindi hai abilitato i resistori di pull-up prima di abilitare le interruzioni sui singoli pin.
Saluti,
Mauro
quindi hai abilitato i resistori di pull-up prima di abilitare le interruzioni sui singoli pin.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti