- Messaggi: 46
- Ringraziamenti ricevuti 1
esempio interrupt
13 Anni 7 Mesi fa #1
da crosby
esempio interrupt è stato creato da crosby
Ciao
Ho studiato con interesse la parte sugli interrupt (La mia esperienza è con quelli della serie 16). Nell'esempio riportato a pag 149-150 viene abilitato il bit PEIE registro INTCON per l'interrupt su periferiche ma non è proprio necessario? ho provato a toglierlo e ricompilare e va bene ugualmente.
Un saluto
fabio Milano
Ho studiato con interesse la parte sugli interrupt (La mia esperienza è con quelli della serie 16). Nell'esempio riportato a pag 149-150 viene abilitato il bit PEIE registro INTCON per l'interrupt su periferiche ma non è proprio necessario? ho provato a toglierlo e ricompilare e va bene ugualmente.
Un saluto
fabio Milano
Si prega Accedi o Crea un account a partecipare alla conversazione.
- crosby
- Autore della discussione
- Senior Member
Riduci
Di più
13 Anni 7 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: esempio interrupt
Ciao Fabio,
il programa funziona ugualmente poiche' di Default il bit PEIE vale 1 (dopo un Reset).
Ho scritto ugualmente l'istruzione come passo concettuale. Visto che in generale questo bit potrebbe per altre ragioni essere disattivato. Ho inoltre preferito mettere il passaggio visto il doppio significato dello stesso, a seconda che si stiano usando o meno i due livelli di priorita'.
Saluti,
Mauro
il programa funziona ugualmente poiche' di Default il bit PEIE vale 1 (dopo un Reset).
Ho scritto ugualmente l'istruzione come passo concettuale. Visto che in generale questo bit potrebbe per altre ragioni essere disattivato. Ho inoltre preferito mettere il passaggio visto il doppio significato dello stesso, a seconda che si stiano usando o meno i due livelli di priorita'.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
13 Anni 7 Mesi fa #3
da crosby
Risposta da crosby al topic Re: esempio interrupt
ti ringrazio
adesso sto lavorando sul capitolo 11, ho preparato un softwarino che fa le cose dell'esempio 1 (+ semplicemente senza fare la media però) usando direttamente le funzioni di libreria.
Ho preparato un file .h dove ho messo tutte le inizializzazioni della scheda (non mi sembra una brutta idea mi fa risprmiare del tempo e poi il main è più "pulito").
La funzione OpenADC riporta (pag. 220) il param config2 che contiene il canale analogico, ma a cosa serve? questa informazione viene poi specifata nella lettura vera e propria (istruzione SetChanADC oppure SelChanConvADC).
Ti segnalo ad inizio capitolo pag.208 riga 5 un termine ditale che dovrebbe essere digitale
un saluto
fabio Milano
freedom.h
main.c
adesso sto lavorando sul capitolo 11, ho preparato un softwarino che fa le cose dell'esempio 1 (+ semplicemente senza fare la media però) usando direttamente le funzioni di libreria.
Ho preparato un file .h dove ho messo tutte le inizializzazioni della scheda (non mi sembra una brutta idea mi fa risprmiare del tempo e poi il main è più "pulito").
La funzione OpenADC riporta (pag. 220) il param config2 che contiene il canale analogico, ma a cosa serve? questa informazione viene poi specifata nella lettura vera e propria (istruzione SetChanADC oppure SelChanConvADC).
Ti segnalo ad inizio capitolo pag.208 riga 5 un termine ditale che dovrebbe essere digitale
un saluto
fabio Milano
freedom.h
main.c
Si prega Accedi o Crea un account a partecipare alla conversazione.
- crosby
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 46
- Ringraziamenti ricevuti 1
13 Anni 7 Mesi fa #4
da crosby
Risposta da crosby al topic Re: esempio interrupt
PERCHE' NON RIESCO AD AGGIUNGERE GLI ALLEGATI?
questo è il main.c
#include "freedom.h"
#include <adc.h>
#define LCD_DEFAULT
#include <LCD_44780.h>
void main()
{
int valore;
InitFreedom();
OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_8_TAD,
ADC_CH1 & ADC_REF_VDD_VSS & ADC_INT_OFF,
ADC_3ANA);
OpenLCD(20);
CursorLCD(TURN_OFF, BLINK_OFF);
HomeLCD();
BacklightLCD(TURN_ON);
WriteStringLCD("valore = ");
while (1)
{
SelChanConvADC(TRIMMER);
//SetChanADC(TRIMMER); ConvertADC();
while (BusyADC() != 0);
valore = ReadADC();
WriteIntLCD(valore, 4);
ShiftCursorLCD(LEFT, 4);
}
}
questo è il freedom.h
/*
freedom.h
=========
*/
#include <p18f4550.h>
#pragma config FOSC = HS
#pragma config WDT = OFF, LVP = OFF, PBADEN = OFF
//
#define BT1 PORTBbits.RB4
#define BT2 PORTBbits.RB5
#define BT3 PORTBbits.RB6
#define BT4 PORTBbits.RB7
#define LED1 LATDbits.LATD0
#define LED2 LATDbits.LATD1
#define LED3 LATDbits.LATD2
#define LED4 LATDbits.LATD3
#define LED5 LATDbits.LATD4
#define LED6 LATDbits.LATD5
#define LED7 LATDbits.LATD6
#define LED8 LATDbits.LATD7
#define PORTA_LED LATD
#define BACK_LIGHT LATCbits.LATC1
#define BUZZER LATCbits.LATC0
#define SENSORE_LUCE ADC_CH0 //AN0
#define TRIMMER ADC_CH1 //AN1
#define SENSORE_TEMPERATURA ADC_CH2 //AN2
void InitFreedom();
void InitFreedom()
{
//ADCON1 = 0x0F; //imposta tutte le porte come I/O digitali
ADCON1 = 0b1100;
INTCON2bits.RBPU = 0; //abilita le R di pull-up sulla porta B
LATA = 0; TRISA = 0b00000111; //analogical input
LATB = 0; TRISB = 0b11110000; //four user buttons
LATC = 0; TRISC = 0b00000000;
LATD = 0; TRISD = 0b00000000; //leds + LCD
LATE = 0; TRISE = 0b00000000;
}
questo è il main.c
#include "freedom.h"
#include <adc.h>
#define LCD_DEFAULT
#include <LCD_44780.h>
void main()
{
int valore;
InitFreedom();
OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_8_TAD,
ADC_CH1 & ADC_REF_VDD_VSS & ADC_INT_OFF,
ADC_3ANA);
OpenLCD(20);
CursorLCD(TURN_OFF, BLINK_OFF);
HomeLCD();
BacklightLCD(TURN_ON);
WriteStringLCD("valore = ");
while (1)
{
SelChanConvADC(TRIMMER);
//SetChanADC(TRIMMER); ConvertADC();
while (BusyADC() != 0);
valore = ReadADC();
WriteIntLCD(valore, 4);
ShiftCursorLCD(LEFT, 4);
}
}
questo è il freedom.h
/*
freedom.h
=========
*/
#include <p18f4550.h>
#pragma config FOSC = HS
#pragma config WDT = OFF, LVP = OFF, PBADEN = OFF
//
#define BT1 PORTBbits.RB4
#define BT2 PORTBbits.RB5
#define BT3 PORTBbits.RB6
#define BT4 PORTBbits.RB7
#define LED1 LATDbits.LATD0
#define LED2 LATDbits.LATD1
#define LED3 LATDbits.LATD2
#define LED4 LATDbits.LATD3
#define LED5 LATDbits.LATD4
#define LED6 LATDbits.LATD5
#define LED7 LATDbits.LATD6
#define LED8 LATDbits.LATD7
#define PORTA_LED LATD
#define BACK_LIGHT LATCbits.LATC1
#define BUZZER LATCbits.LATC0
#define SENSORE_LUCE ADC_CH0 //AN0
#define TRIMMER ADC_CH1 //AN1
#define SENSORE_TEMPERATURA ADC_CH2 //AN2
void InitFreedom();
void InitFreedom()
{
//ADCON1 = 0x0F; //imposta tutte le porte come I/O digitali
ADCON1 = 0b1100;
INTCON2bits.RBPU = 0; //abilita le R di pull-up sulla porta B
LATA = 0; TRISA = 0b00000111; //analogical input
LATB = 0; TRISB = 0b11110000; //four user buttons
LATC = 0; TRISC = 0b00000000;
LATD = 0; TRISD = 0b00000000; //leds + LCD
LATE = 0; TRISE = 0b00000000;
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- crosby
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 46
- Ringraziamenti ricevuti 1
13 Anni 7 Mesi fa #5
da Gianni
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Risposta da Gianni al topic Re: esempio interrupt
Se può essere utile, ne approfitto per segnalare qui un articolo che ho scritto tempo fa sulla comparazione della gestione degli interrupt sulle varie serie di pic:
www.settorezero.com/wordpress/la-gestion...6-pic18-pic24-dspic/
www.settorezero.com/wordpress/la-gestion...6-pic18-pic24-dspic/
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.