Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata
10
voti

Compatibilità fra Pierin PIC18 e MikroC


Il Pierin Pic18, gentilmente concessoci dal buon TardoFreak, è sempre più famoso sul forum. Tuttavia qualcuno potrebbe avere riscontrato delle difficoltà nell'interfacciarlo con l'altrettanto popolare MikroC, ambiente di sviluppo user-friendly adatto anche a chi, pur non avendo un'immensa padronanza del funzionamento dei PIC, vuole comunque cimentarsi nella loro programmazione.


Se anche voi come me, dopo aver ordinato il Pierin siete corsi a vedere se il P18F47J53 (protagonista della scheda didattica) compariva fra i PIC supportati dal vostro IDE preferito, avrete provato grande gioia nel trovarlo nella lista! Ma grande delusione, d'intensità uguale e contraria (secondo la terza legge di Newton ), avrete provato nel constatare che il Pierin non digeriva alcun programma che gli davate in pasto. Se non avete ancora defenestrato il vostro pc per la stizza, ho qui una soluzione semplice ed efficace per ovviare al problema. E' sufficiente inserire nel progetto di MikroC il seguente codice (magari salvarlo come "progetto base"), e incollare il vostro programma, nella sua interezza, dove indicato.

{
void main();
void interrupt() {
     //USB Interrupt
     //USB_Interrupt_Proc();
}
void interrupt_low() {
}
//Remapping needed to use with boot loader
void Vectors() org 0x1000 {
     asm {
         goto   _main                   //0x1000
         nop
         nop
         goto   _interrupt              //0x1008
         nop
         nop
         nop
         nop
         nop
         nop
         goto   _interrupt_low          //0x1018
     }
}
void main() {
     //Make sure entire program starts at 0x1000 which is where the boot loader finishes for PIC18F47J53
     OrgAll(0x1000);
     //ASM Command to avoid optimization which ensures Vectors will be remapped correctly
     asm { goto Skip_Vectors }
     Vectors();
     asm { Skip_Vectors: }

    // INSERIRE DA QUI IL PROPRIO PROGRAMMA     

}
}

Questa soluzione non è stata trovata da me ma dall'utente c1b8 al quale va il merito, e il quale afferma inoltre che con questo codice: "...funzioneranno tutti i tuoi programmi che andrai a caricare in un pic, qualsiasi pic, attraverso il bootloader HID della Microchip."

Eccovi un piccolo esempio:

{
void main();
void interrupt() {
     //USB Interrupt
     //USB_Interrupt_Proc();
}
void interrupt_low() {
}
//Remapping needed to use with boot loader
void Vectors() org 0x1000 {
     asm {
         goto   _main                   //0x1000
         nop
         nop
         goto   _interrupt              //0x1008
         nop
         nop
         nop
         nop
         nop
         nop
         goto   _interrupt_low          //0x1018
     }
}
void main() {
     //Make sure entire program starts at 0x1000 which is where the boot loader finishes for PIC18F47J53
     OrgAll(0x1000);
     //ASM Command to avoid optimization which ensures Vectors will be remapped correctly
     asm { goto Skip_Vectors }
     Vectors();
     asm { Skip_Vectors: }

    // INSERIRE DA QUI IL PROPRIO PROGRAMMA  

ANCON0  = 1;
 ANCON1  = 0;
 CM1CON = 0;
 CM2CON = 0;
  TRISA  = 0xFF;
  TRISC  = 0; 
                 TRISB  = 0; 
                do {
    temp_res = ADC_Read(0); 
     PORTB = temp_res;  
           PORTC = temp_res >> 8;    
  } while(1);

}

}

Il programma, come vedete, va aggiunto proprio sotto la scritta. In particolare questo programma, originario della libreria di esempi di MikroC e modificato per funzionare a dovere sul Pierin, serve per leggere dal pin RA0 una tensione, convertirla da analogica a digitale e rappresentarne il valore. I due "most significant bits" usciranno dai pin RC1 ed RC0, mentre tutti gli altri andranno alla PORTB.

1

Commenti e note

Inserisci un commento

di ,

Bravo! Sicuramente utile! ;)

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.