Vai al contenuto
PLC Forum


Led Di Soglia


MrCamarium

Messaggi consigliati


/***********************************************************************************

************************************************************************************

Dissuatore con PIC12F675

MrCamarium

http://camaleonteplus.altervista.org

MCU:	 Microchip PIC12F675

Clock:	 4MHz Internal

Compiler:    HI-TECH C Compiler for PIC10/12/16 MCUs Version 9.83

************************************************************************************

************************************************************************************/

#define _XTAL_FREQ 4000000

#include <pic.h>

// configurazione

__CONFIG (FOSC_INTRCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF);

#include "delay.c"

// Connessioni

#define Led1  GP5  // Led Verde 16 KHz

#define Led2  GP4  // Led Giallo 18 KHz

#define Led3  GP3  // Led Giallo 20 KHz

#define Led4  GP2  // Led Rosso 22 KHz

#define Led5  GP1  // Led Rosso 24 KHz

#define OUT   GP0  // Super Tweeter

// funzioni

void main(void)

{

	    unsigned char count = 0;

	    unsigned short val = 32;

	    CMCON=7; // Disabilita Comparatore.

	    ADCON0 = 0; // Disabilita convertitore A/D

	    TRISIO = 0b00000000; // Tutti i pin in out

	    while(1) // eseguo un ciclo infinito

	    {

			    while(count < 200)

			    {

					    OUT=1;

					    DelayUs(val); // 16-27KHz

					    OUT=0;

					    DelayUs(val);

					    count++;

			    }

			    count = 0;

			    // da 16KHz arriva a 27 KHz e poi torna a 16 KHz

			    val = (val - 1 >= 18) ? (val - 1) : 32;

	    }// Fine ciclo continuo

} // Fine main

Questo programma l'ho realizzato con l'aiuto di un utente su questo forum, volendo sfruttare le porte libere volevo aggiungere una accensione di un led quando viene superara una frequenza, ad esempio il primo led a 16khz, il secondo a 18khz ecc., ma si deve spegnere il led precedente deve sempre rimanere un solo led acceso.

Link al commento
Condividi su altri siti


Non puoi farlo così semplicemente, ogni istruzione aggiunta per accendere e spegnere i LEDs aumenta il tempo dell'oscillatore vanificando i calcoli precedentemente fatti, c'è da ricalcolare tutto altrimenti...

Link al commento
Condividi su altri siti

GP3 come Output è improponibile, e ho visto che hai spostato OUT su GP0 quindi devi aggiungere questo ai parametri di configurazione:

ANSEL = 0x00; // All Digital

Si potrebbe anche fare la storia dei LEDs, ma si accenderebbero ad una frequenza notevolmente alta con circa 200 us di pausa tra uno e l'altro tipo PWM per intenderci, non so se ne vale la pena...

Link al commento
Condividi su altri siti

GP3 come Output è improponibile, e ho visto che hai spostato OUT su GP0 quindi devi aggiungere questo ai parametri di configurazione:

ANSEL = 0x00; // All Digital

perchè è improponibile?

e cosa è ANSEL = 0x00;

Link al commento
Condividi su altri siti

Avevo messo già tutto in out:

TRISIO = 0b00000000; // Tutti i pin in out

comunque adesso ho aggiornato cosi:


/***********************************************************************************

************************************************************************************

Dissuatore con PIC12F675

MrCamarium

http://camaleonteplus.altervista.org

MCU:	 Microchip PIC12F675

Clock:	 4MHz Internal

Compiler:    HI-TECH C Compiler for PIC10/12/16 MCUs Version 9.83

************************************************************************************

************************************************************************************/

#define _XTAL_FREQ 4000000

#include <pic.h>

// configurazione

__CONFIG (FOSC_INTRCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF);

#include "delay.c"

// Connessioni

#define Led1  GP5  // Led Verde 16 KHz

#define Led2  GP4  // Led Giallo 18 KHz

#define Led3  GP3  // Led Giallo 20 KHz

#define Led4  GP2  // Led Rosso 22 KHz

#define Led5  GP1  // Led Rosso 24 KHz

#define OUT   GP0  // Super Tweeter

// funzioni

void main(void)

{

	    unsigned char count = 0;

	    unsigned short val = 32;

	    CMCON=7; // Disabilita Comparatore.

	    ADCON0 = 0; // Disabilita convertitore A/D

  ANSEL = 0x00; // Tutte le porte in digitale

	    TRISIO = 0b00000000; // Tutti i pin in out

	    while(1) // eseguo un ciclo infinito

	    {

			    while(count < 200)

			    {

					    OUT=1;

					    DelayUs(val); // 16-27KHz

					    OUT=0;

					    DelayUs(val);

					    count++;

			    }

			    count = 0;

			    // da 16KHz arriva a 27 KHz e poi torna a 16 KHz

			    val = (val - 1 >= 18) ? (val - 1) : 32;

	    }// Fine ciclo continuo

} // Fine main

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...