Pagina 1 di 1

Semplice lampeggio led con 12F683

MessaggioInviato: 16 dic 2012, 19:47
da stainless
Ciao a tutti, come da titolo voglio realizzare un semplice lampeggio led sulla porta GP2 di un pic12F683, questo il codice
Codice: Seleziona tutto
#include <htc.h>
#include "delay.c"

__CONFIG (FCMDIS & IESODIS & BORDIS & UNPROTECT & MCLRDIS & PWRTEN & WDTDIS & INTIO);

#define _XTAL_FREQ 8MHZ
#define LED GPIO2


void main (void) {

//selezione della frequenza dell'oscillatore interno a 8MHz
OSCCON=0b01110000;
//attendo che l'oscillatore si stabilizza
while(!HTS) {}

TRISIO=0b111111011;
GPIO=0;
ADCON0=0;


OPTION=0b10000011; //GPIO pull-ups disabilitate
INTCON=0b00100000; //disabilitato interrupt globale



while(1){
LED^=1;
DelayMs(250);
DelayMs(250);

}//fine while
}//fine main


dovrebbe eseguire all'infinito l'inversione di stato della porta dopo una pausa di circa 500ms ma non so perché la porta resta sempre a livello alto.
Ho controllato con l'oscilloscopio pensando alla routine di ritardo (che peraltro ha sempre funzionato su altri PIC) e in effetti l'uscita è stabile a livello alto.
L'ambiente di sviluppo è MPLAB IDE 8.86 e il programmatore PICkit2, il micro è montato su breadboard al quale è aggiunto solo il led con relativa resistenza limitatrice e alimento per le prove con lo stesso programmatore.
E' la prima volta che programmo questo PIC ho sbagliato forse la configurazione di qualche registro?

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 16 dic 2012, 22:28
da Paolino
Dopo aver compilato, controlla cosa dice la finestra dei configuration bits in merito all'oscillatore interno. Purtroppo non ho ancora installato XC8 e non riesco a vedere cosa accade, usando il tuo codice.

Altra domanda: puoi provare con MPLAB SIM e verificare cosa accade?

Ciao.

Paolo.

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 16 dic 2012, 23:07
da stainless
I bit FOSC<2:0> sono configurati come 100 quindi INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN.
Con MPLAB SIM se elimino la riga while[!HTS] che non riesco a scavalcare, entra nel loop infinito ed esegue il ciclo che avevo previsto.

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 16 dic 2012, 23:12
da Paolino
Forse ho capito. Prova a disabilitare i comparatori interni:

Codice: Seleziona tutto
CMCON0 = 0x07;
ANSEL = 0;
TRISIO=0b111111011;
GPIO=0;
ADCON0=0;


Ciao.

Paolo.

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 16 dic 2012, 23:29
da stainless
Scusami Paolo non ho ancora apportato la modifica che mi hai suggerito perché ho rifatto la simulazione con MPLAB SIM e mi sono accorto che lo stato della porta effettivamente non veniva invertito.
L'istruzione
Codice: Seleziona tutto
LED^=1;

l'ho sostituita con la forma più spartana
Codice: Seleziona tutto
LED=1;
DelayMs(250);
DelayMs(250);
LED=0;
DelayMs(250);
DelayMs(250);

e funziona.
Eppure ho già usato in passato l'operatore XOR....

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 17 dic 2012, 7:08
da Paolino
La cosa è in effetti curiosa... Prova anche con la disabilitazione dei comparatori, scrica il fw e poi racconta cosa è accaduto.

Ciao.

Paolo.

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 17 dic 2012, 23:09
da stainless
Foto UtentePaolino non so che dirti, ho ricompilato il codice con l'operatore XOR e ora funziona :shock: probabilmente avevo fatto qualche errore che ho risolto senza neppure rendermene conto #-o .
Comunque ho seguito il tuo consiglio disabilitando i comparatori, dato che al momento non mi servono risparmierò una manciata di uA
O_/

Re: Seplice lampeggio led con 12F683

MessaggioInviato: 17 dic 2012, 23:10
da Paolino
Bene, Foto Utentestainless: sono contento che sia tutto ok :ok:

Ciao.

Paolo.