SlideShare ist ein Scribd-Unternehmen logo
1 von 65
POST#4: Fuente Digital de dos Salidas variables y
una fija a 5v con LCD 40x2, PIC y comunicación
mediante el protocolo serial RS232
Objetivo:
Al realizar los distintos proyectos con el tiempo llego la necesidad de tener una fuente
confiable que llene las necesidades básicas de todo laboratorio electrónico así que me
encamine en el diseño y construcción de una Fuente de laboratorio digital de tres
salidas, dos salidas variables de voltaje de 1.2V a 25V y medidor de corriente y una
salida fija de 5V. La fuente es controlada mediante el uso de un microcontrolador PIC
ejecutando algoritmos en lenguaje C de control y comunicación con la PC mediante
serial por el puerto RS232, la etapa de potencia de las salidas se basa en el regulador de
voltaje Step-Down LM2576 en su versión de voltaje ajustable como en la de voltaje fijo, con
esto se logra una alta eficiencia en la regulación de voltaje, un mínimo de desperdicio en
perdidas de disipación de calor así como una potencia de salidas de 3 Amp en una de las
salidas y en las otras dos de solo 2 Amp en cada una de ellas.
El equipo cuenta con salidas que ademas de ser dos de ellas variables y una fija, estas se
pueden habilitar o inhabilitar para así poder usar solo la que se necesite o en caso de
cortocircuito inhabilitarla rápidamente para evitar daños también para controlarla se usan los
pulsadores del frontal del equipo activando o desactivando las
salidas así como también es posible por medio de una aplicación desarrollada
a la medida para el dispositivo en lenguaje C# de .NET, tener un monitoreo en
tiempo real del voltaje y corriente en cada una de las
salidas así como también la temperatura en su interior.
Materiales principales utilizados:
 1 x PIC16F917. (Microchip)
 1 x MAX232 - (Muestra gratis obtenida gracias a Maxim)
 1 x LM2576T-5.0P+ (Step-Down Regulador de Voltaje 5v).
 1 x LM2576T-ADJ (Step-Down Regulador de Voltaje Variable).
 6 x Pulsadores - Para control manual desde el frontal.
 1 x Baquelita para el montaje.
 1 x LCD 40x2 - Para visualización del menú, estado del dispositivo y
configuraciones.
 2 x Conector banana de chasis dorados dobles polarizados - Para las salidas de
voltaje.
 2 x Conector banana normal dos colores - Para la salida de voltaje de 5V.
 3 x Puente rectificador - Para la salida de los transformadores.
 2 x Transformador 12v-0-12v a 4A. (Usado en las 3 salidas de voltaje).
 1 x Transformador 12v a 1A. (Lógica y backlight).
 1 x LM7805 regulador de voltaje para la lógica de control.
 4 x Potenciómetro - 2 de 1 KΩ y 2 de 10 KΩ.
 Switch grande doble con led para el frontal.
 Switch grande simple transero para cortar el cable vivo de la red 110v.
 Fusible y porta fusible de chasis europeo.
 Caja para prototipos de calidad tamaño grande.
 4 x Patas de goma.
 1 x Conector DB9 (RS232)
 Manecillas para los potenciometros con detalle metálico.
 Modulo ACS712 sensor de corriente.
 Ventilador pequeño para extracción de calor.
 Disipadores de aluminio de fuente de poder de PC antigua.
 LM35 - Sensor de temperatura para controlar el ventilador según se necesite.
PIC16F917 Regulador de Voltaje LM2576-05
Modulo ACS712 sensor de corriente. Regulador de voltaje LM7805
Regulador de Voltaje LM2576-ADJ. Sensor de Temperatura LM35.
MAX232 Maxim
Esquemas de Conexión de algunas partes del proyecto:
PIC16F917.
Esquema según datasheet del regulador
de Voltaje Variable LM2576-ADJ.
Esquema según datasheet del regulador
de Voltaje LM2576-05 voltaje fijo a 5V.
RS232 Transistorizado.
Librerías y algunas rutinas del código fuente desarrolladas para el proyecto:
 Función que lee todos las entradas analógicas y aplica sus respectivos cálculos.
///////////////////////////////////////////////////////////////
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
set_adc_channel(1); //medir tension
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC(); // read analog value from channel 1
vol1 = (float) (((value*500)/1024)/10);//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage1, "%f", vol1);
voltage1[5] = '0';
/////////////////////////////////////////////////////////
set_adc_channel(4); //medir corriente
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC(); // read analog value from channel 4
AN1 = (float) (value*5.0/1024); //AN1=value*(Vref(+) -
//Vref(-)/2^n +Vref(-),
//multiplica el numero de
//bits por su equivalente
//en analogico
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(amperaje1, "%f", AN1);
amperaje1[5] = '0';
/////////////////////////////////////////////////////////
set_adc_channel(0);
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value = READ_ADC(); // read analog value from channel 0
vol2 = (float) ((value*500)/1024)/10 ;//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage2, "%f", vol2);
voltage2[5] = '0';
/////////////////////////////////////////////////////////
set_adc_channel(5); //medir corriente
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value = READ_ADC(); // read analog value from channel 5
AN2 = Filtro_Analog_AN2((float) ((value*5.0)/1024));
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(amperaje2, "%f", AN2);
amperaje2[5] = '0';
/////////////////////////////////////////////////////////
set_adc_channel(2);
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC(); // read analog value from channel 2
vol3 = (float) ((value*500)/1024)/10 ;//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage3, "%f", vol3);
voltage3[4] = '0';
/////////////////////////////////////////////////////////
set_adc_channel(3);
delay_us(TIEMPO_DELAY); //Temporiza 10uS
value=READ_ADC(); // read analog value from channel 3
delay_us(TIEMPO_DELAY);
temperatura= (float) ((5.00*value*100.00/1024.0)/10);
sprintf(temperatura1, "%f", temperatura);
temperatura1[5] = '0';
/////////////////////////////////////////////////////////
}
Interior de la fuente digital:
Vista superior en fase de pruebas
donde se uso el LM350, LM317 y un
LM7805 para regular el voltaje.
Frontal en fase de pruebas.
Vista de atrás en fase de pruebas.
Vista de transformadores, ventilador
para control de temperatura y demás
partes que conforman la fuente.
Reguladores LM2576 que se usaron
para sustituir los anteriores mencionados
y ahora estos con disipador de fuente de
poder de PC antigua.
Módulo interno RS232 y módulos
de censar corriente.
Modulo USB a Serial. Modulo USB a Serial Finalizado.
Frontal en fase definitiva.
Imágenes de la Aplicación de PC:
Aplicación desactivada y sin
conexión serial presente.
Aplicación activa pero con las salidas
desactivas solo varia la temperatura
de la fuente en el momento.
Ventana para salvar la imagen JPG de la
gráfica de comportamiento de la fuente en el
tiempo tanto su voltaje como su corriente.
Aplicación con la gráfica de
temperatura activa.
Aplicación con todas las salidas activas
y graficando en el tiempo la salida de 3A.
Imágenes de la fuente digital en funcionamiento:
Vista Frontal Fuente Digital definitiva
con luz de fondo azul y led de estado
en cortocircuito de alguna salida.
Otra vista frontal.
Vista de la fuente entre otros equipos
de electrónica.
Vista Frontal Fuente Digital definitiva
sin luz de fondo y led de estado
en cortocircuito de alguna salida.
Vista de la fuente en su estado actual
en el banco de trabajo.
Aplicación de supervición de la fuente
donde se visualiza el estado de la salidas.
Imágenes de la fuente digital finalizada:
Foto Frontal inclinada. Foto de atrás inclinado.
Foto de atrás. Foto Frontal.
Foto de atrás con modulo de USB a Serial.
Conversor RS232 a TTL sin MAX232
Todos sabemos que a la hora de conectar un PIC a la PC utilizar el
MAX232 es el paso mas directo y fácil. Sólo cinco capacitores y éste
integrado estará funcionando bien. Pero tomando en cuenta que hoy
por hoy un MAX232 puede salirnos incluso mas caro que el mismísimo
PICmicro decidimos desarrollar una alternativa válida que lo
reemplace.
El circuito de arriba utiliza la propia corriente del puerto COM de la PC
para generar los símbolos del RS232. Los pines marcados como TxD,
RxD y Gnd corresponden al conector RS232 de la PC (ver
conexionado) mientras que los pines marcados como RD y TD van
directamente a microcontrolador. Podemos observar el pinout de los
transistores.
Este tipo de interface es muy vista en mouses o elementos de control
de punteo en PC. Los puntos de alimentación son de 5V (los mismos
que del micro).
POST#17: Sistema Integrado de equipos de
laboratorio controlado por PC en base a micro-
controladores PIC
Objetivo:
La finalidad para realizar este proyecto no es mas que tratar de solventar el problema de los
equipos electrónicos de calidad y accesibles para los estudiantes universitarios, los estudiantes
técnicos y entusiasta, por ello se enfoco en el desarrollo de un sistema completo en el cual se
tenga integrado la mayoría de los equipos de laboratorios de electrónica a nivel universitario.
Estos equipos deben tener los requerimientos suficientes para poder realizar todas las
practicas a lo largo de la carrera universitaria. Con esto en mente se determino que se
conformaría en sistema integrado de equipos los cuales trabajan en una sola interfaz de
computadora, donde todas la variaciones de niveles de salidas y entradas, así como las
lecturas de estados lógicos, voltajes y corrientes, y estas se puedan configurar de manera
digital desde el software de control realizado para el equipo.
Con esto se llego a la conclusión de que se compondría de dos fuentes variables digitales de
0v a 20v con precisión de 0.01V y control de corriente de 0A a 2A con precisión de 0.1A, estas
fuentes puede trabajar en modo serial, paralelo o independiente, ademas cuenta con una
tercera fuente fija a 5V a 5A como máximo en su salida, por otra parte se encuentra el
generador de funciones el cual puede generar señales seno, cuadradas y TTL gracias al
AD9850, donde es posible variar su amplitud de 1Vpp a 7Vpp, frecuencia de 10hz a 1Mhz y
ciclo de trabajo 0% a 100%, también una punta lógica la cual mida tanto circuitos TTL como
CMOS y muestre el estado lógico en forma de 7 segmentos en la interfaz o en forma de led
iluminados en la interfaz, por ultimo un multímetro con voltímetro AC y DC de 0v a 600v,
amperímetro AC y DC por efecto hall con el ACS714 de -5A a 5A dependiendo de como se
tome la lectura, lector de ohmios de 1ohm a 10 Mohm y lector de continuidad.
El sistema esta conectado por un bus de datos I2C el cual esta aislado por integrados
especializados ADuM1250, con esto se asegura que cual quier falla no afecte otro de los
equipos y ademas permite el agregar nuevos equipos al bus de datos y con esto complementar
aun mas el sistema como podría ser la adición de un osciloscopio o de un frecuencímetro.
La alimentación del equipo es con transformares genéricos separados para asegurar el
aislamiento y también un remplazo rápido de cualquiera de ellos en caso de fallas ya que son
mas comerciales que el embobinar una transformador con un solo primario y el numero de
secundarios necesarios para alimentar todos los módulos con sus respectivas potencia
adecuada.
La placas del sistema estas controladas por PIC Microchip de varios modelos según el módulos
y familias, pero todos con la características mínima de que cuente con bus de datos I2C por
hardware, para conectarse a la placa de bus de datos aislada y todo esto ser controlado por la
placa de control principal que esta basada en el PIC18F2550, por su bus I2C y conexión USB
al computador la cual se aisló con el integrado ADuM4160 y el uso de una LCD 20x4 para
visualizar el estado general del equipo ya que el mismo no cuenta con ningún pulsador o
potencíometro de configuración, todo es realizado de manera digital desde la aplicación de
control en la computadora personal.
La programación de los microcontroladores, fue realizada en CCS con el uso de interrupciones
en todos los casos necesarios y periféricos de hardware, ningún control ya sea del bus o de
integrados fue realizado por software para no tener retrasos generados al emular algún
protocolo o tarea.
El software de control se realizo en Visual Studio 2013 en lenguaje C# con librerías capaces de
trabajar con el puerto USB del PIC18F2550 en las versiones mas actuales de windows, tanto
en x86 como en x64, así como también se usaron librerías para los 7 segmentos en la interfaz
y los led animados.
Materialesprincipales utilizados:
Modulo DDS AD9850 encargado de generar
las distinta señales de salida del generador
de funciones, este modulo puede ser
controlado de forma serial o de forma
paralela según sea el diseño.
PIC 18F2550 de Microchip el cual cuenta
con 28 pines de distintos usos pero como
periféricos importantes cuenta con pines
dedicados porhardware para la comunicación
USB y comunicación por bus I2C.
ACS714 Pololu modulo sensor de corriente
bidireccional por efecto hall de salida
lineal a la corriente en sus terminales
puede sensar desde -5Aa 5A
y su salida es una variación de voltaje
donde por cada paso se aumenta o disminuye
en 180mV/A segun sea el caso teniendo
como 0Ael voltaje de salida fijo de 2.5V
PIC 16F1503 de Microchip usado para la
mayoría de los módulos ya que el mismo
cuenta con un numero de pines suficiente
pero como periféricos importante tiene bus
I2C por hardware, asícomo varias salidas del
tipo PWMpor hardware, necesarias para los
módulos y su correcto control.
Transformador con tap central 12v-0-12v
4 Amp para salidas de potencias de las
distintas fuentes.
ADuM1250 inteagrado de Analog Devices
que se encarga de aislar el bus de datos I2C
con una tecnología de aislamientomagnetico
y soportando sobrecargas dehasta 2500V rms
para proteger el circuito que aísla.
Transformador con tap central 12v-0-12v
0.5 Amp para alimentar cada uno de los
módulos en su parte lógica
PIC 18F4610 de Microchip usado para el
multímetro ya que cuenta como gran
cantidad depines los cuales fueron usados
para las distintas funciones del mismo , así
como también porsubus I2Cpor hardware.
Disipador de aluminio para las distintas
fuentes de poder
LM35 en encapsulado TO92 para colocarlo
cerca físicamente del disipador de las
fuentes y conesto controlar el encendido y
apagado del ventilador según sea el caso
de una temperatura alta o baja.
Ventilador para forzar la ventilación en las
fuentes de poder en caso de ser necesario
por uso prolongando delas mismas con una
carga grande en su salida.
LM2576 en encapsulado TO220 de 5 pines,
regulador altamente eficiente que solo
necesita de 4 componentes externos para
entregar hasta unos 3 Amp con unos 5V
si desperdiciar casi energía en calor al ser
el mismo step-down y tener una eficiencia
muy alta.
Puerto USB tipo B usado para la conexión
del cable USB del sistema con el PC
MCP41010 integrado de Microchipm que
hace la función depotenciometro de control
para el contraste de la LCD del sistema
LCD 20X4 luz de fondo azul para los distintos mensajes de estado y control del sistema.
Placas y partes del proyecto:
Placa dedicada al BUS de datos i2c aislado
con tecnología de transformadores deanalog
, la cual cuenta con fuente de alimentación
propia, que usa para energizar los integrados
ADuM140x y el bus de datos completo.
Placa fuente de poder digital regulable de
0v a 20v, con salida ajustable de corriente
de 0Aa 2A, esta placa cuenta con
alimentaciónpropia para potencia y lógica.
La lógica es basada en el micro-controlador
PIC 16F1503 de Microchip y la potencia
en el regulador LM338con control mediante
amplificador operacional y señales PWM.
Punta lógica realizada a partir de un
probador de electricista para 110v, el cual
fue modificadopara ser usadoen elsistema.
Básicamente se le agrego un par de cables
polarizado para energizarla del circuito en
estudio, así como también cuenta con un
cable de varios hilos para la conexión con
el sistema
Placa principal de control micro-controlada
con el PIC 18f2550de microchip, la cual esta
constituida por conector USB tipo B, fuente
conmutada 5v, LCD 20x4conectado deforma
serialconregistrode desplazamiento,poten-
cimetro digital para controldel contraste de
la LCD, conector para el BUS I2C,etc.
Placa selectora delos modos desalida de las
fuentes depodervariable donde se encarga
de colocar las salidas delas fuentes en modo
seria, paralelo o independiente, así como
tambiénseencarga demostrar mediante un
LED en el frontal cual esta activa de ellas y
si alguna esta en protección por cortocircuito
Placa multímetro la cual cuenta con, estas
herramientas: amperímetro basado en elchip
ACS712 para corriente tanto AC como DC,
ohmímetro coneluso deun arregloformado
por resistencia y lectura del ADC del PIC,
el voltímetro AC y DC con el uso de puente
rectificador y divisor resistivo de precisión,
punta lógica para circuitos CMOS y TTL,
finalmentela placa cuenta con LEDde estado
del modo en uso, así como también con un
buzzer para señales auditivas y una fuente
conmutada LM2576 con un PIC 18F4610.
LCD 20x4 del sistema con faja plana.
Vista delconjuntode placas queconforma el
sistema completo.
Placa encargada de la generaciónde señales
eléctrica de tipo seno y TTL, la misma esta
basada en elchip AD9850 el cual de manera
seriales controlado porel PIC 16F1503, para
así configurar elmodo de salida: frecuencia
y dutty. Ycon la ayuda deun juego de OPAM
y potencimetros digital MCP41010 se logra
modifica el offset y la amplitud de las
señales de salida generadas.
Placa fuente de poder digital regulable de
0v a 20v, con salida ajustable de corriente
de 0Aa 2A, esta placa cuenta con
alimentaciónpropia para potencia y lógica.
La lógica es basada en el micro-controlador
PIC 16F1503 de Microchip y la potencia
en el regulador LM338con control mediante
amplificador operacional y señales PWM.
Placa fuente de poder digital de salida de voltaje fija a 5V, con salida fija de corriente
maxima de 2A, esta placa cuenta con alimentación propia para potencia y lógica.
La lógica es basada en el micro-controlador PIC 16F1503 de Microchip y la potencia
en el regulador LM338 con control mediante amplificador operacional y señales PWM.
PCB en 3D del proyecto:
PCB para conexión de la entrada de 110V
de los transformadores de entrada de cada
una de las placas del sistema.
PCB de la placa principal de control.
PCB de la placa de multímetro y punta
lógica.
PCB de la placa para selección del modo
de salida de las fuentes variables.
PCB de la placa del bus de datos i2c
aislado.
PCB de la placa de generador de funciones.
PCB de la placa para la fuente digital
variable.
PCB de la placa para la fuente digital
fija.
Imágenes del software del sistema:
Ventana de información del sistema. Ventana de ayuda del sistema.
Ventana para la configuración del sistema
como la luz de fondo y el contraste
de la LCD.
Vista del menú de ayuda en la ventana
principal del sistema.
Ventana flotante del sistema cuando es
activado el modo de salida en serie de las
fuentes variables digitales
Ventana flotante del sistema cuando es
activado elmodo desalida en paralelo de las
fuentes variables digitales
Ventana donde se observa la pestaña de
multímetro y punta lógica en uso. En la
cual se tiene a la izquierda el multímetro
con cada una de sus funciones como son:
ohmímetro, voltímetro AC, voltímetro
DC, medidor de continuidad y amperímetro
AC y DC. Por otra parte a la derecha se
tiene la punta lógica sus modos dedetección
de la tecnología a estudiar, así como también
se tiene de un 7 segmentos y 3 señales
visuales para apreciar el estado lógico
presentes en la punta de medición al
momento derealizar las pruebas en la placa
en estudio.
Ventana donde se tiene la pestaña para
las fuentes que conforman el sistema a la
izquierda las dos fuente variables con sus
opciones de configuración de salida como
el voltaje o la corriente de cada una de
las fuentes, así como también cuenta con
visores del estado de la fuente, voltaje,
corriente, temperatura y ventilación. Ala
derecha se tiene la fuente fija con los
mismos visores pero sin opción de
configuración, las 3 fuentes cuentan con un
botón de activación. finalmente abajo a la
derecha seobserva los tipos de configuración
de salida para las fuentes variables como
son salida en serie, paralelo o independiente.
Ventana donde se tiene la pestaña para el
generador de funciones del sistema en la
cual se aprecia los 7 segmentos para la
visualizar la frecuencia de salida, en la zona
izquierda baja esta para introducir el valor
deseado de frecuencia, así como un botón
para su variación paso a paso, en la zona
derecha baja esta la configuración para el
tipo de salida a ser generada ya sea seno
o TTL, así como también para variar su
amplitud o ciclo respectivamente.
Vista del menú en la ventana
principal del sistema.
Vista de la ventana principal del sistema.
Ventana flotantedelsistema al momento de
decidir cerrar el mismo.
Imágenes del prototipo funcional del sistema finalizado:
Vista frontaldel sistema en pruebas de sus
salidas, entradas y aplicacion
Vista frontal del sistema donde se tiene
el mismo con la conexión USB a la PC
LCD del sistema mostrando estado de la
aplicación así como del USB y los modulos
activos
Vista Frontal del sistema integrado
Vista desde arriba parte superior izquierda
en la cual se tiene la placa principal de
control, la placa de bus de datos aislado y
se observa la parte de los transformadores
del sistema.
Vista desde arriba parte superior derecha
donde se ve la fuentes pero se aprecia
mejor los transformadores de potencia del
sistema.
Vista desde arriba parte inferior izquierda
donde se tiene la LCD con su faja de datos
el multímetro digital y el generador de
funciones.
Vista desde arriba parte inferior derecha
se observa la fuente variables y la fija así
como su placa de control de tipo de salida
de las fuentes variables.
Frontal Izquierdo donde se tiene la LCD del
sistema conlas entradas delmultímetro con
Frontal Derecho donde se aprecia el botón
de encendido con los conectores de las
punta lógica y la salidas del generador de
funciones tipo BNC.
fuentes variables y fija a su lado
Cableado parte trasera USB, alimentación
y fusible de proteccion.
Vista trasera completa
Caja a medida para poder transporta
el prototipo con mayor facilidad y que
se proteja al ser almacenado para
guardarlo.
Vista frontal con punta lógica del sistema
integrado
Foto del sistema terminado dentro de su caja acrílica donde ya
ajustado y calibrado todas sus salidas, así como también sus
módulos de sensores de las distintas magnitudes físicas, acá se
aprecia como se organizo las salidas y el cableado del mismo.
Vídeos del prototipo funcional del sistema finalizado:
POST#6: Sensor de gas y temperatura portátil de bajo
costo con LCD 16x2 controlador por PIC16F88 y
batería recargable.
Objetivo:
Al cursar las distintas materias de la universidad me tope con proyectos electrónicos
que fueron asignados como prueba de los conocimientos adquiridos en el
tiempo de estudio, en este caso les traigo uno de los proyectos el cual tenia la
premisa de ser una versión de un producto funcional, con acabado para la
venta y que solventara alguna problemática existente en nuestro entorno.
Así que me encamine en el diseño y construcción de un Sensor de Gas y Temperatura
portable, que sea recargable con facilidad y que el mismo sea controlado mediante el
uso de un microcontrolador PIC ejecutando algoritmos en lenguaje C de control, en
cuanto a la etapa de potencia de la entrada de alimentación se basa en el regulador de voltaje
LM7805 de voltaje fijo a 5V, con un LM317 en modo regulador de corriente permitiendo solo el
paso suficiente de la misma para cargar la batería a un 10% de su capacidad de corriente y al
mismo tiempo de un punto anterior al LM317 se toma la alimentación para el dispositivo sin
ninguna restricción de corriente. Con esto obtenemos una carga segura que no destruye la
integridad de la batería y alarga su vida útil. Cuando se encuentra conectado al cargador se
enciende el LED de carga amarillo ademas de que el dispositivo en modo carga puede ser
usado sin problemas mientras se muestra en todo momento en pantalla el estado de la carga
al estar encendido.
El sensor MQ4 al iniciar la lectura de gas necesita de un pre-calentamiento del mismo, esto
para que los componentes internos se calienten y ocurra un proceso químico que detecte el
gas en el lugar. El dispositivo muestra en pantalla en todo momento el estado del gas y la
temperatura en el lugar, como así también la cantidad de carga de la batería.
La carga de la batería en un estado de completa descarga, necesita de al menos de 11 horas
seguidas de alimentación del toma corrientes de 110V con un transformador de 110v a 12v AC,
o cuando esta la batería a media carga simplemente con observar el estado de la carga en la
pantalla. Todo esto sin tener la preocupación de estropearla por sobre carga ya que como es
una carga lenta de solo el 10% de la corriente de la batería esta no sufre luego de estar
completamente recargada simplemente pasaría a un estado de carga flotante.
Al terminar el proyecto propuesto se cumplió con todas las exigencias del curso logrando
la máxima puntuación para el mismo.
Materialesprincipales utilizados:
 1 x PIC16F88. (Muestra gratis obtenida gracias a Microchip)
 2 x Pulsadores - Para control manual desde el frontal.
 1 x Baquelita para el montaje.
 1 x Sensor MQ4 - Sensor de gas natural.
 1 x LCD 16x2 - Para visualización del menú, estado del dispositivo y configuraciones.
 1 x LM7805 regulador de voltaje para la lógica de control.
 1 x LM317 regulador de corriente para la carga de la batería.
 Switch pequeño simple color negro.
 Caja para prototipos de calidad tamaño mediano plástica color negro.
 4 x Patas de goma.
 LM35 - Sensor de temperatura para controlar el ventilador según se necesite.
 1 x Batería Recargable 8.4v ni-mh 200 mAh.
