TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: callecuatro1976 en 31 de Diciembre de 2011, 15:15:26
-
hola estoy tratando de hacer un protector de tension con el pic12f675 , que cuando este a 220 volt mantenga encendido la pata 1 y cuando varia tanto como para abajo a 170 volt o a 250 la apague y encienda un led de advertencia hasta ahora he echo esto basabdome en algunos ejemplos , alguna idea como seguir o usar el switch , case...
#include <12f675.h>
#device adc = 10
#use delay(clock= 4m)
#fuses NOWDT,CPD,PROTECT,noMCLR,PUT,INTRC_IO,BROWNOUT
#use standard_io(a)
#byte TRISIO = 0x85 // Dirección Del TRISIO PORT10.
#byte GPIO = 0x05 // Dirección del GPIO PORT
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
Int Val_AN;
Float Sensor;
Const Int escala = 255;
Const Float v_max = 5.0;
void Leer_ADC(int C){ // Funcion donde se realiza la lectura del ADC
set_adc_channel(C); // Seleccionamos el canal
delay_us (20);
Val_AN=read_adc(); // Conversion AD a la variable Val_AN
Sensor=(Val_AN*v_max)/escala; // Ecuacion que permite al ADC trabajar en una escala de 5V
}
void main(){
GPIO = 0;
setup_port_a( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
while(TRUE){
Leer_ADC(0);
if(sensor>=3.0){
output_high(pin_a1);
delay_ms(10);
if(sensor<=3.0)
output_low(pin_a1);
}
}
}
-
Debes implementar un bucle infinito.
-
#include <12f675.h>
#device adc = 10
#use delay(clock= 4m)
#fuses NOWDT,CPD,PROTECT,noMCLR,PUT,INTRC_IO,BROWNOUT
#use standard_io(a)
#byte TRISIO = 0x85 // Dirección Del TRISIO PORT10.
#byte GPIO = 0x05 // Dirección del GPIO PORT
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
long Val_AN;
Float Sensor;
void main(){
GPIO = 0;
setup_adc_ports( an0_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel(0);
delay_us (20);
while(TRUE){
Val_AN=read_adc();
Sensor=val_an*0.00487848 ;
output_high(pin_a5);
if((sensor>3.0)||(sensor<2.0)){
output_low(pin_a5);
delay_ms(5000);
}
}
}
ahi cambie el codigo y funciona moviendo el adc cambia el valor de la pata 5 , ahora como hago que para sacar un 1 de la pata 2 cuando sea mayor de 3 y cuando sea menor otra pata , ahi ando trabado , saludos
-
Explicate un poco mejor, es una aplicacion sencilla, tienes que tener claro el funcionamiento del protector , que quieres activar o desactivar , en que momento, y en función de las variavbles a controlar y el estado en que se encuentra en cada momento el fllujo del programa, te puedes hacer un diagrama´, sencillo, de flujo, asi lo veras muy bien , cuando tengas claro eso lo mas facil es llevarlo al lenguaje de programación.
Saludos
-
lo que quiero haces es cuando hay 220 volt que este en estado normal , cuando baje la tension a 170 o suba a mas de 250 que corte y me marque con led el estado, un pequeño estabilizador para tener en el taller , ya que estoy aprendiendo!!! es bueno hacer todo uno para entender como programar , saludos y gracias por las respuestas.... :)
-
#include <12f675.h>
#device adc = 10
#use delay(clock= 4m)
#fuses NOWDT,CPD,PROTECT,noMCLR,PUT,INTRC_IO,BROWNOUT
#use standard_io(a)
#byte TRISIO = 0x85 // Dirección Del TRISIO PORT10.
#byte GPIO = 0x05 // Dirección del GPIO PORT
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
long Val_AN;
Float Sensor;
void main(){
GPIO = 0;
setup_adc_ports( an0_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel(0);
delay_us (20);
do{
Val_AN=read_adc();
Sensor=val_an*0.00487848 ;
output_high(pin_a5);
if((sensor>3.0)||(sensor<2.0)){
output_low(pin_a5);
delay_ms(5000);
}
if(sensor>3.1)
output_high(pin_a2);
if(sensor<3.0)
output_low(pin_a2);
if(sensor<2.0)
output_high(pin_a4);
if(sensor>2.1)
output_low(pin_a4);
}while(true);
}
creo que ahi estaria les dejo el dns para ver si me dan alguna otra idea para mejorar mi proyecto , saludos
-
Veo que vas con buen paso, recuerda que no le puedes meter 220 volts a la entrada analogica del pic. tienes que usar algun divisor de tension, todo eso lo puedes implementar en el proteus, creando un nuevo power suply y simular los 220 volts.
-
como hago para simular los 220 en el proteus, es algo que no puedo encontrar , saludos gracias por las respuestas
-
Es sensillo. Tienes que ir a Design, Configure Power Rails, hacer click en NEW, ponerle un nombre por ejemplo "220V", y despues de esto, donde dice voltaje ponerle 220. ahora en una parte en blanco debes hacer click derecho, Place, Terminal, Power. una vez lo coloques, haz doble click en el y en donde dice "string" ponle el mismo nombre que le pusiste al Power Rail que creaste anteriormente, en este caso ponle "220V". y listo, puede funcionar con el ground general del circuito.
Mira esto a ver si te sirve:
http://www.forosdeelectronica.com/f24/medir-corriente-alterna-pic-adc-5362/