Jump to content
PLC Forum


Sign in to follow this  
MrCamarium

Led Di Soglia

Recommended Posts

MrCamarium


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

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

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.

Share this post


Link to post
Share on other sites

GiRock

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...

Share this post


Link to post
Share on other sites
GiRock

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...

Share this post


Link to post
Share on other sites
MrCamarium

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;

Share this post


Link to post
Share on other sites
MrCamarium

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...