Este es el diagrama publicado para el video publicado en Youtube llamado 12F675 como ADC 10 bits, espero les sea de utilidad. :-)
http://www.youtube.com/watch?v=c_keioybLzE
Electrónica para lentos
lunes, 15 de julio de 2013
jueves, 27 de junio de 2013
Entrenador PIC 12F675
ENTRENADOR PARA EL PIC 12F675
El microcontrolador 12F675 de microchip es uno de los más económicos y fácil de encontrar en todo el mundo, inclusive en países vetados tecnológicamente por E.U. Este micro controlador tiene la ventaja de incluir oscilador interno de 4Mhz aproximadamente, entradas analógicas de 256 o 1024 bits de resolución.
En total se pueden contar con 5 pines de entrada/salida y uno de entrada (el mismo pin usado para el Master Clear del programador), así pues es bastante útil para aplicaciones muy sencillas. Tiene poca memoria RAM, ROM y EEPROM pero basta para la aplicación de ejemplo que le publico en esta ocasión.
Referencia Microchip del PIC 12F675: http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf
El presente diseño es un entrenador para el PIC 12F675, con dos push boton, tres leds y un buzzer como salida acústica.
El diagrama del Entrenador es el siguiente:
El conector CN1 es el conector propio del PicKit2 de Microchip, que cabe mencionar que existen diversos programadores que tienen los mismos pines en la misma o en diferente posición pero siempre tienen los mismos pines. Para este ejemplo estoy usando un clon del PicKit2, que se puede conseguir en Ebay fácilmente, o en su sitio oficial http://www.piccircuit.com búsquenlo como icp02 (es de color amarillo).
Aquí les pongo una foto de mi programador icp02-v1.0.
Construyendo el circuito en placa fenólica perforada queda el entrenador como en la siguiente foto.
La cinta adhesiva sostiene el buzzer que está por debajo, se pueden ver las terminales del buzzer en color rojo y negro, el pin MCL esta en naranja y junto a los leds se puede ver un switch definitivo, es decir que cuando se programa estas terminales desnudas deben separarse y cuando se pruebe deben estar juntas, esto no es obligatorio pero si recomendable ya que cuando se dejan separadas los pines PGD y PGC no tienen la carga de los leds.
CODIGO FUENTE
Para este ejemplo he usado el compilador CCS C Compiler que se puede obtener de la página oficial:
/*
Author: Oscar Sanchez V.
Date: 2016-06-21
Compiler: CCS C Compiler
*/
#include <12F675.h>
#fuses intrc_io,NOWDT,NOBROWNOUT,PUT,NOMCLR,CPD
#use delay(clock=4M)
//#use standard_io(A)
#define PUSH_A PIN_A5
#define PUSH_B PIN_A3
#define LED_GREEN_PINOUT PIN_A0
#define LED_RED_PINOUT PIN_A1
#define LED_WHITE_PINOUT PIN_A4
#define SOUND_PINOUT PIN_A2
void music_tone(int16 m_period, int16 m_delay) {
int16 i;
for (i = m_delay ; i > 0 ; i--) {
output_high(SOUND_PINOUT);
delay_us(m_period);
output_low(SOUND_PINOUT);
delay_us(m_period);
}
}
void ring_bird() {
int16 i;
for (i = 50 ; i > 0 ; i--) {
output_high(SOUND_PINOUT);
delay_us(i+100);
output_low(SOUND_PINOUT);
delay_us(i+100);
}
for (i = 0 ; i < 100 ; i++) {
output_high(SOUND_PINOUT);
delay_us(i+100);
output_low(SOUND_PINOUT);
delay_us(i+100);
}
delay_ms(10);
}
void ring_up() {
int16 i;
for (i = 0 ; i < 50 ; i++) {
output_high(SOUND_PINOUT);
delay_us(1000);
output_low(SOUND_PINOUT);
delay_us(1000);
}
delay_ms(20);
for (i = 0 ; i < 60 ; i++) {
output_high(SOUND_PINOUT);
delay_us(600);
output_low(SOUND_PINOUT);
delay_us(600);
}
delay_ms(20);
for (i = 0 ; i < 70 ; i++) {
output_high(SOUND_PINOUT);
delay_us(350);
output_low(SOUND_PINOUT);
delay_us(350);
}
delay_ms(10);
}
void ring_down() {
int16 i;
for (i = 0 ; i < 70 ; i++) {
output_high(SOUND_PINOUT);
delay_us(350);
output_low(SOUND_PINOUT);
delay_us(350);
}
delay_ms(20);
for (i = 0 ; i < 60 ; i++) {
output_high(SOUND_PINOUT);
delay_us(600);
output_low(SOUND_PINOUT);
delay_us(600);
}
delay_ms(20);
for (i = 0 ; i < 50 ; i++) {
output_high(SOUND_PINOUT);
delay_us(1000);
output_low(SOUND_PINOUT);
delay_us(1000);
}
delay_ms(10);
}
void ring_alert() {
int16 i;
for (i = 0 ; i < 20 ; i++) {
output_high(SOUND_PINOUT);
delay_us(1000);
output_low(SOUND_PINOUT);
delay_us(1000);
}
for (i = 0 ; i < 20 ; i++) {
output_high(SOUND_PINOUT);
delay_us(1500);
output_low(SOUND_PINOUT);
delay_us(1500);
}
for (i = 0 ; i < 20 ; i++) {
output_high(SOUND_PINOUT);
delay_us(1000);
output_low(SOUND_PINOUT);
delay_us(1000);
}
delay_ms(10);
}
void ring_beep() {
int16 i;
for (i = 0 ; i < 30 ; i++) {
output_high(SOUND_PINOUT);
delay_us(600);
output_low(SOUND_PINOUT);
delay_us(600);
}
for (i = 0 ; i < 60 ; i++) {
output_high(SOUND_PINOUT);
delay_us(500);
output_low(SOUND_PINOUT);
delay_us(500);
}
for (i = 0 ; i < 30 ; i++) {
output_high(SOUND_PINOUT);
delay_us(600);
output_low(SOUND_PINOUT);
delay_us(600);
}
delay_ms(10);
}
void ring_click() {
int16 i;
for (i = 0 ; i < 10 ; i++) {
output_high(SOUND_PINOUT);
delay_us(300);
output_low(SOUND_PINOUT);
delay_us(300);
}
for (i = 0 ; i < 20 ; i++) {
output_high(SOUND_PINOUT);
delay_us(200);
output_low(SOUND_PINOUT);
delay_us(200);
}
for (i = 0 ; i < 10 ; i++) {
output_high(SOUND_PINOUT);
delay_us(250);
output_low(SOUND_PINOUT);
delay_us(250);
}
delay_ms(10);
}
void q_push() {
int16 cycles;
int16 tick;
int16 push_a_state;
if (!input(PUSH_A)) {
push_a_state = 0;
cycles = 0;
while(!input(PUSH_A)) {
delay_ms(10);
cycles++;
if (cycles == 50) ring_bird();
if (cycles == 200) ring_bird();
if (cycles == 500) ring_bird();
if (cycles > 600) {
cycles = 0;
ring_up();
delay_ms(100);
ring_down();
delay_ms(1000);
}
}
if (cycles>=50) {
push_a_state = 1; // Open back door
}
if (cycles>=200) {
push_a_state = 2; // Toggle Dome Light
}
if (cycles>=500) {
push_a_state = 3; // Toggle Ads Bar
}
switch (push_a_state) {
case (1) :
output_low(LED_GREEN_PINOUT);
output_high(LED_GREEN_PINOUT);
delay_ms(800);
output_low(LED_GREEN_PINOUT);
break;
case (2) :
if (input_state(LED_WHITE_PINOUT)) {
output_low(LED_WHITE_PINOUT);
ring_down();
} else {
output_high(LED_WHITE_PINOUT);
ring_up();
}
break;
case (3) :
if (input_state(LED_RED_PINOUT)) {
output_low(LED_RED_PINOUT);
ring_down();
} else {
output_high(LED_RED_PINOUT);
ring_up();
}
break;
} // switch
delay_ms(50);
} // input(PUSH_A)
if (!input(PUSH_B)) {
if (input_state(LED_RED_PINOUT)) {
output_low(LED_RED_PINOUT);
} else {
output_high(LED_RED_PINOUT);
}
ring_alert();
} // input(PUSH_B)
delay_ms(50);
} // q_push()
void main() {
output_low(LED_GREEN_PINOUT);
output_low(LED_RED_PINOUT);
output_low(LED_WHITE_PINOUT);
while(1) {
q_push();
}
} // End main
Con pequeños cambios en el circuito se puede adaptar para conectar transistores y relays para aplicar a seguros de puertas de un automóvil, manteniendo presionada la PushBoton A se puede abrir la puerta trasera, manteniendolo presionado se prende la luz superior (plafon) y manteniendo un poco más se puede encender una luz de adorno trasera.
Se reciben quejas y sugerencias :-P
domingo, 8 de enero de 2012
Fuente de voltaje de 5v sin transformador
Hola les presento una fuente de voltaje de 5 volts corriente directa que no requiere de transformador. Esta basado en el documento original de microchip AN954 by Reston Condit. Éste se puede descargar desde la liga:
http://ww1.microchip.com/downloads/en/AppNotes/00954A.pdf
Le he hecho pequeñas modificaciones para que consuma menos potencia gracias al diodo 1N4148 en serie (sólo medio ciclo de potencia de entrada) y la eliminación del resistor de 100 ohms de 1 a 2 watts que se calienta bastante, esta fuente de potencia puede generar sin problemas de rizo alrededor de 85 mA y su calentamiento es casi imperceptible. Se sugiere usar un fusible en serie para evitar sustos y un regulador de voltaje casero para electrodomesticos, pero ya la he usado tal como la presento aquí y no he tenido problemas. La puedo dejar en corto circuito la salida y tampoco se calienta ni se quema nada.
Es importante hacer notar que el diodo zener debe ser de 1/2 w para que soporte las corrientes transitorias, también es importante dejar que el diodo 1N4148 sea el que se dañe debido a los posibles transitorios, y que sea fácil de reemplazar, otro punto importante de no usar otro tipo de capacitor en serie, los electrolíticos en serie se salientan mucho al conducir corrientes superiores a los 30mA y estallan, así que es mejor conseguir estos capacitores de poliester desde 2.2 hasta 2.7 uFd.
¡¡¡ CUIDADO CUATES !!! :D
También se recomienda seguir el orden de los cables de Corriente Alterna F(Fase) N(Neutro), ya que ahora casi todos los contactos nuevos estan polarizados de esta forma en America Latina, al conectarlo como sugiero la terminal (-) es inofensiva si la red eléctrica donde se use este circuito esta bien conectada. Creo que requiere mas protección este circuito ;)
Si se desea cambiar el voltaje basta con cambiar el zener de un voltaje a otro siempre que sea de 1/2 watt y el capacitor electrolítico de la salida en paralelo sea superior al voltaje del zener, para este ejemplo se usa un cacacitor electrolítico de 1000 uFd a 10 volts.
Espero que les sea de utilidad su pequeño tamaño y bajo costo de construcción, a mi me ha permitido elaborar proyectos muy reducidos que usan la corriente eléctrica, menos pilas = menor impacto ecológico.
Perdón por el diagrama un poco rústico pero así me gustó (-:
http://ww1.microchip.com/downloads/en/AppNotes/00954A.pdf
Le he hecho pequeñas modificaciones para que consuma menos potencia gracias al diodo 1N4148 en serie (sólo medio ciclo de potencia de entrada) y la eliminación del resistor de 100 ohms de 1 a 2 watts que se calienta bastante, esta fuente de potencia puede generar sin problemas de rizo alrededor de 85 mA y su calentamiento es casi imperceptible. Se sugiere usar un fusible en serie para evitar sustos y un regulador de voltaje casero para electrodomesticos, pero ya la he usado tal como la presento aquí y no he tenido problemas. La puedo dejar en corto circuito la salida y tampoco se calienta ni se quema nada.
Es importante hacer notar que el diodo zener debe ser de 1/2 w para que soporte las corrientes transitorias, también es importante dejar que el diodo 1N4148 sea el que se dañe debido a los posibles transitorios, y que sea fácil de reemplazar, otro punto importante de no usar otro tipo de capacitor en serie, los electrolíticos en serie se salientan mucho al conducir corrientes superiores a los 30mA y estallan, así que es mejor conseguir estos capacitores de poliester desde 2.2 hasta 2.7 uFd.
¡¡¡ CUIDADO CUATES !!! :D
Si se desea cambiar el voltaje basta con cambiar el zener de un voltaje a otro siempre que sea de 1/2 watt y el capacitor electrolítico de la salida en paralelo sea superior al voltaje del zener, para este ejemplo se usa un cacacitor electrolítico de 1000 uFd a 10 volts.
Espero que les sea de utilidad su pequeño tamaño y bajo costo de construcción, a mi me ha permitido elaborar proyectos muy reducidos que usan la corriente eléctrica, menos pilas = menor impacto ecológico.
Perdón por el diagrama un poco rústico pero así me gustó (-:
Diagrama de conexión.
Así queda encapsulado en una cajita de dulces TIC TAC :)
Suscribirse a:
Entradas (Atom)