Sie sind auf Seite 1von 5

Control 0-10V con PIC12F1840

Esta entrada del blog muestra el desarrollo de una tarjeta de circuito para
controlar una señal de entrada y otra de salida de 0-10V desde un pequeño
microcontrolador de Microchip PIC12F1840.
Lo que queremos conseguir es lo siguiente:
 Que el circuito sea capaz de entregar una señal de 0-10V para controlar un
actuador mediante esta señal. Por ejemplo, un motor mediante un variador
de frecuencia que tenga una entrada 0-10V, o un balastro de luces
fluorescentes con interfaz DALI para poder regular la luz del fluorescente
mediante esta señal de 0-10V, o un dimmer o muchos otros dispositivos.
 Que también sea capaz de leer mediante un sensor el estado del actduador
con una señal de entrada de 0-10V o 0-5V.
 Además enviará y recibirá datos desde un PC para poder controlar o
mostrar en una gráfica el control del actuador y el sensor.
Primer Paso: realizar el esquema electrónico de la PCB.
Segundo Paso: Diseñar el routeado de la tarjeta electrónica:

Tercer Paso: Generar archivos gerber y fabricar físicamente la tarjeta electrónica.


Este paso se puede hacer manual para quien tenga las herramientas necesarias
(placas, insoladora, acidos, etc).

Estoy a la espera de los componentes electrónicos para acabar de montarla y


probarla, pero mientras he decidido comenzar el diseño del firmware y simularlo
con el simulador Proteus.
La herramienta elegida para hacer el firmware es MPALB X que es la herramienta
oficial de Microchip, el fabricante del microcontrolador usado. Esta herramienta de
desarrollo se puede descargar desde la pagina de Microchip y tiene
una versión gratuita que son servirá para nuestros desarrollos.
Lo primero que he querido desarrollar del firmware es la parte de comunicaciones,
de esta manera cuando comience a realizar la parte de las entrada y salida
analógicas podre visualizar los datos en el PC.
El primer programa hace parpadear un LED para probar las entradas y salidas del
PIC y envía un mensaje al PC junto con una variable que se va incrementando.
/ PIC12F1840 Configuration Bit Settings

// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on
CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code
protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is
disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or
oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode
is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is
enabled)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or
Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage
(Vbor), low trip point selected.)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming
enabled)

#define _XTAL_FREQ 32000000

//Definicion de Pines I/O


#define DACPin PORTAbits.RA0
#define ADCPin PORTAbits.RA1
#define TachoPin PORTAbits.RA2
#define ResetPin PORTAbits.RA3
#define TxPin PORTAbits.RA4
#define RxPin PORTAbits.RA5
void Config(void);
void putch(char c);

/******************************************************/
/* Programa principal */
/******************************************************/
int main(void) {
int a=0;
Config();
while(1){
DACPin = !DACPin;
printf("Hola lectores de BitPic %i\r",a++);
__delay_ms(1000);
}

/*****************************************************************/
/* Configuracion de los registros del PIC */
/*****************************************************************/
void Config(void){

// Configuración cristal interno a 16MHZ


OSCCONbits.IRCF0 = 0;
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;
OSCCONbits.IRCF3 = 1;
OSCCONbits.SCS0 = 1;
OSCCONbits.SCS1 = 1;

//Caonfiguracion I/O
ANSELA = 0b00000000; // Entradas analogicas desactivadas
TRISAbits.TRISA0 = 0; // DAC
TRISAbits.TRISA1 = 1; // ADC
TRISAbits.TRISA2 = 1; // Tacho
TRISAbits.TRISA3 = 1; // Reset PIN
TRISAbits.TRISA4 = 0; // Tx
TRISAbits.TRISA5 = 1; // Rx

APFCONbits.RXDTSEL = 1;
APFCONbits.TXCKSEL = 1;

//Configuración
BAUDCON = 0b00000000;
INTCON = 0b00000000;
PIE1 = 0b00000000;
PIR1 = 0b00000000;
RCSTA = 0b10010000;
TXSTA = 0b00100000;

SPBRGL = 51; // 9600 baudios a 32MHz


SPBRGH = 0; // 9600 baudios a 32MHz
}
/********************************************************************/
/*Implementacion de putch para poder enviar mensajes con printf*/
/*putch envia un caracter y prinf envia una cadena de caracteres*/
/********************************************************************/
void putch(char c){
while (!TXIF);
TXREG = c;

Das könnte Ihnen auch gefallen