Hello World, una variazione sul tema
Ogni tanto, lettori de Pillole di microcontrollori PIC mi rivolgono qualche domanda, qualche chiarimento. Se posso, cerco di essere di aiuto. Questa volta è
Cseven che mi chiede sostanzialmente come poter accendere un LED seguendo l'esempio di Hello World, impiegando PICKit3 e la scheda di valutazione che Microchip propone.
Cosa fa Hello World? Sul libro si punta ad accendere un singolo LED, connesso a RB0 di PIC16F876A, secondo questo schema semplificato:
Sulla scheda di Microchip, che utilizza un PIC18F45K20, invece, la porta RB0 è connessa ad un pulsante, secondo questo schema di collegamento:
Sempre su quella scheda, 8 LED sono connessi a PORTD, come indicato nel seguito:
Va detto inoltre che il PIC18F45K20, a differenza del PIC16F876A, dispone di un oscillatore interno, benché la scheda abbia a bordo un quarzo da 10MHz ed uno da 32KHz.
Lo strumento da impiegare per compilare l'esercizio è MikroC.
Fatte queste doverose premesse, ho "sparigliato un po' le carte". Dato che
Cseven ha a disposizione 8 LED ho pensato di modificare il programma eseguendo uno shift register, ed eccolo qui:
Il programma originale si basava su PORTB, questo invece impiega PORTD. Inoltre si sfrutta l'oscillatore interno, che viene impostato a 8MHz.
Va detto inoltre che al momento stiamo utilizzando MikroC 6.00, mentre in origine si utilizzava la versione 2.50 ma questo non va inficiare gli effetti della compilazione, dato che si parla di un programmino davero semplice. Ad ogni modo queste sono le impostazioni di progetto dei configuration bit impiegate:
Qualche riferimento:
PIC16F876A
PIC18F45K20
PICKit3 44-pin demoboard user's guide
Compilatore MikroC
Spero di aver aiutato a chiarire un po' le idee.
Ciao.
Paolo.
Cosa fa Hello World? Sul libro si punta ad accendere un singolo LED, connesso a RB0 di PIC16F876A, secondo questo schema semplificato:
Sulla scheda di Microchip, che utilizza un PIC18F45K20, invece, la porta RB0 è connessa ad un pulsante, secondo questo schema di collegamento:
Sempre su quella scheda, 8 LED sono connessi a PORTD, come indicato nel seguito:
Va detto inoltre che il PIC18F45K20, a differenza del PIC16F876A, dispone di un oscillatore interno, benché la scheda abbia a bordo un quarzo da 10MHz ed uno da 32KHz.
Lo strumento da impiegare per compilare l'esercizio è MikroC.
Fatte queste doverose premesse, ho "sparigliato un po' le carte". Dato che
- Codice: Seleziona tutto
#define ALL_PORT_OUTPUT 0x00
#define ALL_PORT_INPUT 0xFF
/* Prototipi di funzione */
void InitPic (void);
void main()
{
unsigned char index;
InitPic(); /* Inizializza il PIC */
/* Esecuzione dello shift register */
while (1)
{
for (index=0;index<8;index++)
{
LATD = 0;
LATD = (1<<index);
delay_ms(200);
}
}
}
void InitPic (void)
{
/* Oscillatore interno, 8MHz */
OSCCON = 0x60;
/* In attesa di frequenza stabile... */
while (!IOFS_bit);
/* Setup porte: PORTD tutta output */
TRISD = ALL_PORT_OUTPUT;
}
Il programma originale si basava su PORTB, questo invece impiega PORTD. Inoltre si sfrutta l'oscillatore interno, che viene impostato a 8MHz.
Va detto inoltre che al momento stiamo utilizzando MikroC 6.00, mentre in origine si utilizzava la versione 2.50 ma questo non va inficiare gli effetti della compilazione, dato che si parla di un programmino davero semplice. Ad ogni modo queste sono le impostazioni di progetto dei configuration bit impiegate:
Qualche riferimento:
PIC16F876A
PIC18F45K20
PICKit3 44-pin demoboard user's guide
Compilatore MikroC
Spero di aver aiutato a chiarire un po' le idee.
Ciao.
Paolo.



