MrCamarium Inserito: 21 settembre 2012 Segnala Share Inserito: 21 settembre 2012 /*********************************************************************************** ************************************************************************************ 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 More sharing options...
GiRock Inserita: 21 settembre 2012 Segnala Share Inserita: 21 settembre 2012 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 More sharing options...
GiRock Inserita: 21 settembre 2012 Segnala Share Inserita: 21 settembre 2012 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 More sharing options...
MrCamarium Inserita: 23 settembre 2012 Autore Segnala Share Inserita: 23 settembre 2012 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 More sharing options...
giacomo56 Inserita: 23 settembre 2012 Segnala Share Inserita: 23 settembre 2012 GP3 è solo d'ingresso.. Ciao. Link al commento Condividi su altri siti More sharing options...
MrCamarium Inserita: 24 settembre 2012 Autore Segnala Share Inserita: 24 settembre 2012 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora