4 leds
1 puente H
2 Protoboart
Pic
Lcd 2x16
Quarzo
5 resistencias
Cables 22agw
Potenciómetro
4 sensores magnéticos
Programador quadx
PROGRAMAS
Proteus
Ccs
Quadx
Microcontrolador PIC
El PIC original se diseñó para ser usado con la nueva CPU de 16 bits CP16000. Siendo en general
una buena CPU, ésta tenía malas prestaciones de entrada y salida, y el PIC de 8 bits se desarrolló
en 1975 para mejorar el rendimiento del sistema quitando peso de E/S a la CPU. El PIC utilizaba
microcódigo simple almacenado en ROM para realizar estas tareas; y aunque el término no se
usaba por aquel entonces, se trata de un diseño RISC que ejecuta una instrucción cada 4 ciclos del
oscilador.
https://cdn.solarbotics.com/products/photos/c6be3a127a5aacafd1c38a09acc34845/lrg/pic.jpg
https://es.wikipedia.org/wiki/Microcontrolador_PIC
Proteus (electrónica)
ISIS
El módulo VSM
Una de las prestaciones de Proteus, integrada con ISIS, es VSM, el Virtual System Modeling
(Sistema Virtual de Modelado), una extensión integrada con ISIS, con la cual se puede simular, en
tiempo real, con posibilidad de más rapidez; todas las características de varias familias de
microcontroladores, introduciendo nosotros mismos el programa que controlará el
microcontrolador y cada una de sus salidas, y a la vez, simulando las tareas que queramos que
lleve a cabo con el programa. Se pueden simular circuitos con microcontroladores conectados a
distintos dispositivos, como motores, lcd´s, teclados en matriz, etc. Incluye, entre otras, las
familias de PIC's PIC10, PIC12, PIC16, PIC18, PIC24 y dsPIC33. ISIS es el corazón del entorno
integrado PROTEUS. Combina un entorno de diseño de una potencia excepcional con una enorme
capacidad de controlar la apariencia final de los dibujos.wdsDA
https://es.wikipedia.org/wiki/Proteus_(electr%C3%B3nica)
http://img1.imagilive.com/0712/scrn-500d60b2.png
Advantages of the CCS C Compiler
CCS developed the first C Compiler for Microchip microcontrollers over 20 years ago and continues
to provide software solutions to developers of embedded applications using PIC® MCU and
PIC24/dsPIC® DSC devices. CCS compilers are easy to use and quick to learn. For the less
experienced programmer, a detailed textbook explaining the C language and how it may be
applied to PIC® microcontrollers.
Our compiler products include pro-level optimization, the largest library of built-in functions,
powerful PIC® MCU specific pre-processor commands, and ready-to-run example programs to
quickly jump-start any project. Our massive customer base provides us access to understanding
our customer's requirements while developing advanced features with frequent releases and rare
bugs.
C++ style input/output streams with full data formatting to any device or for strings
Convenient functions like #bit and #byte allow C variables to be placed at absolute addresses
The integral one-bit type (Short Int) permits the compiler to generate very efficient Bit-oriented
code Easily define, set-up and manage interrupts
QUADX!
QUADX Software
La tarjeta QUADX cuenta con un software de aplicación mediante el cual se gobiernan todas las
funciones de la tarjeta. Es intuitivo y fácil de usar.
Es compatible con las versiones de Windows: Windows ME, Windows XP, Windows Vista,
Windows 7, Windows 8 y Windows 8.1. Compatible con máquinas de 32 y 64 bits.
http://dignal.com/quadx/
http://dignal.com/wp-content/uploads/2015/02/2_opt.png
Un teclado matricial es un simple arreglo de botones
conectados en filas y colúmnas, de modo que se pueden leer varios botones con el mínimo
número de pines requeridos. Un teclado matricial 4x4 solamente ocupa 4 lineas de un puerto para
las filas y otras 4 lineas para las colúmnas, de este modo se pueden leer 16 teclas utilizando
solamente 8 líneas de un microcontrolador. Si asumimos que todas las columnas y filas
inicialmente están en alto (1 lógico), la pulsación de un botón se puede detectar al poner cada fila
a en bajo (0 lógico) y checar cada columna en busca de un cero, si ninguna columna está en bajo
entonces el 0 de las filas se recorre hacia la siguiente y así secuencialmente.
Un modo simple de detectar la tecla presionada es incrementar una variable con la cuenta de las
teclas revisadas, de este modo al detectaruna pulsación el valor de la cuenta será el valor de la
tecla presionada. Si al final no se presionó ninguna tecla la variable se pone a cero y la cuenta
vuelve a comenzar. El puerto B del microcontrolador 16f628 (así como en el 16f877) viene
preparado especialmente para el control de un teclado matricial 4x4. Para tener siempre un valor
de 1 lógico en las colúmnas del teclado (parte alta del puerto B del pic) es necesario conectar
resistencias de pull-up, sin embargo el puerto B cuenta con resistencias de pull-up integradas, de
ese modo es posible trabajar con un teclado matricial sin necesidad de ningún componente
externo.
http://electronilab.co/wp-content/uploads/2014/06/Teclado-Matricial-de-membrana-4x4-16-
d%C3%ADgitos-Electronilab-04.jpg
http://www.circuitoselectronicos.org/2011/03/teclado-matricial-4x4.html
¿Que es un LCD?
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16
caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
http://skpang.co.uk/catalog/images/lcd/lcd162b-ghb.jpg
http://todoelectrodo.blogspot.com/2013/02/lcd-16x2.html
El protoboard o breadbord: Es una especie de tablero con orificios, en la cual se pueden insertar
componentes electrónicos y cables para armar circuitos. Como su nombre lo indica, esta tableta
sirve para experimentar con circuitos electrónicos, con lo que se asegura el buen funcionamiento
del mismo.
A) Canal central: Es la región localizada en el medio del protoboard, se utiliza para colocar los
circuitos integrados.
B) Buses: Los buses se localizan en ambos extremos del protoboard, se representan por las líneas
rojas (buses positivos o de voltaje) y azules (buses negativos o de tierra) y conducen de acuerdo a
estas, no existe conexión física entre ellas. La fuente de poder generalmente se conecta aquí.
http://www.unicrom.com/imagenes/protoboard-1.gif
http://www.circuitoselectronicos.org/2007/10/el-protoboard-tableta-de-experimentacin.html
El calibre de alambre estadounidense (en inglés american wire gauge o AWG) es una referencia de
clasificación de diámetros. En muchos sitios de Internet y también en libros y manuales,
especialmente de origen norteamericano, es común encontrar la medida de conductores
eléctricos (cables) indicados con la referencia AWG. Cuanto más alto es este número, más delgado
es el alambre. El alambre de mayor grosor (AWG más bajo) es menos susceptible a la
interferencia, posee menos resistencia interna y, por lo tanto, soporta mayores corrientes a
distancias más grandes.
https://es.wikipedia.org/wiki/Calibre_de_alambre_estadounidense
http://www.intelix.com/RUB_IMAGES/images/med-res_jpg/22-4C-SO-HT.jpg
Código ccs
#include <16f877.h>
#use delay(clock=4000000)
#fuses xt,noprotect,nowdt
#byte portB=0x07
#byte portA=0x3f
#use fast_io(D)
{'4','5','6','B'} ,
{'7','8','9','C'} ,
#byte kbd_port_b = 6
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
{
kbd_port_b = ~f;
delay_cycles(1);
t = ~(t | 0xF0 );
if(t == c)
delay_ms(20);
tecla=KEYS[i ][j ];
while(t==c)
restart_wdt( );
t = ~(t | 0xF0) ;
break;
if(tecla)
break;
port_b_pullups(false);
return tecla;
void main(void)
{
TRISA = 0xFF;
int c,a,valor,valor1,valor2,valor3;
int piso=0;//servira para la logica del asensor al subir y bajar los pisos
delay_ms(500);
while(TRUE)
valor=0;
valor=1;
valor1=2;
valor2=3;
valor3=4;
if(c!=0){
if(c=='*'){
output_low(PIN_C7);
delay_ms(5);
output_low(PIN_C6);
delay_ms(5);
output_low(PIN_C4);
delay_ms(5);
output_low(PIN_C5);
delay_ms(5);
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C4);
delay_ms(1000);
output_low(PIN_C2);
delay_ms(5);
output_high(PIN_C3);
delay_ms(5222);
if(valor==1)
lcd_putc('\f');
output_low(PIN_C3);
delay_ms(50);
output_high(PIN_C4);
delay_ms(50);
for(a=0;a<2;a++)
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(500);
output_high(PIN_C3);
delay_ms(500);
if (a==0){
lcd_putc('\f');
lcd_putc("1 ,[[P.2]], 3 , 4");//lo que se anota en el lcd
else if(a==1)
if(bit_test(portA,0)==0)
lcd_putc('\f');
output_low(PIN_C3);
delay_ms(50);
output_high(PIN_C4);
delay_ms(50);
for(a=0;a<3;a++)
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(500);
output_high(PIN_C3);
delay_ms(500);
if (a==0){
lcd_putc('\f');
else if(a==1)
lcd_putc('\f');
else if(a==2)
lcd_putc('\f');
output_high(PIN_C4);
delay_ms(50);
piso=0;
output_low(PIN_C7);
delay_ms(5);
output_low(PIN_C6);
delay_ms(5);
output_low(PIN_C4);
delay_ms(5);
output_low(PIN_C5);
delay_ms(5);
output_high(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C5);
delay_ms(50);
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C5);
delay_ms(50);
}
else if(piso==2)//si esta en el tercer piso deciende un nivel para llegar al segundo piso
output_low(PIN_C2);
delay_ms(5);
output_high(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C5);
delay_ms(50);
else if(piso==3)//si esta en el cuarto piso deciende dos niveles para llegar al segundo piso
for(a=0;a<2;a++)
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(500);
output_high(PIN_C3);
delay_ms(500);
if (a==0){
lcd_putc('\f');
}
else if(a==1)
lcd_putc('\f');
output_high(PIN_C5);
delay_ms(50);
piso=1;
output_low(PIN_C7);
delay_ms(5);
output_low(PIN_C6);
delay_ms(5);
output_low(PIN_C4);
delay_ms(5);
output_low(PIN_C5);
delay_ms(5);
if(piso==0) //si esta en el primer piso sube dos nivel para llegar al tercer piso
for(a=0;a<2;a++)
output_low(PIN_C3);
delay_ms(5);
output_low(PIN_C2);
delay_ms(500);
output_high(PIN_C2);
delay_ms(500);
if (a==1){
lcd_putc('\f');
output_high(PIN_C6);
delay_ms(50);
else if(a==0)
lcd_putc('\f');
else if(piso==1)//si esta en el segundo piso sube un nivel para llegar al tercer piso
output_high(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
delay_ms(50);
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C6);
delay_ms(50);
else if(piso==3)//si esta en el cuarto piso deciende un nivel para llegar al tercer piso
output_low(PIN_C2);
delay_ms(5);
output_high(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C6);
delay_ms(50);
piso=2;
}
output_low(PIN_C7);
delay_ms(5);
output_low(PIN_C6);
delay_ms(5);
output_low(PIN_C4);
delay_ms(5);
output_low(PIN_C5);
delay_ms(5);
if(piso==0){
for(a=0;a<3;a++)
output_low(PIN_C3);
delay_ms(5);
output_low(PIN_C2);
delay_ms(500);
output_high(PIN_C2);
delay_ms(500);
if (a==1){
lcd_putc('\f');
else if(a==0)
{
lcd_putc('\f');
else if(a==2)
lcd_putc('\f');
output_high(PIN_C7);
delay_ms(50);
else if(piso==1){
for(a=0;a<2;a++)
output_low(PIN_C3);
delay_ms(5);
output_low(PIN_C2);
delay_ms(500);
output_high(PIN_C2);
delay_ms(500);
if(a==0)
{
lcd_putc('\f');
else if(a==1)
lcd_putc('\f');
output_high(PIN_C7);
delay_ms(50);
else if(piso==2){
output_high(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C7);
delay_ms(50);
else if(piso==3){
output_low(PIN_C2);
delay_ms(5);
output_low(PIN_C3);
delay_ms(5);
lcd_putc('\f');
output_high(PIN_C7);
delay_ms(50);
piso=3;
lcd_putc('\f');
lcd_putc("ingrese(1 al 4)");
valor=0;
Diseño en proteus