| 
 Le stesse considerazioni valgono per i PIC della famiglia 16F183xx
  (16F18323/324/325/326 a 14 pin e /344/345/346 a 20 pin) che hanno tutti in
  comune lo stesso modulo oscillatore, così pure in generale, i modelli
  16F18xxx che hanno oscillatori simili.
   
 RA5 non funziona...
 Un caso che è
  venuto all'attenzione dei forum è quello che suona così: "Con il
  16F18313... ho fatto tutto quello che serve e il LED su RA5 non lampeggia
  neanche per sbaglio...". Non sempre si trovano risposte
  sensate.
 E se vi rivolgeste al costruttore, sareste tacciati di non aver letto il
 volumefoglio dati...
 Ed effettivamente è così: la risposta è chiaramente leggibile nel foglio
  dati, in una delle sue 471 pagine !
 Il fatto è che la
  causa del problema è al di fuori delle normali aspettative e non
  immediatamente individuabile.
 Si tratta di questo:  in questo PIC, RC5 per default non è un I/O
  "normale", ma è l'ingresso dell'oscillatore esterno OSC1.
 Così, se voglio utilizzare RC5 come normale I/O, devo escludere questa
  funzione di default o "Basic".
 E questo è possibile non da uno special function
  register, ma solo dalla configurazione iniziale.
 
 Se osserviamo la TABLE 1,
  vediamo la situazione delle allocazioni delle varie funzioni integrate
  rispetto ai pin.Dato che negli Enhanced, al default, le funzioni sono disattivate, ci dobbiamo preoccupare solo
  di quanto decidiamo di usare.
 Se ci limitiamo ad una lettura superficiale della tabella, RA4
  e RA5 sono i soliti I/O. Basterà
  disabilitare AN4 e AN5 per usarli come digitali.
 
 E qui sta il problema: RA4 e RA5
  sono anche CLKOUT e CLKIN. 
  Normalmente CLKOUT è comune a tutti i
  chip, quindi è noto che per usare il pin, devo mettere nel config  CLKOUT=OFF
  
  per liberare  RA4.
 E se non mi interessano oscillatori esterni, non ho altro da fare. Non,
  però, in questo caso dove è "Basic" anche il CLKIN,
  il che impedisce l'uso del corrispondente pin RA5
  come digitale.
 Lo vediamo in un'altra tabella. 
 Qui possiamo rilevare che l'oscillatore di default è scelto dai bit FEXTOSC<2:0>:
  il valore di default di questi bit è 111,
  ovvero viene selezionato un clock esterno ECH.  Ecco che RA5
  è l'ingresso di tale oscillatore ! Per liberare RA5 dobbiamo
  configurare FEXTOSC<2:0>=100  , disabilitando
  la funzione, il che equivale a FEXTOSC=OFF nel
  Config.
 Intendiamoci: non c'è niente di strano nel fatto che alcuni pin abbiano una
  allocazione Basic.
  Quello che ha creato il problema è la struttura del clock che è centrata
  sull'uso di oscillatori esterni e rende  Basic anche l'ingresso di
  questi, cosa non comune nei PIC più datati.
 
 Altri pin Basic. Gli altri pin "Basic" sono comuni ai PIC. 
    
      RA3 è di default MCLR. Disabilitando la funzione si ottiene
  l'I/O. L'azione è il solito:  MCLRE = OFF 
       RA<1:0>  sono i
      pin della comunicazione ICSP/ICD. Normalmente sono I/O, ma diventano accessi
      ICSP/ICD sotto controllo dell'ambiente di sviluppo. 
       
  In CONFIG, l'opzione DEBUG non va toccata e
  lasciata a 1, come da default. E' gestita in automatico dall'ambiente di
      sviluppo e dai suoi tool. 
 RC5 lampeggia!!
   Ecco un breve esempio:
  // LED collegato a RA5 lampeggia// RA3 e RA4 come I/O
 // clock interno da 1 MHz
 // 16F18313
 #include <xc.h> #define _XTAL_FREQ 1000000    
  // clock 1MHz#define LED LATA5
 #pragma config
  FEXTOSC = OFF   // usa RC5 - EXTOSC disabilitato#pragma config RSTOSC = HFINT1 // HFINTOSC (1MHz)
 #pragma config CLKOUTEN = OFF  // Usa RA4 CLKOUT
  disabilitato
 #pragma config CSWEN = ON     
  // modifiche clock con NOSC NDIV
 #pragma config FCMEN = OFF     // no fail-safe
 #pragma config MCLRE = OFF     //
  Usa RA3, no MCLR
 #pragma config PWRTE = ON      // PWRT abilitato
 #pragma config WDTE = OFF      // no watchdog
 #pragma config LPBOREN = OFF   // no BOR a basso consumo
 #pragma config BOREN = OFF     // no Brown-out
 #pragma config BORV = LOW      // (Vbor) 2,45 V
 #pragma config PPS1WAY = OFF   // modifiche funzione PPS abilitata
 #pragma config STVREN = ON     // errore overflow dello
  stack abilitato
 #pragma config WRT = OFF       // no protezione
  scrittura area ROM
 #pragma config LVP = OFF       // no programmazione
  a bassa tensione
 #pragma config CP = OFF        // no protezione
  area ROM
 #pragma config CPD = OFF       // no protezione
  area EEPROM
 void main(void) {TRISA
  = 0b011111;            
  // RA5 outANSELA =
  0;                  
  // no analogiche
 
  while(1){                    
  // ciclo di lampeggioLED = !LED;
 __delay_ms(500);
 }
 }
 
  
 |