Microcontrolador PIC16F88. MQ4 Sensor de Gas
LM7805 Regulador de voltaje LM317 Regulador
LM35 Sensor de temperatura. QC1602A LCD 16x2.
74HC164
Esquemas de Conexión de algunas partes del proyecto:
LM317 según datasheet. PIC16F88 según datasheet.
MQ4 según datasheet. LM35 según datasheet.
LCD 3 pines. 74HC164 según datasheet.
Esquema Completo
Diagrama de proyecto:
PCB de LCD con 3 pines. PCB de Lógica de control.
PCB de pulsadores de control. PCB de Sensores de gas y temperatura.
PCB completo.
Librerías y algunas rutinas del código fuente desarrolladas para el proyecto:
 LCD con sólo 3 pines. WEB de ejemplo.
 MQ4 sensor de gas ejemplo. WEB de ejemplo 1. WEB de ejemplo 2.
 Lectura del Sensor MQ4 usando una entrada analógica del PIC.
///////////////////////////////////////////////////////////////
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
ADC_1_LM35 = 0;
ADC_2_MQ4 = 0;
ADC_3_SUPPLY = 0;
ADC_4_BATT = 0;
set_adc_channel(1); //BATT CANAL 1 (LM35)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
ADC_1_LM35 = Filtro_Analog_LM35((float) (value*(0.48875)));
//---------------------------------------------------------
value = 0;
set_adc_channel(2); //BATT CANAL 2 (Bateria)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
ADC_4_BATT = Filtro_Analog_BATT((float)(value*0.048828125));
//----------------------------------------------------------
value = 0;
set_adc_channel(3); //BATT CANAL 3 (SUPPLY)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
if((float)(value*0.048828125) > 9)
ADC_3_SUPPLY = (float)(value*0.048828125);
else
ADC_3_SUPPLY = 0;
//---------------------------------------------------------
value = 0;
set_adc_channel(4); //BATT CANAL 4 (Sensor de Gas)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
ADC_2_MQ4 = Filtro_Analog_MQ4((float)(value));
//---------------------------------------------------------
}
Imágenes del sensor de gas en fase de construcción:
PCB perforada - Parte lógica. PCB perforada - LCD 3 pines.
Sensor de temperatura y gas parte
de atrás.
Modulo de pulsadores y LED.
PCB conectadas. Sensor de temperatura y gas
de frontal.
Sensor de temperatura y gas parte
de atrás de serca.
Sensor de temperatura y gas
de lado.
Sensor de temperatura y gas con cajón
exterior prototipo.
Sensor de temperatura y gas dentro
cajón exterior prototipo.
Caja de prototipo marcada lista para
los cortes con la herramienta dremel.
Caja de prototipo ya trabajada y pulido
los bordes.
Vista de la caja de prototipo frontal. Vista de la caja de prototipo frontal
y las demás partes del proyecto.
Colocando separadores para la caída
del LCD 16x2.
LCD 16X2 ajustado en la caja de
prototipos.
Vista de frente con LCD.
Colocando modulo de pulsadores y
LED con sus respectivos separadores
metálicos.
Vista de frente con LCD y modulo de
pulsadores y LED.
Extensión de modulo sensor de gas
y temperatura con alambre de cobre
interno para brindar rigidez al momento
de direccionarlo al punto a medir.
Vista de atrás con LCD , modulo de
pulsadores y parte lógica como
también el control de LCD con 3 pies.
Ajustando los cables en el interior.
Ajustando los cables en el interior
con la batería a un costado con
sierre mágico.
LED de carga, Entrada plug de voltaje
de carga y orificio de salida del modulo
de sensor de gas y temperatura.
Interruptor de apagado del dispositivo.
Cerrando con todas las partes
acomodadas.
Equipo sin el frontal a un lado.
Etiqueta que disimula defectos y
proporciona indicaciones de cada
parte del frontal.
Dispositivo terminado sin frontal.
Imágenes del sensor de gas finalizado:
Foto frontal del equipo con etiqueta. Foto sensor de gas y temperatura.
LCD con sólo 3 pines
30 noviembre, 2009
Esta útil librería permite gestionar un LCD 2×16 compatible
HD44780 con sólo 3 pines de tu micro, utilizando un registro de desplazamiento.
Es una modificación a la conocida Flex_LCD realizada por los amigos Akenafab y
Duende_Azul.
Los pines utilizados son:
LCD_E: señal de control Enable del LCD
LCD_CK: señal de reloj del registro de desplazamiento
LCD_DAT: salida del bit menos signficativo hacia el registro de desplazamiento
// flex_lcd_3_pins.c
//Modificación de Flex_lcd por Duende_Azul y Akenafab
//Trabaja con 3 pines y 74VHC164
//8-Bit Serial-In, Parallel-Out Shift Register
//La LCD se usa en modo 4bits
//Revisar diagrama de conexion Adjunto
//Se ha utilizado a una velocidad de @40MHz sin ningun problema
//No esta habilitada la lectura del LCD
//RW debe ir a gnd
//Definir pines antes de llamar libreria//
//#define LCD_E PIN_A0
//#define LCD_CK PIN_A1
//#define LCD_DAT PIN_A2
//========================================
int RS_bit;
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
void lcd_send_nibble(int8 nibble, int rs_bit)
{
int x;
if(RS_bit==1)
nibble=nibble|0x10;
for(x=0;x<5;x++) {
output_bit(LCD_DAT,shift_right(&nibble,1,0));
delay_cycles(1);
output_low(LCD_CK);
delay_us(1);
output_high(LCD_CK);}
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//-----------------------------------
//-----------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//output_low(LCD_RS);
RS_bit=0;
delay_us(100);
if(address)
//output_high(LCD_RS);
RS_bit=1;
else
//output_low(LCD_RS);
RS_bit=0;
delay_cycles(1);
output_low(LCD_E);
lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}
//----------------------------
void lcd_init(void)
{
int8 i;
//output_low(LCD_RS);
RS_bit=0;
output_low(LCD_E);
delay_ms(20);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03,RS_bit);
delay_ms(5);
}
lcd_send_nibble(0x02,RS_bit);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
delay_ms(5);
}
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
void lcd_putc(char c)
{
switch(c)
{
case 'f': //limpia pantalla
lcd_send_byte(0,1);
delay_ms(8);
break;
case 'n': //cambio de linea
lcd_gotoxy(1,2);
break;
case 'b': //retrocede 1 caracter
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
//------------------------------
void lcd_setcursor_vb(short visible, short blink) {
lcd_send_byte(0, 0xC|(visible<<1)|blink);
}
#include <16F88.h>
#FUSES
INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,NOFCM
EN,NOIESO
#use delay(Internal=8M)
//------------ Pines del LCD ---------------------//
#define LCD_E PIN_A0
#define LCD_CK PIN_A1
#define LCD_DAT PIN_A2
//--------------------------------------------------//
#include "flex_lcd_3pins.c" // Cargamos libreria del lcd
void main() {
delay_ms(100);
output_a(0);
output_b(0);
lcd_init(); // inicializamos el LCD
lcd_setcursor_vb(1,1); //cursor visible,papadeo
while(1){
printf(lcd_putc,"f-LCD 3 pin Mode-n* !.|.|..|.|.! *");
delay_ms(1000);
printf(lcd_putc,"f* Duende_Azul *n * Akenafab *");
delay_ms(1000);
} //end while
} //end main
Analog Gas Sensor(MQ4) (SKU:SEN0129)
Contents
[hide]
 1 Introduction
o 1.1 Specification
 2 Pin Definition
 3 Potentiometer
o 3.1 Connection Diagram
o 3.2 Sample Code
Introduction
The MQ4 is used in gas leakage detecting equipment in consumer and industry markets,this sensor
is suitable for detecting CH4,Natural gas, LNG, avoid exposure to alcohol, cooking fumes, and
cigarette smoke. The sensitivity can be adjusted by the potentiometer.
Specification
 Power supply needs: 5V
 Interface type: Analog
 Pin Definition: 1-Output 2-GND 3-VCC
 High sensitivity to CH4£¬Natural gas
 Small sensitivity to alcohol, smoke
 Fast response
 Stable and long life
 Simple drive circuit
 Size: 40x20mm
Pin Definition
1. Signal Output
2. GND
3. Power
Analog Sensor Pin Definition
Potentiometer
Potentiometer is used to calibrate the readings from this sensor as stated on the datasheet:
SENSITVITY ADJUSTMENT
Resistance value of MQ-4 is difference to various kinds and various concentration gases. So,When
using this components, sensitivity adjustment is very necessary. we recommend that you calibrate
the detector for 5000ppm of CH4 concentration in air and use value of Load resistance ( RL) about
20KΩ(10KΩ to 47KΩ). When accurately measuring, the proper alarm point for the gas detector
should be determined after considering the temperature and humidity influence.
Connection Diagram
Analog sensor connection diagram
Sample Code
?
1
2
3
4
5
6
7
8
9
10
11
12
///Arduino Sample Code
void setup()
{
Serial.begin(9600); //Set serial baud rate to 9600 bps
}
void loop()
{
int val;
val=analogRead(0);Read Gas value from analog 0
Serial.println(val,DEC);//Print the value to serial port
delay(100);
}
This example is for Wiring version 1.0 build 0100+. If you have a previous version, use the
examples included with your software. If you see any errors or have comments, please let
us know.
Air Quality MQ135 sensor by BARRAGAN http://barraganstudio.com
Reads values from an air quality sensor connected to the analog input pin 0. The value read from
the sensor is proportional to the air quality measured by the sensor. The value read is printed to
the serial monitor
int sensorValue;
void setup()
{
Serial.begin(9600); // sets the serial port to 9600
}
void loop()
{
sensorValue = analogRead(0); // read analog input pin 0
Serial.println(sensorValue, DEC); // prints the value read
delay(100); // wait 100ms for next reading
}
POST#5: Convertidor USB a Serial, que trabaja con
los integrados PL2303 Prolific y el conocido MAX232
de Maxim.
Objetivo:
Diseño y construcción de un convertido USB a Serial para así facilitar la conexión de los
proyectos que se diseñaron con el antiguo conector DB9 que trabaja sobre la conexión serial
que cada día es mas difícil de conseguir en las PC y laptop actuales imposibilitando el uso de
estos proyectos en los nuevos sistemas de computación, este modulo se pensó para que
sea fácil de armar y con componentes no muy difíciles de conseguir en las tiendas online y
ademas que trabaje en la mayoría de sistemas operativos existentes, usando
un mínimo de configuración por el usuario al ser plug and play con muy buen soporte para
driver.
El modulo se construye con una poca cantidad de componentes de los cuales los mas
importantes es el PL2303 que convierte de USB a Serial pero a niveles TTL de voltaje y luego
se adapta el voltaje con el conocido MAX232 para poder llegar a los valores de voltaje
normales de las comunicaciones serial de las PC.
Nota: Windows 8 no soporta las versiones del chip HXA/XA (aparece un código de error en
controlador).
Materialesprincipales utilizados:
 1 x PL2303 Prolific.
 1 x MAX232 - (Muestra gratis obtenida gracias a Maxim).
 1 x Baquelita para el montaje.
 4 x Patas de goma.
 1 x Lamina de acrílico transparente para la base y tapa superior.
 1 x Conector DB9 (RS232)
 1 x Conector USB tipo B.
PL2303 de Prolific. Conector USB tipo B utilizado.
MAX232 de Maxim
Esquemas de Conexión de algunas partes del proyecto:
PL2303 esquema según datasheet. MAX232 esquema según datasheet.
USB tipo B
Esquema PCB:
PCB en negro PCB en color
Interior del convertidor:
Vista superior. PCB adaptador SMD a DIP.
Vista inferior con soporte metalico.
Imágenes del convertidor finalizado:
Vista final superior. Ejemplo de uso del modulo.
MAX232 product image MAX232 DUAL
ELA-232 DRIVERS/RECEIVERS
The physical communication standard defines the signal voltage of -10V for logic '1', and +10V
for logic '0'. However in practise, the voltage can be ranging from +/-3V to +/-25V. Not to worry if
the measured voltage is not +/-10V. Typical receiver is able detect the incoming signal with
voltage as low as +/-3V.
A microcontroller like PIC16F877a uses USART (5V system). The PC (personal computer) that
we have in the office/home uses the standard RS232. To enable a microcontroller to
communicate with the computer, a RS232 to TTL converter is required.
IC chip maker has come up with the integrated circuit for interfacing RS232 with TTL logic (5V
for logic 1, 0V for logic 0), making the interfacing work very simple. MAX232 is one of the many
IC in the market which helps to convert between RS232 -/+10V and TTL +/- 5V. It is a simple
voltage level converter in short. The charge pump design allows the circuit to generate +/-10V
from a 5V supply, with the help from the four capacitor. With charge pump to double up the
supply voltage for RS232 transmitter, there is no need to design a power supply for +/-10V.
The diagram on the left shows the schematic of the MAX232 IC circuit. It consist of only 4x 1uF
16V electrolytic capacitor, and the MAX232 IC itself. It is that simple. I have include a layout
which I always use for PC to PIC16F877a microcontroller, RS232 interface.
http://www.dfrobot.com/
http://jartur2013.blogspot.com/2013/12/post11-controlador-de-servo-con-dspic-y.html
POST#11: Controlador de 20 Servomotores con
DSPIC y estabilidad con el modulo GY-80
Objetivo:
Con el fin de realizar futuros proyectos de robótica donde se tengan muchas articulaciones con
lo cual se deba tener estabilidad y movimientos precisos, me di a la tarea de diseñar y
construir un prototipo de placa controladora de servomotores, con visualización LCD,
conectividad Xbee o mediante Bluetooth Bee y que cuente con variedad de sensores, como los
que proporciona el modulo GY-80. Todo esto para facilitar los desarrollos venideros y con esto
solo enfocarme principalmente en la parte mecánica y la programación de los movimiento, con
sus respectivos sistemas de control.
Materialesprincipales utilizados:
 1 x dsPIC30F4013. (Muestra gratis obtenida gracias a Microchip).
 1 x LM2576T-5.0P+ (Step-Down Regulador de Voltaje 5v).
 1 x LM1117T regulador 3.3v.(Muestra gratis obtenida gracias a ST).
 1 x Xbee Serie 2 o Bluetooth bee
 1x Memoria EEPROM 24LC128
 2 x Pulsadores
 1 x Espadines para placa de sensores con conexión I2C.
 GY-80 (L3G4200D + ADXL345 + HMC5883L + BMP085).
 Giroscopio de 3 ejes.
 Aceleremotro de 3 ejes.
 Sensor de campo magenetico de 3 ejes.
 Sensor de presión y temperatura.
 LCD 2x16 con placa de conexión vía I2C.
Placa con todos los sensores incluidos con conexión
por medio de bus I2C.
Modulo de sensores GY-80
PCB del proyecto con varias vistas 2D y 3D:
Vista del PCB generada con Eagle3D
con serigrafia y casi todos los
componentes.
Vista del PCB parte inferior en angulo
con Google SketchUp 8
Vista del PCB parte superior en angulo
con Google SketchUp 8.
Vista del PCB parte inferior
con Google SketchUp 8 con
serigrafia.
Vista del PCB parte superior
con Google SketchUp 8 con
serigrafia.
Vista del PCB que se uso para ser
transferido a la placa.
Vista del PCB en el modo Tarjeta en
Eagle.
Diagrama de proyecto:
Circuito esquemático en Eagle.
Imágenes en fase de construcción y finalizado:
Acá se logra observa la placa en sus fases de construcción, donde se tiene
un prototipo final para las pruebas de los distintos servomotores, ya sea
solos o conectados varios de ellos a la vez, logrando controlar su posición
sin problemas mediante conexión encalabrina Xbee con la computadora
personal, mediante comandos por el protocolo serial RS232. Por este mismo
canal se logra obtener y leer en tiempo real los valores de posición de los
distintos sensores en el modulo GY-80, con los cuales más adelante se
trabajara en conjunto con los servomotores para proyectos de robótica.
Placa lista para la soldadura
vista desde arriba.
Placa ya perforada con el tóner
retirado lista para la soldadura
vista desde abajo.
Placa finalizada en pruebas conectada
al programador PICkit 2 clone por medio
del cable de ICSP.
Placa finalizada, otras imágenes con
la placa de sensores a un lado.
Controlador con 5 modelos de servomotor distintos
de marcas variadas usados en la pruebas.
Bibliografía, Web y Datasheet:
 Web:
 http://picmania.garcia-cuervo.net/picc_servos_x_8.htm
 http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic-
16f876a_13.html
 http://blog.oscarliang.net/use-gy80-arduino-adxl345-accelerometer/
http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic-16f876a_13.html
Control de 8 servos con PIC
Este proyecto consiste en el control de 8 servos por el puerto c del pic . En la
interacción para el control de los servos se emplea un teclado numérico y un lcd,
ambos controlados por el puero b del PIC.
En su funcionamiento, el pic pide introducir el número del servo a controlar.
Posteriormente solicita el ángulo de orientación deseado para ese servo ( de 0º a
180º). El valor se acepta con la tecla “*” y el programa vuelve a mostrar un
mensaje de presentación para un nuevo control. Si el ángulo introducido es
superior a 180º, el pic toma por defecto 180º.
Para la generación de las señales moduladas de control de los servos (bit_pwmx),
se emplea la subrutina de interrupción por rebose del timer 0. La orientación de
cada servo se establece con el valor que se carga en la variable pwmx, donde x es
el número de servo correspondiente. Con cada llamada a la subrutina de
generación de la señal por mediación de la interrupción del timer 0, se incrementa
la variable control_pwm que comparandose con el valor en pwmx, decide si debe
o no cortar alguno de los pulsos de modulación de los servos.
control_pwm++;
if (control_pwm==0) bit_pwm0=1;
if (control_pwm==pwm0) bit_pwm0=0;
Cuando la variable control_pwm, incrementandose en cada rebose del timer0,
llega a su máximo valor y pasa a ser 0, todas las señales moduladas comienzan un
nuevo ciclo.
Para interpretar los valores numéricos de varias cifras a partir de números simples
introducidos por teclado, primero espera a que se pulse una tecla
x=kbd_getc();
el valor obtenido está en codificación ASCII por lo que habrá que pasarlo a su valor
numérico decimal
tecla=x-48;
si se ha pulsado una tecla se descartan las pulsaciones en # y * puesto que solo se
necesitan números
if (x!=0&&x!='*'&&x!='#'){
y conforme se van pulsando números el último pulsado será las unidades y los
anteriores van pasando a decenas y centenas
centenas=decenas;
decenas=unidades;
unidades=tecla;
conforme se van introduciendo números simples se va mostrando el número
completo por pantalla lcd
printf(lcd_putc,"f Angulo = %ld%d%dn", centenas, decenas, unidades);
y finalmente se guarda en una única variable el número completo resultante de
todos los números simples
angulo=(centenas*100)+(decenas*10)+unidades;
[+/-] Ver / Ocultar programa completo en C
En la simulación bajo proteus se comprueba el cambio en el tiempo de las señales
de control de los servos individualmente en función del valor del ángulo introducido.
//////////////////////////////////////////////////////////////////////
//////////
//
//
// CONTROL DE 8 SERVOS CON
PIC //
//
//
// (c)
RobotyPic //
//
//
//////////////////////////////////////////////////////////////////////
//////////
#include <16f876a.h> //archivo para control del pic
16f876a
#fuses XT,NOWDT,NOPROTECT,NOLVP //protecciones
#use delay(clock=4000000) //frecuencia de reloj 4 MHz
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
#define use_portb_lcd TRUE //Configuración puerto b
control lcd
#define use_portb_kbd TRUE //Configuración puerto b
control teclado
#include <lcd.c> //archivo para control del lcd
#include <kbd.c> //archivo para control del
teclado
#bit Bit_PWM0 = PORTC.0 //Bit 0 puerto C Salida
modulación 0
#bit Bit_PWM1 = PORTC.1 //Bit 1 puerto C Salida
modulación 1
#bit Bit_PWM2 = PORTC.2 //Bit 2 puerto C Salida
modulación 2
#bit Bit_PWM3 = PORTC.3 //Bit 3 puerto C Salida
modulación 3
#bit Bit_PWM4 = PORTC.4 //Bit 4 puerto C Salida
modulación 4
#bit Bit_PWM5 = PORTC.5 //Bit 5 puerto C Salida
modulación 5
#bit Bit_PWM6 = PORTC.6 //Bit 6 puerto C Salida
modulación 6
#bit Bit_PWM7 = PORTC.7 //Bit 7 puerto C Salida
modulación 7
/********************** Prototipos de las funciones
***************************/
void main (void); //función principal
void generacion_pwm (void); //genera señales moduladas para control
de servos
void presentacion (void); //mensaje de presentación
/********************** Variables para generación PWM
*************************/
int8 PWM0=0,PWM1=0,PWM2=0,PWM3=0,PWM4=0,PWM5=0,PWM6=0,PWM7=0;
//Valores de las señales PWM
int8 control_PWM=0;
/*********************************************************************
*********/
/******************* FUNCIÓN GENERACIÓN MODULACIONES PWM
**********************/
#int_Timer0
void generacion_pwm(){
control_PWM++; //Incremento cada rebose del timer0
if (control_PWM==0){ //inicio del ciclo con todos los
pulsos pwm a 1
Bit_PWM0=1;
Bit_PWM1=1;
Bit_PWM2=1;
Bit_PWM3=1;
Bit_PWM4=1;
Bit_PWM5=1;
Bit_PWM6=1;
Bit_PWM7=1;
}
//Finalizará el pulso de modulación según el valor del
correspondiente pwm
if (control_PWM==PWM0) Bit_PWM0=0;
if (control_PWM==PWM1) Bit_PWM1=0;
if (control_PWM==PWM2) Bit_PWM2=0;
if (control_PWM==PWM3) Bit_PWM3=0;
if (control_PWM==PWM4) Bit_PWM4=0;
if (control_PWM==PWM5) Bit_PWM5=0;
if (control_PWM==PWM6) Bit_PWM6=0;
if (control_PWM==PWM7) Bit_PWM7=0;
set_timer0(255); //Carga del contador
}
/*********************************************************************
*********/
/************************* PRESENTACIÓN LCD
***********************************/
void presentacion (){
lcd_putc("f Introduce n");
lcd_putc(" num. de servo ");
}
/*********************************************************************
*********/
/******************** FUNCIÓN PRINCIPAL
***************************************/
void main(){
int x; //Valor ASCII de la tecla pulsada
int tecla; //Valor numérico de la tecla pulsada
int servo; //Número de servo
int16 angulo; //Ángulo del servo
int16 centenas; //variable para las centenas del
ángulo
int decenas,unidades; //Variable para las decenas y
unidades del ángulo
int pwm; //valor de la modulación por teclado
trisc=0x00; //Puerto C como salida de datos
pwm0=7; //Impulso de 0,8 msg de pwm0 posición
0º
pwm1=7; //Impulso de 0,8 msg de pwm1 posición
0º
pwm2=7; //Impulso de 0,8 msg de pwm2 posición
0º
pwm3=7; //Impulso de 0,8 msg de pwm3 posición
0º
pwm4=7; //Impulso de 0,8 msg de pwm4 posición
0º
pwm5=7; //Impulso de 0,8 msg de pwm5 posición
0º
pwm6=7; //Impulso de 0,8 msg de pwm6 posición
0º
pwm7=7; //Impulso de 0,8 msg de pwm7 posición
0º
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //Configuración
interrupción generación PWM
enable_interrupts(INT_TIMER0); //Habilitación interrupción
generación pwm
enable_interrupts(GLOBAL); //Habilitación de las
interrupciones
port_b_pullups(TRUE); //Habilitación resistencias pullups puerto
b
lcd_init(); //Inicialización del lcd
kbd_init(); //Inicialización del teclado
presentacion (); //Muestra mensaje de inicio en lcd
while (true){
x=kbd_getc(); //En "x" valor ASCII de la
tecla pulsada
if (x!=0&&x!='9'&&x!='8'&&x!='*'&&x!='#'){ //Si se pulsa tecla
numérica 0 a 7 ...
servo=x-48; //Valor ASCII se pasa a valor numerico
de servo
printf(lcd_putc,"fServo = %dn", servo); //...muestra el
valor pulsado
lcd_putc("Introduce angulo");
while (x!='*'){ //Espera a introducir ángulo y
aceptar con *
x=kbd_getc();
tecla=x-48;
if (x!=0&&x!='*'&&x!='#'){ //Solo se toman los valores
numéricos
//A cada tecla pulsada se desplaza posición decimal y
se muestra
centenas=decenas;
decenas=unidades;
unidades=tecla;
printf(lcd_putc,"f Angulo = %ld%d%dn", centenas,
decenas, unidades);
lcd_putc(" * para aceptar");
}
}
angulo=(centenas*100)+(decenas*10)+unidades;
if (angulo>180) angulo=180; //No acepta valores >180º
pwm=(angulo/13)+7; //Ajuste modulación en función
del valor introducido
centenas=decenas=unidades=0;
//Según número de servo introducido se le aplica el ángulo
elegido
switch(servo){
case 0: pwm0=pwm; break;
case 1: pwm1=pwm; break;
case 2: pwm2=pwm; break;
case 3: pwm3=pwm; break;
case 4: pwm4=pwm; break;
case 5: pwm5=pwm; break;
case 6: pwm6=pwm; break;
case 7: pwm7=pwm; break;
}
printf(lcd_putc,"fServo %dn", servo);
printf(lcd_putc," Angulo %ld", angulo);
delay_ms(200);
presentacion();
}
}
}
Comunicación I2C entre 3 PIC
El ejemplo didáctico consiste en lo siguiente. El PIC maestro carga en los PIC
esclavos datos aleatorios en 10 posiciones de memoria. Primero con el PIC esclavo
1, dirección I2C en el bus 0xA0. Posteriormente con el PIC esclavo 2, con dirección
I2C 0xB0. Cuando ha cargado los datos en ambos PIC, hace una lectura del dato
que ha guardado en la posición 5 de ambos PIC y la muestra por el LCD.
Pulsa en la imagen para ampliarla
PIC Maestro
Lo primero de todo será configurar la comunicación I2C en la cabecera del
programa. En dicha configuración vamos a establecer que se trata del PIC maestro
(master), que vamos a usar velocidad rápida (fast), y que los pines del PIC van a
ser C4 para la línea sda del bus y C3 para scl, propios del módulo SSP que este PIC
posee.
#use i2c(Master, fast, sda=PIN_C4,scl=PIN_C3)
Si el PIC no posee módulo SSP o queremos emplear otros pines diferentes, se
puede realizar la comunicación mediante software forzando esta característica e
indicando los pines que van a ser utilizados.
#use i2c(Master, fast, sda=PIN_B2,scl=PIN_B3, force_sw)
A partir de este momento, para enviar algo por el bus I2C ejecutamos la
función Envio_I2C(),en la que deberemos especificar previamente la dirección en
el bus I2C del esclavo con el que se quiere comunicar, la posición del buffer de
memoria donde se va a guardar en el esclavo el dato enviado y la información del
propio dato.
direccion=0xA0; //Dirección del esclavo en el bus I2C
posicion=0x05; //Posición donde se guardará el dato
dato=0xfb; //Dato a transmitir
Envio_I2C(direccion, posicion, dato); //Función para envio I2C
Dentro ya de la función, el envío de cada byte de datos se realizará con las
siguientes sentencias:
i2c_start(); //Comienzo comunicación
i2c_write(direccion); //Dirección del esclavo en el bus I2C
i2c_write(posicion); //Posición donde se guardará el dato
i2c_write(dato); //Dato a transmitir
i2c_stop(); //Fin comunicación
Para la lectura de los esclavos el proceso es similar, pero esta vez ejecutando la
función Lectura_I2C(). También previamente deberemos especificar la dirección
del esclavo en el bus I2C, la posición en el buffer de memoria del PIC esclavo de
donde queremos obtener el byte que contiene y la variable donde lo vamos a
guardar (&dato).
direccion=0xA0; //Dirección del esclavo en el bus I2C
posicion=0x05; //Posición donde se guardará el dato
Lectura_I2C(direccion, posicion, &dato); //Función para envío I2C
Dentro ya de la función ejecutaremos las sentencias para el envío de cada byte de
datos:
i2c_start(); //Comienzo de la comunicación
i2c_write(direccion); //Dirección del esclavo en el bus I2C
i2c_write(posicion); //Posición de donde se leerá el dato
en el esclavo
i2c_start(); //Reinicio
i2c_write(direccion+1); //Dirección del esclavo en modo lectura
dato=i2c_read(0); //Lectura del dato
i2c_stop(); //Fin comunicación
PIC esclavo
Igual que en el PIC master, en cada PIC esclavo se debe configurar la comunicación
I2C. En este caso vamos a establecer que se trata de un PIC esclavo (slave), que
vamos a usar velocidad rápida (fast), que los pines del PIC van a ser C4 para la
línea sda y C3 para scl, y cual va a ser su dirección en el bus (address).
#use i2c(slave, fast, sda=PIN_C4, scl=PIN_C3, address=0xA0)
A diferencia del PIC maestro que es quien decide en que momento iniciar la
comunicación, en los esclavos, la comunicación se establece cuando, mediante la
interrupción #INT_SSP se detecta actividad en el bus I2C.
En el caso del PIC esclavo, si que vamos a necesitar del módulo SSP, por tanto no
se puede forzar una comunicación por software como en el PIC maestro y los pines
han de ser necesariamente los propios del bus I2C del PIC.
#INT_SSP
void ssp_interupt (){
int incoming; //Variable donde se recibe el byte que
manda el maestro
fstate = i2c_isr_state(); //Lectura del estado del bus I2c la
interrupción
/* Solicitud de lectura del esclavo por el master */
if(fstate == 0x80) {
//Manda al maestro la información contenida en la posición de
memoria que le ha solicitado
i2c_write (buffer[posicion]);
SolicitudMaster=1; //Fin de solicitud del master
}
/* Sino está solicitando lectura es que está enviando algo */
else { //Sino es que hay dato en el bus
I2C...
incoming = i2c_read(); //... lo lee
if (fState == 1) { //Información recibida corresponde a
la posicion
posicion = incoming; //Se guarda posición
}
else if (fState == 2) { //Información recibida corresponde al
dato
buffer[posicion] = incoming; //Se guarda dato
EnvioMaster=1; //Fin del envío del master
}
}
}
[+/-] Ver / Ocultar programa en C PIC Maestro
[+/-] Ver / Ocultar programa en C PIC Esclavo 1
[+/-] Ver / Ocultar programa en C PIC Esclavo 2
En esta animación se ve la demostración de funcionamiento bajo proteus.
Descarga de los archivos del proyecto.
http://robotypic.blogspot.com/2012/03/comunicacion-i2c-entre-tres-pics.html
https://www.youtube.com/watch?v=_aTmVS3xGOc

Weitere ähnliche Inhalte

Was ist angesagt?

Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónJaime E. Velarde
 
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRON
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRONGuia rapida modulos analogicos ad003 da003-da004-mad01 OMRON
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRONmaherbas
 
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA EquipoSCADA
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Julio Jornet Monteverde
 
Cvm k2 m98206401 01
Cvm k2 m98206401 01Cvm k2 m98206401 01
Cvm k2 m98206401 01TIC
 
Informe N°2-Microcontroladores
Informe N°2-MicrocontroladoresInforme N°2-Microcontroladores
Informe N°2-MicrocontroladoresOmar Ruiz
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84adanqueas
 
Redes multiplexadas en automocion
Redes multiplexadas en automocionRedes multiplexadas en automocion
Redes multiplexadas en automocionJVC_Slide
 
Automatizacion en la ingenieria electrica
Automatizacion en la ingenieria electricaAutomatizacion en la ingenieria electrica
Automatizacion en la ingenieria electricaMarlon Burga Tineo
 
Introduccion al msp430
Introduccion al msp430Introduccion al msp430
Introduccion al msp430Cesar MARTI
 

Was ist angesagt? (20)

Taxímetro con Pic16F887
Taxímetro con Pic16F887Taxímetro con Pic16F887
Taxímetro con Pic16F887
 
6. pwm ccp
6. pwm ccp6. pwm ccp
6. pwm ccp
 
Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuación
 
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRON
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRONGuia rapida modulos analogicos ad003 da003-da004-mad01 OMRON
Guia rapida modulos analogicos ad003 da003-da004-mad01 OMRON
 
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
 
Ch423 etc es
Ch423 etc esCh423 etc es
Ch423 etc es
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430
 
Cvm k2 m98206401 01
Cvm k2 m98206401 01Cvm k2 m98206401 01
Cvm k2 m98206401 01
 
Plc progr
Plc progrPlc progr
Plc progr
 
Proyecto2
Proyecto2Proyecto2
Proyecto2
 
Informe N°2-Microcontroladores
Informe N°2-MicrocontroladoresInforme N°2-Microcontroladores
Informe N°2-Microcontroladores
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84a
 
Redes multiplexadas en automocion
Redes multiplexadas en automocionRedes multiplexadas en automocion
Redes multiplexadas en automocion
 
Automatizacion en la ingenieria electrica
Automatizacion en la ingenieria electricaAutomatizacion en la ingenieria electrica
Automatizacion en la ingenieria electrica
 
SIMATIC S7
SIMATIC S7SIMATIC S7
SIMATIC S7
 
Proyecto1
Proyecto1Proyecto1
Proyecto1
 
Control nivel luz
Control nivel luzControl nivel luz
Control nivel luz
 
Diagrama escalera
Diagrama escaleraDiagrama escalera
Diagrama escalera
 
Mm card 7
Mm card 7Mm card 7
Mm card 7
 
Introduccion al msp430
Introduccion al msp430Introduccion al msp430
Introduccion al msp430
 

Ähnlich wie Proyecto de micros

Diapositiva
DiapositivaDiapositiva
Diapositivawiliune
 
Apunte plc
Apunte plcApunte plc
Apunte plcleoxiver
 
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...LAUMAS
 
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886Victor Asanza
 
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)Cristina Urdiales
 
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLC
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLCATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLC
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLCRémi GUILBERT
 
Curso sobre a Familia PLC 5 da Allen Bradley
Curso sobre a Familia PLC 5 da Allen BradleyCurso sobre a Familia PLC 5 da Allen Bradley
Curso sobre a Familia PLC 5 da Allen Bradleyjeffersonmiuradb
 
4ª practica control del puerto de paralelo,activación y desactivación de equipos
4ª practica control del puerto de paralelo,activación y desactivación de equipos4ª practica control del puerto de paralelo,activación y desactivación de equipos
4ª practica control del puerto de paralelo,activación y desactivación de equiposJose Alvino Utp
 
Tutorial-pic16 f877a- algunas-mejoras
Tutorial-pic16 f877a- algunas-mejorasTutorial-pic16 f877a- algunas-mejoras
Tutorial-pic16 f877a- algunas-mejorasAldo Corp
 
Comunicación Serial entre un microcontrolador y un PC
Comunicación Serial entre un microcontrolador y un PCComunicación Serial entre un microcontrolador y un PC
Comunicación Serial entre un microcontrolador y un PCFernando Cahueñas
 
Introduccion al plc polliotto luis
Introduccion al plc   polliotto luisIntroduccion al plc   polliotto luis
Introduccion al plc polliotto luisliopol
 
Plc 01
Plc 01Plc 01
Plc 01ostol
 
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptx
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptxSISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptx
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptxEdwinDeLuna4
 

Ähnlich wie Proyecto de micros (20)

Adc 4
Adc 4Adc 4
Adc 4
 
Diapositiva
DiapositivaDiapositiva
Diapositiva
 
Taller de Robótica Educativa.pdf
Taller de Robótica Educativa.pdfTaller de Robótica Educativa.pdf
Taller de Robótica Educativa.pdf
 
Apuntes plc
Apuntes plcApuntes plc
Apuntes plc
 
Apunte plc
Apunte plcApunte plc
Apunte plc
 
Apunte plc
Apunte plcApunte plc
Apunte plc
 
Apunte plc
Apunte plcApunte plc
Apunte plc
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...
Catálogos de productos 03: electrónica de pesaje - indicadores de peso & tran...
 
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
 
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)
 
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLC
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLCATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLC
ATÍPICO PODEROSO TAMAÑO DE BOLSILLO INDUSTRIAL PLC
 
Curso sobre a Familia PLC 5 da Allen Bradley
Curso sobre a Familia PLC 5 da Allen BradleyCurso sobre a Familia PLC 5 da Allen Bradley
Curso sobre a Familia PLC 5 da Allen Bradley
 
metrologia
metrologia metrologia
metrologia
 
4ª practica control del puerto de paralelo,activación y desactivación de equipos
4ª practica control del puerto de paralelo,activación y desactivación de equipos4ª practica control del puerto de paralelo,activación y desactivación de equipos
4ª practica control del puerto de paralelo,activación y desactivación de equipos
 
Tutorial-pic16 f877a- algunas-mejoras
Tutorial-pic16 f877a- algunas-mejorasTutorial-pic16 f877a- algunas-mejoras
Tutorial-pic16 f877a- algunas-mejoras
 
Comunicación Serial entre un microcontrolador y un PC
Comunicación Serial entre un microcontrolador y un PCComunicación Serial entre un microcontrolador y un PC
Comunicación Serial entre un microcontrolador y un PC
 
Introduccion al plc polliotto luis
Introduccion al plc   polliotto luisIntroduccion al plc   polliotto luis
Introduccion al plc polliotto luis
 
Plc 01
Plc 01Plc 01
Plc 01
 
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptx
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptxSISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptx
SISTEMA DE ACQUISICION MAXIS unidad MAXIS.pptx
 

Kürzlich hochgeladen

Patologia General DRA Tiñini Banknco.pdf
Patologia General DRA Tiñini Banknco.pdfPatologia General DRA Tiñini Banknco.pdf
Patologia General DRA Tiñini Banknco.pdfNATHALIENATIUSHKAESP
 
CONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosCONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosJENNIFERBERARDI1
 
1. PRESENTACION COSMOBIOLOGIA.pdf ler el texto
1. PRESENTACION COSMOBIOLOGIA.pdf  ler el texto1. PRESENTACION COSMOBIOLOGIA.pdf  ler el texto
1. PRESENTACION COSMOBIOLOGIA.pdf ler el textoangelcajo31
 
-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo VenezuelaJESUS341998
 
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdf
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdfDIARIO EL PERUANO 19-06-202hhhhhhhh3.pdf
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdfhugorebaza00
 
¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!Yes Europa
 
FASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptxFASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptx10ColungaFloresJosSa
 
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdf
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdfUñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdf
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdfCinthiaRivera31
 
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICO
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICOMODERNISMO VS POSMODERNISMO CUADRO SINOPTICO
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICOIreneGonzalez603427
 

Kürzlich hochgeladen (9)

Patologia General DRA Tiñini Banknco.pdf
Patologia General DRA Tiñini Banknco.pdfPatologia General DRA Tiñini Banknco.pdf
Patologia General DRA Tiñini Banknco.pdf
 
CONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosCONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datos
 
1. PRESENTACION COSMOBIOLOGIA.pdf ler el texto
1. PRESENTACION COSMOBIOLOGIA.pdf  ler el texto1. PRESENTACION COSMOBIOLOGIA.pdf  ler el texto
1. PRESENTACION COSMOBIOLOGIA.pdf ler el texto
 
-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela
 
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdf
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdfDIARIO EL PERUANO 19-06-202hhhhhhhh3.pdf
DIARIO EL PERUANO 19-06-202hhhhhhhh3.pdf
 
¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!
 
FASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptxFASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptx
 
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdf
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdfUñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdf
Uñas en Gel emprendedores CURSO-DE-UNAS-ACRILICAS.pdf
 
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICO
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICOMODERNISMO VS POSMODERNISMO CUADRO SINOPTICO
MODERNISMO VS POSMODERNISMO CUADRO SINOPTICO
 

Proyecto de micros

  • 1. POST#4: Fuente Digital de dos Salidas variables y una fija a 5v con LCD 40x2, PIC y comunicación mediante el protocolo serial RS232 Objetivo: Al realizar los distintos proyectos con el tiempo llego la necesidad de tener una fuente confiable que llene las necesidades básicas de todo laboratorio electrónico así que me encamine en el diseño y construcción de una Fuente de laboratorio digital de tres salidas, dos salidas variables de voltaje de 1.2V a 25V y medidor de corriente y una salida fija de 5V. La fuente es controlada mediante el uso de un microcontrolador PIC ejecutando algoritmos en lenguaje C de control y comunicación con la PC mediante serial por el puerto RS232, la etapa de potencia de las salidas se basa en el regulador de voltaje Step-Down LM2576 en su versión de voltaje ajustable como en la de voltaje fijo, con esto se logra una alta eficiencia en la regulación de voltaje, un mínimo de desperdicio en perdidas de disipación de calor así como una potencia de salidas de 3 Amp en una de las salidas y en las otras dos de solo 2 Amp en cada una de ellas. El equipo cuenta con salidas que ademas de ser dos de ellas variables y una fija, estas se pueden habilitar o inhabilitar para así poder usar solo la que se necesite o en caso de cortocircuito inhabilitarla rápidamente para evitar daños también para controlarla se usan los pulsadores del frontal del equipo activando o desactivando las salidas así como también es posible por medio de una aplicación desarrollada a la medida para el dispositivo en lenguaje C# de .NET, tener un monitoreo en tiempo real del voltaje y corriente en cada una de las salidas así como también la temperatura en su interior. Materiales principales utilizados:  1 x PIC16F917. (Microchip)  1 x MAX232 - (Muestra gratis obtenida gracias a Maxim)  1 x LM2576T-5.0P+ (Step-Down Regulador de Voltaje 5v).  1 x LM2576T-ADJ (Step-Down Regulador de Voltaje Variable).  6 x Pulsadores - Para control manual desde el frontal.  1 x Baquelita para el montaje.
  • 2.  1 x LCD 40x2 - Para visualización del menú, estado del dispositivo y configuraciones.  2 x Conector banana de chasis dorados dobles polarizados - Para las salidas de voltaje.  2 x Conector banana normal dos colores - Para la salida de voltaje de 5V.  3 x Puente rectificador - Para la salida de los transformadores.  2 x Transformador 12v-0-12v a 4A. (Usado en las 3 salidas de voltaje).  1 x Transformador 12v a 1A. (Lógica y backlight).  1 x LM7805 regulador de voltaje para la lógica de control.  4 x Potenciómetro - 2 de 1 KΩ y 2 de 10 KΩ.  Switch grande doble con led para el frontal.  Switch grande simple transero para cortar el cable vivo de la red 110v.  Fusible y porta fusible de chasis europeo.  Caja para prototipos de calidad tamaño grande.  4 x Patas de goma.  1 x Conector DB9 (RS232)  Manecillas para los potenciometros con detalle metálico.  Modulo ACS712 sensor de corriente.  Ventilador pequeño para extracción de calor.  Disipadores de aluminio de fuente de poder de PC antigua.  LM35 - Sensor de temperatura para controlar el ventilador según se necesite. PIC16F917 Regulador de Voltaje LM2576-05 Modulo ACS712 sensor de corriente. Regulador de voltaje LM7805
  • 3. Regulador de Voltaje LM2576-ADJ. Sensor de Temperatura LM35. MAX232 Maxim Esquemas de Conexión de algunas partes del proyecto: PIC16F917. Esquema según datasheet del regulador de Voltaje Variable LM2576-ADJ. Esquema según datasheet del regulador de Voltaje LM2576-05 voltaje fijo a 5V. RS232 Transistorizado. Librerías y algunas rutinas del código fuente desarrolladas para el proyecto:  Función que lee todos las entradas analógicas y aplica sus respectivos cálculos.
  • 4. /////////////////////////////////////////////////////////////// // adc /////////////////////////////////////////////////////////////// void adc(void) { set_adc_channel(1); //medir tension delay_us(TIEMPO_DELAY); //Temporiza 20uS value=READ_ADC(); // read analog value from channel 1 vol1 = (float) (((value*500)/1024)/10);//Escalar Variable //de 0 a 500 delay_us(TIEMPO_DELAY); //Temporiza 20uS sprintf(voltage1, "%f", vol1); voltage1[5] = '0'; ///////////////////////////////////////////////////////// set_adc_channel(4); //medir corriente delay_us(TIEMPO_DELAY); //Temporiza 20uS value=READ_ADC(); // read analog value from channel 4 AN1 = (float) (value*5.0/1024); //AN1=value*(Vref(+) - //Vref(-)/2^n +Vref(-), //multiplica el numero de //bits por su equivalente //en analogico delay_us(TIEMPO_DELAY); //Temporiza 20uS sprintf(amperaje1, "%f", AN1); amperaje1[5] = '0'; ///////////////////////////////////////////////////////// set_adc_channel(0); delay_us(TIEMPO_DELAY); //Temporiza 20uS value = READ_ADC(); // read analog value from channel 0 vol2 = (float) ((value*500)/1024)/10 ;//Escalar Variable //de 0 a 500 delay_us(TIEMPO_DELAY); //Temporiza 20uS sprintf(voltage2, "%f", vol2); voltage2[5] = '0'; ///////////////////////////////////////////////////////// set_adc_channel(5); //medir corriente delay_us(TIEMPO_DELAY); //Temporiza 20uS value = READ_ADC(); // read analog value from channel 5 AN2 = Filtro_Analog_AN2((float) ((value*5.0)/1024)); delay_us(TIEMPO_DELAY); //Temporiza 20uS sprintf(amperaje2, "%f", AN2); amperaje2[5] = '0'; ///////////////////////////////////////////////////////// set_adc_channel(2); delay_us(TIEMPO_DELAY); //Temporiza 20uS value=READ_ADC(); // read analog value from channel 2 vol3 = (float) ((value*500)/1024)/10 ;//Escalar Variable //de 0 a 500 delay_us(TIEMPO_DELAY); //Temporiza 20uS sprintf(voltage3, "%f", vol3); voltage3[4] = '0'; ///////////////////////////////////////////////////////// set_adc_channel(3); delay_us(TIEMPO_DELAY); //Temporiza 10uS value=READ_ADC(); // read analog value from channel 3 delay_us(TIEMPO_DELAY); temperatura= (float) ((5.00*value*100.00/1024.0)/10); sprintf(temperatura1, "%f", temperatura); temperatura1[5] = '0'; ///////////////////////////////////////////////////////// }
  • 5. Interior de la fuente digital: Vista superior en fase de pruebas donde se uso el LM350, LM317 y un LM7805 para regular el voltaje. Frontal en fase de pruebas. Vista de atrás en fase de pruebas. Vista de transformadores, ventilador para control de temperatura y demás partes que conforman la fuente. Reguladores LM2576 que se usaron para sustituir los anteriores mencionados y ahora estos con disipador de fuente de poder de PC antigua. Módulo interno RS232 y módulos de censar corriente. Modulo USB a Serial. Modulo USB a Serial Finalizado.
  • 6. Frontal en fase definitiva. Imágenes de la Aplicación de PC: Aplicación desactivada y sin conexión serial presente. Aplicación activa pero con las salidas desactivas solo varia la temperatura de la fuente en el momento. Ventana para salvar la imagen JPG de la gráfica de comportamiento de la fuente en el tiempo tanto su voltaje como su corriente. Aplicación con la gráfica de temperatura activa. Aplicación con todas las salidas activas y graficando en el tiempo la salida de 3A. Imágenes de la fuente digital en funcionamiento: Vista Frontal Fuente Digital definitiva con luz de fondo azul y led de estado en cortocircuito de alguna salida. Otra vista frontal.
  • 7. Vista de la fuente entre otros equipos de electrónica. Vista Frontal Fuente Digital definitiva sin luz de fondo y led de estado en cortocircuito de alguna salida. Vista de la fuente en su estado actual en el banco de trabajo. Aplicación de supervición de la fuente donde se visualiza el estado de la salidas. Imágenes de la fuente digital finalizada: Foto Frontal inclinada. Foto de atrás inclinado. Foto de atrás. Foto Frontal.
  • 8. Foto de atrás con modulo de USB a Serial.
  • 9.
  • 10. Conversor RS232 a TTL sin MAX232 Todos sabemos que a la hora de conectar un PIC a la PC utilizar el MAX232 es el paso mas directo y fácil. Sólo cinco capacitores y éste integrado estará funcionando bien. Pero tomando en cuenta que hoy por hoy un MAX232 puede salirnos incluso mas caro que el mismísimo PICmicro decidimos desarrollar una alternativa válida que lo reemplace.
  • 11. El circuito de arriba utiliza la propia corriente del puerto COM de la PC para generar los símbolos del RS232. Los pines marcados como TxD, RxD y Gnd corresponden al conector RS232 de la PC (ver conexionado) mientras que los pines marcados como RD y TD van directamente a microcontrolador. Podemos observar el pinout de los transistores. Este tipo de interface es muy vista en mouses o elementos de control de punteo en PC. Los puntos de alimentación son de 5V (los mismos que del micro). POST#17: Sistema Integrado de equipos de laboratorio controlado por PC en base a micro- controladores PIC Objetivo: La finalidad para realizar este proyecto no es mas que tratar de solventar el problema de los equipos electrónicos de calidad y accesibles para los estudiantes universitarios, los estudiantes técnicos y entusiasta, por ello se enfoco en el desarrollo de un sistema completo en el cual se tenga integrado la mayoría de los equipos de laboratorios de electrónica a nivel universitario. Estos equipos deben tener los requerimientos suficientes para poder realizar todas las practicas a lo largo de la carrera universitaria. Con esto en mente se determino que se conformaría en sistema integrado de equipos los cuales trabajan en una sola interfaz de computadora, donde todas la variaciones de niveles de salidas y entradas, así como las lecturas de estados lógicos, voltajes y corrientes, y estas se puedan configurar de manera digital desde el software de control realizado para el equipo. Con esto se llego a la conclusión de que se compondría de dos fuentes variables digitales de 0v a 20v con precisión de 0.01V y control de corriente de 0A a 2A con precisión de 0.1A, estas fuentes puede trabajar en modo serial, paralelo o independiente, ademas cuenta con una tercera fuente fija a 5V a 5A como máximo en su salida, por otra parte se encuentra el generador de funciones el cual puede generar señales seno, cuadradas y TTL gracias al AD9850, donde es posible variar su amplitud de 1Vpp a 7Vpp, frecuencia de 10hz a 1Mhz y ciclo de trabajo 0% a 100%, también una punta lógica la cual mida tanto circuitos TTL como
  • 12. CMOS y muestre el estado lógico en forma de 7 segmentos en la interfaz o en forma de led iluminados en la interfaz, por ultimo un multímetro con voltímetro AC y DC de 0v a 600v, amperímetro AC y DC por efecto hall con el ACS714 de -5A a 5A dependiendo de como se tome la lectura, lector de ohmios de 1ohm a 10 Mohm y lector de continuidad. El sistema esta conectado por un bus de datos I2C el cual esta aislado por integrados especializados ADuM1250, con esto se asegura que cual quier falla no afecte otro de los equipos y ademas permite el agregar nuevos equipos al bus de datos y con esto complementar aun mas el sistema como podría ser la adición de un osciloscopio o de un frecuencímetro. La alimentación del equipo es con transformares genéricos separados para asegurar el aislamiento y también un remplazo rápido de cualquiera de ellos en caso de fallas ya que son mas comerciales que el embobinar una transformador con un solo primario y el numero de secundarios necesarios para alimentar todos los módulos con sus respectivas potencia adecuada. La placas del sistema estas controladas por PIC Microchip de varios modelos según el módulos y familias, pero todos con la características mínima de que cuente con bus de datos I2C por hardware, para conectarse a la placa de bus de datos aislada y todo esto ser controlado por la placa de control principal que esta basada en el PIC18F2550, por su bus I2C y conexión USB al computador la cual se aisló con el integrado ADuM4160 y el uso de una LCD 20x4 para visualizar el estado general del equipo ya que el mismo no cuenta con ningún pulsador o potencíometro de configuración, todo es realizado de manera digital desde la aplicación de control en la computadora personal. La programación de los microcontroladores, fue realizada en CCS con el uso de interrupciones en todos los casos necesarios y periféricos de hardware, ningún control ya sea del bus o de integrados fue realizado por software para no tener retrasos generados al emular algún protocolo o tarea. El software de control se realizo en Visual Studio 2013 en lenguaje C# con librerías capaces de trabajar con el puerto USB del PIC18F2550 en las versiones mas actuales de windows, tanto en x86 como en x64, así como también se usaron librerías para los 7 segmentos en la interfaz y los led animados. Materialesprincipales utilizados:
  • 13. Modulo DDS AD9850 encargado de generar las distinta señales de salida del generador de funciones, este modulo puede ser controlado de forma serial o de forma paralela según sea el diseño. PIC 18F2550 de Microchip el cual cuenta con 28 pines de distintos usos pero como periféricos importantes cuenta con pines dedicados porhardware para la comunicación USB y comunicación por bus I2C. ACS714 Pololu modulo sensor de corriente bidireccional por efecto hall de salida lineal a la corriente en sus terminales puede sensar desde -5Aa 5A y su salida es una variación de voltaje donde por cada paso se aumenta o disminuye en 180mV/A segun sea el caso teniendo como 0Ael voltaje de salida fijo de 2.5V PIC 16F1503 de Microchip usado para la mayoría de los módulos ya que el mismo cuenta con un numero de pines suficiente pero como periféricos importante tiene bus I2C por hardware, asícomo varias salidas del tipo PWMpor hardware, necesarias para los módulos y su correcto control. Transformador con tap central 12v-0-12v 4 Amp para salidas de potencias de las distintas fuentes. ADuM1250 inteagrado de Analog Devices que se encarga de aislar el bus de datos I2C con una tecnología de aislamientomagnetico
  • 14. y soportando sobrecargas dehasta 2500V rms para proteger el circuito que aísla. Transformador con tap central 12v-0-12v 0.5 Amp para alimentar cada uno de los módulos en su parte lógica PIC 18F4610 de Microchip usado para el multímetro ya que cuenta como gran cantidad depines los cuales fueron usados para las distintas funciones del mismo , así como también porsubus I2Cpor hardware. Disipador de aluminio para las distintas fuentes de poder LM35 en encapsulado TO92 para colocarlo cerca físicamente del disipador de las fuentes y conesto controlar el encendido y apagado del ventilador según sea el caso de una temperatura alta o baja. Ventilador para forzar la ventilación en las fuentes de poder en caso de ser necesario por uso prolongando delas mismas con una carga grande en su salida. LM2576 en encapsulado TO220 de 5 pines, regulador altamente eficiente que solo necesita de 4 componentes externos para entregar hasta unos 3 Amp con unos 5V si desperdiciar casi energía en calor al ser
  • 15. el mismo step-down y tener una eficiencia muy alta. Puerto USB tipo B usado para la conexión del cable USB del sistema con el PC MCP41010 integrado de Microchipm que hace la función depotenciometro de control para el contraste de la LCD del sistema LCD 20X4 luz de fondo azul para los distintos mensajes de estado y control del sistema. Placas y partes del proyecto: Placa dedicada al BUS de datos i2c aislado con tecnología de transformadores deanalog , la cual cuenta con fuente de alimentación propia, que usa para energizar los integrados ADuM140x y el bus de datos completo. Placa fuente de poder digital regulable de 0v a 20v, con salida ajustable de corriente de 0Aa 2A, esta placa cuenta con alimentaciónpropia para potencia y lógica. La lógica es basada en el micro-controlador PIC 16F1503 de Microchip y la potencia en el regulador LM338con control mediante amplificador operacional y señales PWM.
  • 16. Punta lógica realizada a partir de un probador de electricista para 110v, el cual fue modificadopara ser usadoen elsistema. Básicamente se le agrego un par de cables polarizado para energizarla del circuito en estudio, así como también cuenta con un cable de varios hilos para la conexión con el sistema Placa principal de control micro-controlada con el PIC 18f2550de microchip, la cual esta constituida por conector USB tipo B, fuente conmutada 5v, LCD 20x4conectado deforma serialconregistrode desplazamiento,poten- cimetro digital para controldel contraste de la LCD, conector para el BUS I2C,etc. Placa selectora delos modos desalida de las fuentes depodervariable donde se encarga de colocar las salidas delas fuentes en modo seria, paralelo o independiente, así como tambiénseencarga demostrar mediante un LED en el frontal cual esta activa de ellas y si alguna esta en protección por cortocircuito Placa multímetro la cual cuenta con, estas herramientas: amperímetro basado en elchip ACS712 para corriente tanto AC como DC, ohmímetro coneluso deun arregloformado por resistencia y lectura del ADC del PIC, el voltímetro AC y DC con el uso de puente rectificador y divisor resistivo de precisión, punta lógica para circuitos CMOS y TTL, finalmentela placa cuenta con LEDde estado del modo en uso, así como también con un buzzer para señales auditivas y una fuente conmutada LM2576 con un PIC 18F4610.
  • 17. LCD 20x4 del sistema con faja plana. Vista delconjuntode placas queconforma el sistema completo. Placa encargada de la generaciónde señales eléctrica de tipo seno y TTL, la misma esta basada en elchip AD9850 el cual de manera seriales controlado porel PIC 16F1503, para así configurar elmodo de salida: frecuencia y dutty. Ycon la ayuda deun juego de OPAM y potencimetros digital MCP41010 se logra modifica el offset y la amplitud de las señales de salida generadas. Placa fuente de poder digital regulable de 0v a 20v, con salida ajustable de corriente de 0Aa 2A, esta placa cuenta con alimentaciónpropia para potencia y lógica. La lógica es basada en el micro-controlador PIC 16F1503 de Microchip y la potencia en el regulador LM338con control mediante amplificador operacional y señales PWM. Placa fuente de poder digital de salida de voltaje fija a 5V, con salida fija de corriente maxima de 2A, esta placa cuenta con alimentación propia para potencia y lógica. La lógica es basada en el micro-controlador PIC 16F1503 de Microchip y la potencia en el regulador LM338 con control mediante amplificador operacional y señales PWM.
  • 18. PCB en 3D del proyecto: PCB para conexión de la entrada de 110V de los transformadores de entrada de cada una de las placas del sistema. PCB de la placa principal de control. PCB de la placa de multímetro y punta lógica. PCB de la placa para selección del modo de salida de las fuentes variables. PCB de la placa del bus de datos i2c aislado. PCB de la placa de generador de funciones. PCB de la placa para la fuente digital variable. PCB de la placa para la fuente digital fija. Imágenes del software del sistema:
  • 19. Ventana de información del sistema. Ventana de ayuda del sistema. Ventana para la configuración del sistema como la luz de fondo y el contraste de la LCD. Vista del menú de ayuda en la ventana principal del sistema. Ventana flotante del sistema cuando es activado el modo de salida en serie de las fuentes variables digitales Ventana flotante del sistema cuando es activado elmodo desalida en paralelo de las fuentes variables digitales Ventana donde se observa la pestaña de multímetro y punta lógica en uso. En la cual se tiene a la izquierda el multímetro con cada una de sus funciones como son: ohmímetro, voltímetro AC, voltímetro DC, medidor de continuidad y amperímetro AC y DC. Por otra parte a la derecha se tiene la punta lógica sus modos dedetección de la tecnología a estudiar, así como también se tiene de un 7 segmentos y 3 señales visuales para apreciar el estado lógico presentes en la punta de medición al momento derealizar las pruebas en la placa en estudio. Ventana donde se tiene la pestaña para las fuentes que conforman el sistema a la izquierda las dos fuente variables con sus opciones de configuración de salida como el voltaje o la corriente de cada una de las fuentes, así como también cuenta con visores del estado de la fuente, voltaje, corriente, temperatura y ventilación. Ala derecha se tiene la fuente fija con los mismos visores pero sin opción de configuración, las 3 fuentes cuentan con un botón de activación. finalmente abajo a la derecha seobserva los tipos de configuración de salida para las fuentes variables como son salida en serie, paralelo o independiente.
  • 20. Ventana donde se tiene la pestaña para el generador de funciones del sistema en la cual se aprecia los 7 segmentos para la visualizar la frecuencia de salida, en la zona izquierda baja esta para introducir el valor deseado de frecuencia, así como un botón para su variación paso a paso, en la zona derecha baja esta la configuración para el tipo de salida a ser generada ya sea seno o TTL, así como también para variar su amplitud o ciclo respectivamente. Vista del menú en la ventana principal del sistema. Vista de la ventana principal del sistema. Ventana flotantedelsistema al momento de decidir cerrar el mismo. Imágenes del prototipo funcional del sistema finalizado: Vista frontaldel sistema en pruebas de sus salidas, entradas y aplicacion Vista frontal del sistema donde se tiene el mismo con la conexión USB a la PC
  • 21. LCD del sistema mostrando estado de la aplicación así como del USB y los modulos activos Vista Frontal del sistema integrado Vista desde arriba parte superior izquierda en la cual se tiene la placa principal de control, la placa de bus de datos aislado y se observa la parte de los transformadores del sistema. Vista desde arriba parte superior derecha donde se ve la fuentes pero se aprecia mejor los transformadores de potencia del sistema. Vista desde arriba parte inferior izquierda donde se tiene la LCD con su faja de datos el multímetro digital y el generador de funciones. Vista desde arriba parte inferior derecha se observa la fuente variables y la fija así como su placa de control de tipo de salida de las fuentes variables. Frontal Izquierdo donde se tiene la LCD del sistema conlas entradas delmultímetro con Frontal Derecho donde se aprecia el botón de encendido con los conectores de las
  • 22. punta lógica y la salidas del generador de funciones tipo BNC. fuentes variables y fija a su lado Cableado parte trasera USB, alimentación y fusible de proteccion. Vista trasera completa Caja a medida para poder transporta el prototipo con mayor facilidad y que se proteja al ser almacenado para guardarlo. Vista frontal con punta lógica del sistema integrado Foto del sistema terminado dentro de su caja acrílica donde ya ajustado y calibrado todas sus salidas, así como también sus módulos de sensores de las distintas magnitudes físicas, acá se aprecia como se organizo las salidas y el cableado del mismo. Vídeos del prototipo funcional del sistema finalizado:
  • 23. POST#6: Sensor de gas y temperatura portátil de bajo costo con LCD 16x2 controlador por PIC16F88 y batería recargable. Objetivo: Al cursar las distintas materias de la universidad me tope con proyectos electrónicos que fueron asignados como prueba de los conocimientos adquiridos en el tiempo de estudio, en este caso les traigo uno de los proyectos el cual tenia la premisa de ser una versión de un producto funcional, con acabado para la venta y que solventara alguna problemática existente en nuestro entorno. Así que me encamine en el diseño y construcción de un Sensor de Gas y Temperatura portable, que sea recargable con facilidad y que el mismo sea controlado mediante el uso de un microcontrolador PIC ejecutando algoritmos en lenguaje C de control, en cuanto a la etapa de potencia de la entrada de alimentación se basa en el regulador de voltaje LM7805 de voltaje fijo a 5V, con un LM317 en modo regulador de corriente permitiendo solo el paso suficiente de la misma para cargar la batería a un 10% de su capacidad de corriente y al mismo tiempo de un punto anterior al LM317 se toma la alimentación para el dispositivo sin ninguna restricción de corriente. Con esto obtenemos una carga segura que no destruye la integridad de la batería y alarga su vida útil. Cuando se encuentra conectado al cargador se enciende el LED de carga amarillo ademas de que el dispositivo en modo carga puede ser usado sin problemas mientras se muestra en todo momento en pantalla el estado de la carga al estar encendido. El sensor MQ4 al iniciar la lectura de gas necesita de un pre-calentamiento del mismo, esto para que los componentes internos se calienten y ocurra un proceso químico que detecte el gas en el lugar. El dispositivo muestra en pantalla en todo momento el estado del gas y la temperatura en el lugar, como así también la cantidad de carga de la batería. La carga de la batería en un estado de completa descarga, necesita de al menos de 11 horas seguidas de alimentación del toma corrientes de 110V con un transformador de 110v a 12v AC, o cuando esta la batería a media carga simplemente con observar el estado de la carga en la pantalla. Todo esto sin tener la preocupación de estropearla por sobre carga ya que como es una carga lenta de solo el 10% de la corriente de la batería esta no sufre luego de estar completamente recargada simplemente pasaría a un estado de carga flotante.
  • 24. Al terminar el proyecto propuesto se cumplió con todas las exigencias del curso logrando la máxima puntuación para el mismo. Materialesprincipales utilizados:  1 x PIC16F88. (Muestra gratis obtenida gracias a Microchip)  2 x Pulsadores - Para control manual desde el frontal.  1 x Baquelita para el montaje.  1 x Sensor MQ4 - Sensor de gas natural.  1 x LCD 16x2 - Para visualización del menú, estado del dispositivo y configuraciones.  1 x LM7805 regulador de voltaje para la lógica de control.  1 x LM317 regulador de corriente para la carga de la batería.  Switch pequeño simple color negro.  Caja para prototipos de calidad tamaño mediano plástica color negro.  4 x Patas de goma.  LM35 - Sensor de temperatura para controlar el ventilador según se necesite.  1 x Batería Recargable 8.4v ni-mh 200 mAh. Microcontrolador PIC16F88. MQ4 Sensor de Gas LM7805 Regulador de voltaje LM317 Regulador
  • 25. LM35 Sensor de temperatura. QC1602A LCD 16x2. 74HC164 Esquemas de Conexión de algunas partes del proyecto: LM317 según datasheet. PIC16F88 según datasheet. MQ4 según datasheet. LM35 según datasheet.
  • 26. LCD 3 pines. 74HC164 según datasheet. Esquema Completo Diagrama de proyecto: PCB de LCD con 3 pines. PCB de Lógica de control. PCB de pulsadores de control. PCB de Sensores de gas y temperatura.
  • 27. PCB completo. Librerías y algunas rutinas del código fuente desarrolladas para el proyecto:  LCD con sólo 3 pines. WEB de ejemplo.  MQ4 sensor de gas ejemplo. WEB de ejemplo 1. WEB de ejemplo 2.  Lectura del Sensor MQ4 usando una entrada analógica del PIC. /////////////////////////////////////////////////////////////// // adc /////////////////////////////////////////////////////////////// void adc(void) { ADC_1_LM35 = 0; ADC_2_MQ4 = 0; ADC_3_SUPPLY = 0; ADC_4_BATT = 0; set_adc_channel(1); //BATT CANAL 1 (LM35) delay_us(TIEMPO_DELAY); value = read_adc(); //lee el valor del ADC y lo guarda en //el registro adc delay_us(TIEMPO_DELAY); ADC_1_LM35 = Filtro_Analog_LM35((float) (value*(0.48875))); //--------------------------------------------------------- value = 0; set_adc_channel(2); //BATT CANAL 2 (Bateria) delay_us(TIEMPO_DELAY); value = read_adc(); //lee el valor del ADC y lo guarda en //el registro adc delay_us(TIEMPO_DELAY); ADC_4_BATT = Filtro_Analog_BATT((float)(value*0.048828125)); //---------------------------------------------------------- value = 0; set_adc_channel(3); //BATT CANAL 3 (SUPPLY) delay_us(TIEMPO_DELAY); value = read_adc(); //lee el valor del ADC y lo guarda en //el registro adc delay_us(TIEMPO_DELAY); if((float)(value*0.048828125) > 9) ADC_3_SUPPLY = (float)(value*0.048828125); else ADC_3_SUPPLY = 0; //--------------------------------------------------------- value = 0; set_adc_channel(4); //BATT CANAL 4 (Sensor de Gas) delay_us(TIEMPO_DELAY); value = read_adc(); //lee el valor del ADC y lo guarda en
  • 28. //el registro adc delay_us(TIEMPO_DELAY); ADC_2_MQ4 = Filtro_Analog_MQ4((float)(value)); //--------------------------------------------------------- } Imágenes del sensor de gas en fase de construcción: PCB perforada - Parte lógica. PCB perforada - LCD 3 pines. Sensor de temperatura y gas parte de atrás. Modulo de pulsadores y LED. PCB conectadas. Sensor de temperatura y gas de frontal.
  • 29. Sensor de temperatura y gas parte de atrás de serca. Sensor de temperatura y gas de lado. Sensor de temperatura y gas con cajón exterior prototipo. Sensor de temperatura y gas dentro cajón exterior prototipo. Caja de prototipo marcada lista para los cortes con la herramienta dremel. Caja de prototipo ya trabajada y pulido los bordes. Vista de la caja de prototipo frontal. Vista de la caja de prototipo frontal y las demás partes del proyecto. Colocando separadores para la caída del LCD 16x2. LCD 16X2 ajustado en la caja de prototipos.
  • 30. Vista de frente con LCD. Colocando modulo de pulsadores y LED con sus respectivos separadores metálicos. Vista de frente con LCD y modulo de pulsadores y LED. Extensión de modulo sensor de gas y temperatura con alambre de cobre interno para brindar rigidez al momento de direccionarlo al punto a medir. Vista de atrás con LCD , modulo de pulsadores y parte lógica como también el control de LCD con 3 pies. Ajustando los cables en el interior. Ajustando los cables en el interior con la batería a un costado con sierre mágico. LED de carga, Entrada plug de voltaje de carga y orificio de salida del modulo de sensor de gas y temperatura. Interruptor de apagado del dispositivo. Cerrando con todas las partes acomodadas.
  • 31. Equipo sin el frontal a un lado. Etiqueta que disimula defectos y proporciona indicaciones de cada parte del frontal. Dispositivo terminado sin frontal. Imágenes del sensor de gas finalizado: Foto frontal del equipo con etiqueta. Foto sensor de gas y temperatura.
  • 32. LCD con sólo 3 pines 30 noviembre, 2009 Esta útil librería permite gestionar un LCD 2×16 compatible HD44780 con sólo 3 pines de tu micro, utilizando un registro de desplazamiento. Es una modificación a la conocida Flex_LCD realizada por los amigos Akenafab y Duende_Azul. Los pines utilizados son: LCD_E: señal de control Enable del LCD LCD_CK: señal de reloj del registro de desplazamiento LCD_DAT: salida del bit menos signficativo hacia el registro de desplazamiento
  • 33. // flex_lcd_3_pins.c //Modificación de Flex_lcd por Duende_Azul y Akenafab //Trabaja con 3 pines y 74VHC164 //8-Bit Serial-In, Parallel-Out Shift Register //La LCD se usa en modo 4bits //Revisar diagrama de conexion Adjunto //Se ha utilizado a una velocidad de @40MHz sin ningun problema //No esta habilitada la lectura del LCD //RW debe ir a gnd //Definir pines antes de llamar libreria// //#define LCD_E PIN_A0 //#define LCD_CK PIN_A1 //#define LCD_DAT PIN_A2 //======================================== int RS_bit; #define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines #define lcd_line_two 0x40 // LCD RAM address for the 2nd line int8 const LCD_INIT_STRING[4] = { 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots 0xc, // Display on 1, // Clear display
  • 34. 6 // Increment cursor }; //------------------------------------- void lcd_send_nibble(int8 nibble, int rs_bit) { int x; if(RS_bit==1) nibble=nibble|0x10; for(x=0;x<5;x++) { output_bit(LCD_DAT,shift_right(&nibble,1,0)); delay_cycles(1); output_low(LCD_CK); delay_us(1); output_high(LCD_CK);} output_high(LCD_E); delay_us(2); output_low(LCD_E); } //----------------------------------- //----------------------------------- // Send a byte to the LCD. void lcd_send_byte(int8 address, int8 n) { //output_low(LCD_RS); RS_bit=0; delay_us(100); if(address) //output_high(LCD_RS); RS_bit=1; else //output_low(LCD_RS); RS_bit=0; delay_cycles(1); output_low(LCD_E); lcd_send_nibble(n >> 4,RS_bit); lcd_send_nibble(n & 0xf,RS_bit); } //---------------------------- void lcd_init(void) { int8 i; //output_low(LCD_RS); RS_bit=0; output_low(LCD_E); delay_ms(20); for(i=0 ;i < 3; i++) { lcd_send_nibble(0x03,RS_bit); delay_ms(5); } lcd_send_nibble(0x02,RS_bit); for(i=0; i < sizeof(LCD_INIT_STRING); i++) { lcd_send_byte(0, LCD_INIT_STRING[i]); delay_ms(5); } }
  • 35. //---------------------------- void lcd_gotoxy(int8 x, int8 y) { int8 address; if(y != 1) address = lcd_line_two; else address=0; address += x-1; lcd_send_byte(0, 0x80 | address); } //----------------------------- void lcd_putc(char c) { switch(c) { case 'f': //limpia pantalla lcd_send_byte(0,1); delay_ms(8); break; case 'n': //cambio de linea lcd_gotoxy(1,2); break; case 'b': //retrocede 1 caracter lcd_send_byte(0,0x10); break; default: lcd_send_byte(1,c); break; } } //------------------------------ void lcd_setcursor_vb(short visible, short blink) { lcd_send_byte(0, 0xC|(visible<<1)|blink); } #include <16F88.h> #FUSES INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,NOFCM EN,NOIESO #use delay(Internal=8M) //------------ Pines del LCD ---------------------// #define LCD_E PIN_A0 #define LCD_CK PIN_A1 #define LCD_DAT PIN_A2 //--------------------------------------------------// #include "flex_lcd_3pins.c" // Cargamos libreria del lcd void main() {
  • 36. delay_ms(100); output_a(0); output_b(0); lcd_init(); // inicializamos el LCD lcd_setcursor_vb(1,1); //cursor visible,papadeo while(1){ printf(lcd_putc,"f-LCD 3 pin Mode-n* !.|.|..|.|.! *"); delay_ms(1000); printf(lcd_putc,"f* Duende_Azul *n * Akenafab *"); delay_ms(1000); } //end while } //end main Analog Gas Sensor(MQ4) (SKU:SEN0129) Contents [hide]  1 Introduction o 1.1 Specification  2 Pin Definition  3 Potentiometer o 3.1 Connection Diagram o 3.2 Sample Code Introduction The MQ4 is used in gas leakage detecting equipment in consumer and industry markets,this sensor is suitable for detecting CH4,Natural gas, LNG, avoid exposure to alcohol, cooking fumes, and cigarette smoke. The sensitivity can be adjusted by the potentiometer. Specification
  • 37.  Power supply needs: 5V  Interface type: Analog  Pin Definition: 1-Output 2-GND 3-VCC  High sensitivity to CH4£¬Natural gas  Small sensitivity to alcohol, smoke  Fast response  Stable and long life  Simple drive circuit  Size: 40x20mm Pin Definition 1. Signal Output 2. GND 3. Power Analog Sensor Pin Definition Potentiometer Potentiometer is used to calibrate the readings from this sensor as stated on the datasheet: SENSITVITY ADJUSTMENT Resistance value of MQ-4 is difference to various kinds and various concentration gases. So,When using this components, sensitivity adjustment is very necessary. we recommend that you calibrate
  • 38. the detector for 5000ppm of CH4 concentration in air and use value of Load resistance ( RL) about 20KΩ(10KΩ to 47KΩ). When accurately measuring, the proper alarm point for the gas detector should be determined after considering the temperature and humidity influence. Connection Diagram Analog sensor connection diagram
  • 39. Sample Code ? 1 2 3 4 5 6 7 8 9 10 11 12 ///Arduino Sample Code void setup() { Serial.begin(9600); //Set serial baud rate to 9600 bps } void loop() { int val; val=analogRead(0);Read Gas value from analog 0 Serial.println(val,DEC);//Print the value to serial port delay(100); } This example is for Wiring version 1.0 build 0100+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know. Air Quality MQ135 sensor by BARRAGAN http://barraganstudio.com Reads values from an air quality sensor connected to the analog input pin 0. The value read from the sensor is proportional to the air quality measured by the sensor. The value read is printed to the serial monitor
  • 40. int sensorValue; void setup() { Serial.begin(9600); // sets the serial port to 9600 } void loop() { sensorValue = analogRead(0); // read analog input pin 0 Serial.println(sensorValue, DEC); // prints the value read delay(100); // wait 100ms for next reading }
  • 41.
  • 42. POST#5: Convertidor USB a Serial, que trabaja con los integrados PL2303 Prolific y el conocido MAX232 de Maxim. Objetivo: Diseño y construcción de un convertido USB a Serial para así facilitar la conexión de los proyectos que se diseñaron con el antiguo conector DB9 que trabaja sobre la conexión serial que cada día es mas difícil de conseguir en las PC y laptop actuales imposibilitando el uso de
  • 43. estos proyectos en los nuevos sistemas de computación, este modulo se pensó para que sea fácil de armar y con componentes no muy difíciles de conseguir en las tiendas online y ademas que trabaje en la mayoría de sistemas operativos existentes, usando un mínimo de configuración por el usuario al ser plug and play con muy buen soporte para driver. El modulo se construye con una poca cantidad de componentes de los cuales los mas importantes es el PL2303 que convierte de USB a Serial pero a niveles TTL de voltaje y luego se adapta el voltaje con el conocido MAX232 para poder llegar a los valores de voltaje normales de las comunicaciones serial de las PC. Nota: Windows 8 no soporta las versiones del chip HXA/XA (aparece un código de error en controlador). Materialesprincipales utilizados:  1 x PL2303 Prolific.  1 x MAX232 - (Muestra gratis obtenida gracias a Maxim).  1 x Baquelita para el montaje.  4 x Patas de goma.  1 x Lamina de acrílico transparente para la base y tapa superior.  1 x Conector DB9 (RS232)  1 x Conector USB tipo B. PL2303 de Prolific. Conector USB tipo B utilizado. MAX232 de Maxim Esquemas de Conexión de algunas partes del proyecto:
  • 44. PL2303 esquema según datasheet. MAX232 esquema según datasheet. USB tipo B Esquema PCB: PCB en negro PCB en color Interior del convertidor: Vista superior. PCB adaptador SMD a DIP.
  • 45. Vista inferior con soporte metalico. Imágenes del convertidor finalizado: Vista final superior. Ejemplo de uso del modulo. MAX232 product image MAX232 DUAL ELA-232 DRIVERS/RECEIVERS
  • 46. The physical communication standard defines the signal voltage of -10V for logic '1', and +10V for logic '0'. However in practise, the voltage can be ranging from +/-3V to +/-25V. Not to worry if the measured voltage is not +/-10V. Typical receiver is able detect the incoming signal with voltage as low as +/-3V. A microcontroller like PIC16F877a uses USART (5V system). The PC (personal computer) that we have in the office/home uses the standard RS232. To enable a microcontroller to communicate with the computer, a RS232 to TTL converter is required.
  • 47. IC chip maker has come up with the integrated circuit for interfacing RS232 with TTL logic (5V for logic 1, 0V for logic 0), making the interfacing work very simple. MAX232 is one of the many IC in the market which helps to convert between RS232 -/+10V and TTL +/- 5V. It is a simple voltage level converter in short. The charge pump design allows the circuit to generate +/-10V from a 5V supply, with the help from the four capacitor. With charge pump to double up the supply voltage for RS232 transmitter, there is no need to design a power supply for +/-10V. The diagram on the left shows the schematic of the MAX232 IC circuit. It consist of only 4x 1uF
  • 48. 16V electrolytic capacitor, and the MAX232 IC itself. It is that simple. I have include a layout which I always use for PC to PIC16F877a microcontroller, RS232 interface. http://www.dfrobot.com/ http://jartur2013.blogspot.com/2013/12/post11-controlador-de-servo-con-dspic-y.html POST#11: Controlador de 20 Servomotores con DSPIC y estabilidad con el modulo GY-80 Objetivo: Con el fin de realizar futuros proyectos de robótica donde se tengan muchas articulaciones con lo cual se deba tener estabilidad y movimientos precisos, me di a la tarea de diseñar y
  • 49. construir un prototipo de placa controladora de servomotores, con visualización LCD, conectividad Xbee o mediante Bluetooth Bee y que cuente con variedad de sensores, como los que proporciona el modulo GY-80. Todo esto para facilitar los desarrollos venideros y con esto solo enfocarme principalmente en la parte mecánica y la programación de los movimiento, con sus respectivos sistemas de control. Materialesprincipales utilizados:  1 x dsPIC30F4013. (Muestra gratis obtenida gracias a Microchip).  1 x LM2576T-5.0P+ (Step-Down Regulador de Voltaje 5v).  1 x LM1117T regulador 3.3v.(Muestra gratis obtenida gracias a ST).  1 x Xbee Serie 2 o Bluetooth bee  1x Memoria EEPROM 24LC128  2 x Pulsadores  1 x Espadines para placa de sensores con conexión I2C.  GY-80 (L3G4200D + ADXL345 + HMC5883L + BMP085).  Giroscopio de 3 ejes.  Aceleremotro de 3 ejes.  Sensor de campo magenetico de 3 ejes.  Sensor de presión y temperatura.  LCD 2x16 con placa de conexión vía I2C. Placa con todos los sensores incluidos con conexión por medio de bus I2C. Modulo de sensores GY-80 PCB del proyecto con varias vistas 2D y 3D: Vista del PCB generada con Eagle3D con serigrafia y casi todos los componentes. Vista del PCB parte inferior en angulo con Google SketchUp 8
  • 50. Vista del PCB parte superior en angulo con Google SketchUp 8. Vista del PCB parte inferior con Google SketchUp 8 con serigrafia. Vista del PCB parte superior con Google SketchUp 8 con serigrafia. Vista del PCB que se uso para ser transferido a la placa. Vista del PCB en el modo Tarjeta en Eagle. Diagrama de proyecto: Circuito esquemático en Eagle. Imágenes en fase de construcción y finalizado: Acá se logra observa la placa en sus fases de construcción, donde se tiene
  • 51. un prototipo final para las pruebas de los distintos servomotores, ya sea solos o conectados varios de ellos a la vez, logrando controlar su posición sin problemas mediante conexión encalabrina Xbee con la computadora personal, mediante comandos por el protocolo serial RS232. Por este mismo canal se logra obtener y leer en tiempo real los valores de posición de los distintos sensores en el modulo GY-80, con los cuales más adelante se trabajara en conjunto con los servomotores para proyectos de robótica. Placa lista para la soldadura vista desde arriba. Placa ya perforada con el tóner retirado lista para la soldadura vista desde abajo. Placa finalizada en pruebas conectada al programador PICkit 2 clone por medio del cable de ICSP. Placa finalizada, otras imágenes con la placa de sensores a un lado. Controlador con 5 modelos de servomotor distintos de marcas variadas usados en la pruebas. Bibliografía, Web y Datasheet:  Web:
  • 52.  http://picmania.garcia-cuervo.net/picc_servos_x_8.htm  http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic- 16f876a_13.html  http://blog.oscarliang.net/use-gy80-arduino-adxl345-accelerometer/ http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic-16f876a_13.html Control de 8 servos con PIC
  • 53. Este proyecto consiste en el control de 8 servos por el puerto c del pic . En la interacción para el control de los servos se emplea un teclado numérico y un lcd, ambos controlados por el puero b del PIC. En su funcionamiento, el pic pide introducir el número del servo a controlar. Posteriormente solicita el ángulo de orientación deseado para ese servo ( de 0º a 180º). El valor se acepta con la tecla “*” y el programa vuelve a mostrar un mensaje de presentación para un nuevo control. Si el ángulo introducido es superior a 180º, el pic toma por defecto 180º. Para la generación de las señales moduladas de control de los servos (bit_pwmx), se emplea la subrutina de interrupción por rebose del timer 0. La orientación de cada servo se establece con el valor que se carga en la variable pwmx, donde x es el número de servo correspondiente. Con cada llamada a la subrutina de generación de la señal por mediación de la interrupción del timer 0, se incrementa la variable control_pwm que comparandose con el valor en pwmx, decide si debe o no cortar alguno de los pulsos de modulación de los servos. control_pwm++; if (control_pwm==0) bit_pwm0=1; if (control_pwm==pwm0) bit_pwm0=0;
  • 54. Cuando la variable control_pwm, incrementandose en cada rebose del timer0, llega a su máximo valor y pasa a ser 0, todas las señales moduladas comienzan un nuevo ciclo. Para interpretar los valores numéricos de varias cifras a partir de números simples introducidos por teclado, primero espera a que se pulse una tecla x=kbd_getc(); el valor obtenido está en codificación ASCII por lo que habrá que pasarlo a su valor numérico decimal tecla=x-48; si se ha pulsado una tecla se descartan las pulsaciones en # y * puesto que solo se necesitan números if (x!=0&&x!='*'&&x!='#'){ y conforme se van pulsando números el último pulsado será las unidades y los anteriores van pasando a decenas y centenas centenas=decenas; decenas=unidades; unidades=tecla;
  • 55. conforme se van introduciendo números simples se va mostrando el número completo por pantalla lcd printf(lcd_putc,"f Angulo = %ld%d%dn", centenas, decenas, unidades); y finalmente se guarda en una única variable el número completo resultante de todos los números simples angulo=(centenas*100)+(decenas*10)+unidades; [+/-] Ver / Ocultar programa completo en C En la simulación bajo proteus se comprueba el cambio en el tiempo de las señales de control de los servos individualmente en función del valor del ángulo introducido. ////////////////////////////////////////////////////////////////////// ////////// // // // CONTROL DE 8 SERVOS CON PIC // // // // (c) RobotyPic // // // ////////////////////////////////////////////////////////////////////// ////////// #include <16f876a.h> //archivo para control del pic 16f876a #fuses XT,NOWDT,NOPROTECT,NOLVP //protecciones #use delay(clock=4000000) //frecuencia de reloj 4 MHz #byte trisb=0x86 #byte portb=0x06
  • 56. #byte trisc=0x87 #byte portc=0x07 #define use_portb_lcd TRUE //Configuración puerto b control lcd #define use_portb_kbd TRUE //Configuración puerto b control teclado #include <lcd.c> //archivo para control del lcd #include <kbd.c> //archivo para control del teclado #bit Bit_PWM0 = PORTC.0 //Bit 0 puerto C Salida modulación 0 #bit Bit_PWM1 = PORTC.1 //Bit 1 puerto C Salida modulación 1 #bit Bit_PWM2 = PORTC.2 //Bit 2 puerto C Salida modulación 2 #bit Bit_PWM3 = PORTC.3 //Bit 3 puerto C Salida modulación 3 #bit Bit_PWM4 = PORTC.4 //Bit 4 puerto C Salida modulación 4 #bit Bit_PWM5 = PORTC.5 //Bit 5 puerto C Salida modulación 5 #bit Bit_PWM6 = PORTC.6 //Bit 6 puerto C Salida modulación 6 #bit Bit_PWM7 = PORTC.7 //Bit 7 puerto C Salida modulación 7 /********************** Prototipos de las funciones ***************************/ void main (void); //función principal void generacion_pwm (void); //genera señales moduladas para control de servos void presentacion (void); //mensaje de presentación /********************** Variables para generación PWM *************************/ int8 PWM0=0,PWM1=0,PWM2=0,PWM3=0,PWM4=0,PWM5=0,PWM6=0,PWM7=0; //Valores de las señales PWM int8 control_PWM=0; /********************************************************************* *********/ /******************* FUNCIÓN GENERACIÓN MODULACIONES PWM **********************/ #int_Timer0 void generacion_pwm(){
  • 57. control_PWM++; //Incremento cada rebose del timer0 if (control_PWM==0){ //inicio del ciclo con todos los pulsos pwm a 1 Bit_PWM0=1; Bit_PWM1=1; Bit_PWM2=1; Bit_PWM3=1; Bit_PWM4=1; Bit_PWM5=1; Bit_PWM6=1; Bit_PWM7=1; } //Finalizará el pulso de modulación según el valor del correspondiente pwm if (control_PWM==PWM0) Bit_PWM0=0; if (control_PWM==PWM1) Bit_PWM1=0; if (control_PWM==PWM2) Bit_PWM2=0; if (control_PWM==PWM3) Bit_PWM3=0; if (control_PWM==PWM4) Bit_PWM4=0; if (control_PWM==PWM5) Bit_PWM5=0; if (control_PWM==PWM6) Bit_PWM6=0; if (control_PWM==PWM7) Bit_PWM7=0; set_timer0(255); //Carga del contador } /********************************************************************* *********/ /************************* PRESENTACIÓN LCD ***********************************/ void presentacion (){ lcd_putc("f Introduce n"); lcd_putc(" num. de servo "); } /********************************************************************* *********/ /******************** FUNCIÓN PRINCIPAL ***************************************/ void main(){ int x; //Valor ASCII de la tecla pulsada int tecla; //Valor numérico de la tecla pulsada int servo; //Número de servo int16 angulo; //Ángulo del servo int16 centenas; //variable para las centenas del ángulo int decenas,unidades; //Variable para las decenas y
  • 58. unidades del ángulo int pwm; //valor de la modulación por teclado trisc=0x00; //Puerto C como salida de datos pwm0=7; //Impulso de 0,8 msg de pwm0 posición 0º pwm1=7; //Impulso de 0,8 msg de pwm1 posición 0º pwm2=7; //Impulso de 0,8 msg de pwm2 posición 0º pwm3=7; //Impulso de 0,8 msg de pwm3 posición 0º pwm4=7; //Impulso de 0,8 msg de pwm4 posición 0º pwm5=7; //Impulso de 0,8 msg de pwm5 posición 0º pwm6=7; //Impulso de 0,8 msg de pwm6 posición 0º pwm7=7; //Impulso de 0,8 msg de pwm7 posición 0º setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //Configuración interrupción generación PWM enable_interrupts(INT_TIMER0); //Habilitación interrupción generación pwm enable_interrupts(GLOBAL); //Habilitación de las interrupciones port_b_pullups(TRUE); //Habilitación resistencias pullups puerto b lcd_init(); //Inicialización del lcd kbd_init(); //Inicialización del teclado presentacion (); //Muestra mensaje de inicio en lcd while (true){ x=kbd_getc(); //En "x" valor ASCII de la tecla pulsada if (x!=0&&x!='9'&&x!='8'&&x!='*'&&x!='#'){ //Si se pulsa tecla numérica 0 a 7 ... servo=x-48; //Valor ASCII se pasa a valor numerico de servo printf(lcd_putc,"fServo = %dn", servo); //...muestra el valor pulsado lcd_putc("Introduce angulo"); while (x!='*'){ //Espera a introducir ángulo y aceptar con * x=kbd_getc();
  • 59. tecla=x-48; if (x!=0&&x!='*'&&x!='#'){ //Solo se toman los valores numéricos //A cada tecla pulsada se desplaza posición decimal y se muestra centenas=decenas; decenas=unidades; unidades=tecla; printf(lcd_putc,"f Angulo = %ld%d%dn", centenas, decenas, unidades); lcd_putc(" * para aceptar"); } } angulo=(centenas*100)+(decenas*10)+unidades; if (angulo>180) angulo=180; //No acepta valores >180º pwm=(angulo/13)+7; //Ajuste modulación en función del valor introducido centenas=decenas=unidades=0; //Según número de servo introducido se le aplica el ángulo elegido switch(servo){ case 0: pwm0=pwm; break; case 1: pwm1=pwm; break; case 2: pwm2=pwm; break; case 3: pwm3=pwm; break; case 4: pwm4=pwm; break; case 5: pwm5=pwm; break; case 6: pwm6=pwm; break; case 7: pwm7=pwm; break; } printf(lcd_putc,"fServo %dn", servo); printf(lcd_putc," Angulo %ld", angulo); delay_ms(200); presentacion(); } } } Comunicación I2C entre 3 PIC
  • 60. El ejemplo didáctico consiste en lo siguiente. El PIC maestro carga en los PIC esclavos datos aleatorios en 10 posiciones de memoria. Primero con el PIC esclavo 1, dirección I2C en el bus 0xA0. Posteriormente con el PIC esclavo 2, con dirección I2C 0xB0. Cuando ha cargado los datos en ambos PIC, hace una lectura del dato que ha guardado en la posición 5 de ambos PIC y la muestra por el LCD.
  • 61. Pulsa en la imagen para ampliarla PIC Maestro Lo primero de todo será configurar la comunicación I2C en la cabecera del programa. En dicha configuración vamos a establecer que se trata del PIC maestro (master), que vamos a usar velocidad rápida (fast), y que los pines del PIC van a ser C4 para la línea sda del bus y C3 para scl, propios del módulo SSP que este PIC posee. #use i2c(Master, fast, sda=PIN_C4,scl=PIN_C3) Si el PIC no posee módulo SSP o queremos emplear otros pines diferentes, se puede realizar la comunicación mediante software forzando esta característica e indicando los pines que van a ser utilizados. #use i2c(Master, fast, sda=PIN_B2,scl=PIN_B3, force_sw)
  • 62. A partir de este momento, para enviar algo por el bus I2C ejecutamos la función Envio_I2C(),en la que deberemos especificar previamente la dirección en el bus I2C del esclavo con el que se quiere comunicar, la posición del buffer de memoria donde se va a guardar en el esclavo el dato enviado y la información del propio dato. direccion=0xA0; //Dirección del esclavo en el bus I2C posicion=0x05; //Posición donde se guardará el dato dato=0xfb; //Dato a transmitir Envio_I2C(direccion, posicion, dato); //Función para envio I2C Dentro ya de la función, el envío de cada byte de datos se realizará con las siguientes sentencias: i2c_start(); //Comienzo comunicación i2c_write(direccion); //Dirección del esclavo en el bus I2C i2c_write(posicion); //Posición donde se guardará el dato i2c_write(dato); //Dato a transmitir i2c_stop(); //Fin comunicación Para la lectura de los esclavos el proceso es similar, pero esta vez ejecutando la función Lectura_I2C(). También previamente deberemos especificar la dirección del esclavo en el bus I2C, la posición en el buffer de memoria del PIC esclavo de donde queremos obtener el byte que contiene y la variable donde lo vamos a guardar (&dato). direccion=0xA0; //Dirección del esclavo en el bus I2C posicion=0x05; //Posición donde se guardará el dato Lectura_I2C(direccion, posicion, &dato); //Función para envío I2C Dentro ya de la función ejecutaremos las sentencias para el envío de cada byte de datos: i2c_start(); //Comienzo de la comunicación i2c_write(direccion); //Dirección del esclavo en el bus I2C
  • 63. i2c_write(posicion); //Posición de donde se leerá el dato en el esclavo i2c_start(); //Reinicio i2c_write(direccion+1); //Dirección del esclavo en modo lectura dato=i2c_read(0); //Lectura del dato i2c_stop(); //Fin comunicación PIC esclavo Igual que en el PIC master, en cada PIC esclavo se debe configurar la comunicación I2C. En este caso vamos a establecer que se trata de un PIC esclavo (slave), que vamos a usar velocidad rápida (fast), que los pines del PIC van a ser C4 para la línea sda y C3 para scl, y cual va a ser su dirección en el bus (address). #use i2c(slave, fast, sda=PIN_C4, scl=PIN_C3, address=0xA0) A diferencia del PIC maestro que es quien decide en que momento iniciar la comunicación, en los esclavos, la comunicación se establece cuando, mediante la interrupción #INT_SSP se detecta actividad en el bus I2C. En el caso del PIC esclavo, si que vamos a necesitar del módulo SSP, por tanto no se puede forzar una comunicación por software como en el PIC maestro y los pines han de ser necesariamente los propios del bus I2C del PIC. #INT_SSP void ssp_interupt (){ int incoming; //Variable donde se recibe el byte que manda el maestro fstate = i2c_isr_state(); //Lectura del estado del bus I2c la interrupción /* Solicitud de lectura del esclavo por el master */ if(fstate == 0x80) {
  • 64. //Manda al maestro la información contenida en la posición de memoria que le ha solicitado i2c_write (buffer[posicion]); SolicitudMaster=1; //Fin de solicitud del master } /* Sino está solicitando lectura es que está enviando algo */ else { //Sino es que hay dato en el bus I2C... incoming = i2c_read(); //... lo lee if (fState == 1) { //Información recibida corresponde a la posicion posicion = incoming; //Se guarda posición } else if (fState == 2) { //Información recibida corresponde al dato buffer[posicion] = incoming; //Se guarda dato EnvioMaster=1; //Fin del envío del master } } } [+/-] Ver / Ocultar programa en C PIC Maestro [+/-] Ver / Ocultar programa en C PIC Esclavo 1 [+/-] Ver / Ocultar programa en C PIC Esclavo 2 En esta animación se ve la demostración de funcionamiento bajo proteus.
  • 65. Descarga de los archivos del proyecto. http://robotypic.blogspot.com/2012/03/comunicacion-i2c-entre-tres-pics.html https://www.youtube.com/watch?v=_aTmVS3xGOc