Progetti

   

Sponsor

   

Servizi

   
Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: __delay_ms(1000) sembra non funzionare

__delay_ms(1000) sembra non funzionare 1 Anno 3 Mesi fa #11

  • Cosimix
  • Avatar di Cosimix
  • Offline
  • Gold Boarder
  • Messaggi: 189
  • Ringraziamenti ricevuti 22
  • Karma: 3
Salve!

I pic non sono taroccati (credo) e non penso tu li abbia bruciati.
Nel momento in cui imposti i pin come outuput devi disabilitare correttamente i comparatori. Inserisci la seguente riga (vedi i dettagli nel datasheet):
CMCON0  = 0x07;
oppure
CMCON0  = 0b00000111;
Quando hai riportato i due esempi con i due differenti pic, per il 12F683 hai aggiunto il registro CMCON0, ma hai settato tutto a zero.
Facci sapere se il pic è ancora nel tuo laboratorio :unsure: :lol:.

Saluti,
Cosimo
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: Lello Guidi

__delay_ms(1000) sembra non funzionare 1 Anno 3 Mesi fa #12

  • Lello Guidi
  • Avatar di Lello Guidi
  • Offline
  • Platinum Boarder
  • Messaggi: 370
  • Ringraziamenti ricevuti 9
  • Karma: 3
Mauro Laurenti ha scritto:
Salve Lello

Non ho controllato gli header file ma non sono certo se GP0 sia definito come GPIObits.GP0.

Saluti,

Mauro

Ho cercato i "Hider file" sia nella directory del MPLAB X che nella XC8 e non avendo idea di cosa trovare ne che desinenza posso avere i file, non ho trovato niente.
Saluti

Lello
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

__delay_ms(1000) sembra non funzionare 1 Anno 3 Mesi fa #13

  • Lello Guidi
  • Avatar di Lello Guidi
  • Offline
  • Platinum Boarder
  • Messaggi: 370
  • Ringraziamenti ricevuti 9
  • Karma: 3
Cosimix ha scritto:
Salve!

Facci sapere se il pic è ancora nel tuo laboratorio :unsure: :lol:.

Saluti,
Cosimo
Ho aggiunto al sorgente il ADCOM0 come consigliato e adesso funziona tutto regolarmente.
Proverò a testare anche gli altri tre 12F683 per verificare se sono alche loro funzionanti. :)
Saluti

Lello
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

__delay_ms(1000) sembra non funzionare 1 Anno 3 Mesi fa #14

  • Lello Guidi
  • Avatar di Lello Guidi
  • Offline
  • Platinum Boarder
  • Messaggi: 370
  • Ringraziamenti ricevuti 9
  • Karma: 3
Anche gli altri 12F683 funzionano regolarmente.
Poi ho voluto inserire un ciclo di "for" per tenere attratto il relè 5 secondi ma non mi funziona.
Inoltre quando ho l'ingresso Adc inferiore alla soglia mi si accende regolarmente il Ledrosso ma l'altro led che funge da relè rimane acceso con una luce più debole, non si spegne completamente.
Inoltre non temporizza i 5 secondi impostato nel ciclo For.
Il sorgente è il seguente:
/***********************  ******************************
* Fotocellula v2.0
* modulo: Fotocellula.x
* data: 25 novembre 2019
* descrizione: Lettura del valore di una fotocellula e attivazione 
*			   di un rele'¨per 5 secondi se supera la soglia
* librerie: Microchip
* compilatore: MPLABX IDE v4.01 e XC8 v1.45
* picmicro: PIC12F683
* configurazione:
* 	LDR = GP4/AN3 
*   LEDv = GP0 Rele
* 	LEDr = GP2 Led giallo
*
/******************************************************************/
#include <xc.h>
 
// CONFIG
#pragma config FOSC = INTOSCIO  
#pragma config WDTE = OFF       
#pragma config PWRTE = ON       
#pragma config MCLRE = OFF      
#pragma config CP = OFF         
#pragma config CPD = OFF        
#pragma config BOREN = OFF      
#pragma config IESO = OFF       
#pragma config FCMEN = OFF      
 
//#include <xc.h>
 
#define _XTAL_FREQ 8000000 
#define LDR GPIObits.GP4    // pin3 AN3
#define Rele GPIObits.GP0  	// pin7
#define Ledrosso GPIObits.GP2	// pin5
 
 
// variabili
unsigned int soglia = 512;
unsigned int lettura = 0;
 
int main(void) 
    {
    OPTION_REG = 0b00000000;    // bit 8 (GPPU) disabilitato)
    GPIO = 0b00000000;          // tutte le uscite a zero
	WPU = 0b00000000;		    // Pull-up disabilitati
    TRISIO = 0b00001000;        // GP4/AN3 IN, gli altri OUT 
    ANSEL = 0b00101000;         // AN3 ingresso analogico x ADC, Fosc/32
    ADCON0 = 0b10001101;        // risultato giustificato a Dx, Vref=Vdd, AN3(GP4), ADC abilitato
    CMCON0  = 0b00000111;       // comparatore OFF
 
	while(1)
        {
        __delay_us(20);     //  delay to GO=1;
        GO_DONE  = 1;       // abilito conversione
        while(GO_DONE);     // attesa fine conversione
        lettura = (unsigned int) ADRESL + ((unsigned int) ADRESH ) <<8;
        if (lettura >= soglia) 
            {
            Rele = 1; 
            Ledrosso = 0;
            for(int i = 0; i <= 5; i++) { 
            __delay_us(1000);
                }
            }
            Rele = 0;
            Ledrosso = 1;
		} // end while
	} // end main
Succede anche una cosa strana, se tento di compilarlo con il XC8 v2.10 mi sottolinea in rosso tutte le impostazioni dei registri a cominciare dal "OPTION_REG" in giù.
La stessa cosa la fa con il "GO_DONE".
Anche l'#include <xc.h> mi dice che non lo trova (cannot find include file <xc.h>).
Penso che sia un problema di mnemonici errati.
Ho provato a cercare l'eader file come suggerito da Mauro ma non sono riuscito a trovarlo.
Saluti

Lello
Ultima modifica: 1 Anno 3 Mesi fa da Lello Guidi. Motivo: Aggiunto il ciclo for non temporizza
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

__delay_ms(1000) sembra non funzionare 1 Anno 3 Mesi fa #15

  • Lello Guidi
  • Avatar di Lello Guidi
  • Offline
  • Platinum Boarder
  • Messaggi: 370
  • Ringraziamenti ricevuti 9
  • Karma: 3
Ho risolto il led che si accende debolmente attaccando direttamente il rele.
Il nuovo problema è che il rele che deve stare attratto per i 5", continua a cadere ed ad attrarre al tempo di 1 secondo.

Saluti

Lello
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Powered by Forum Kunena
   
© LaurTec 2006-2015