Está en la página 1de 54

Curso de PICs.

Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

CURSO PIC

GAMBAS2 EN EL SYNCNAP DE UBUNTU: INSTALAR Copiar la parte de crack en la carpeta de microbasic Instalar mscp2300 Descoprimir pbp247 y copiarla en la carpeta de mecanique

Cada microcontrolador se diferencia en sus caractersticas. Ejm. PIC16F628A tiene 2042 palabras y 18 pines. Todos lo microcontroladores trabajan a 5 V. Hay en veces q solo se quema una parte del micro Es de suma importancia usar en el PIC16f887 usar un capacitor cermico 104 entre 5V y tierra para estabilizar la corriente de entrada. El 887 tiene un oscilador interno de algunos valores.

Cuando se va a hacer un circuito impreso se debe tener una bornera de 2 pines para alimentacin colocando con 5V y gnd de manera que se muestra despus automticamente el Vdd y Vss.

Para obtener siempre 5V fijos a la entrada del miocrocontrolador es con un regulador 7805 con la siguiente configuracin

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

Para fuente negativo se utilza el 79XX de acuerdo al voltaje que se quiera ocupar. Para bajar el voltaje se puede tener 24V luego un regulador de 7812, luego a 7809 y luego 7805 .

De estos se puede sacar mximo 1. Mientras mayor cantidad de capacitores haya, es mucho mejor.

Pgina 150

La fuente puede ser recargable y el lm317 es variable, y est calculado para una salida de 12V, pero para hacer una fuente variable se puede usar potencimetro. Este saca mximo 3 A.

Programacin: Comunicacin integrada a travs de comunicacin serial (ICSP) Para la programacin los pines importantes son: Vpp 1 Data 40 Clock 39 Vss 31 o 12 Vdd 32 o 11

No se puede conectar directamente. Tambin hay microcontroladores superficiales, son los mismos que tenemos, pero los otros tienen para pasar los pines, en el superficial se debe igual sacar los pines para quemar el programa. Si se realiza cambios en el programa durante se tiene conectado la alimentacin y no se daa nada, si se bloquea el puerto del computador quiere decir que se produjo un corto pero no quiere decir q se da el puerto, pues al reiniciar el computador ya sirve de nuevo.

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

La ventaja de esta programacin se puede programar e inmediatamente se realiza el cambio.

Lenguaje:

El lenguaje que se va a utilizar se utiliza uno de alto nivel, q es el lenguaje basic. En este se genera un .HEX que es para programar y para que se genere este se requiere del programador que puede ser Winpic, Kprog y pickit2, esto lo genera con el compilador; en este caso se caso se utiliza el pickit2.

El microcode se utiliza para programas sencillos como cerraduras, etc.

Ejercicio 1 PIC16f628A y circuito sencillo Entrar al MSCP (microcode studio) y ubicar en el pic.

Instrucciones CMCON=1; digitalizar los puertos High es para sacar uno lgico

CMCON=1 HIGH PORTB.0 PAUSE 1000; Para pararlo y dejarlo en alto LOW portB.0 PAUSE 1000 END Frecuencia de 4MHz Ejercicio 2: Para hacer lazos repetitivos se utiliza lazos: CMCON=1; porque no se tiene convertidores AD INICIO:

Curso de PICs. Realizado por Anita Haro HIGH PORTB.0 PAUSE 1000; Para pararlo y dejarlo en alto LOW portB.0 PAUSE 1000 GOTO INICIO

Inicio de curso: 29 de abril 2011

Ejercicio 3: Si no hacer procesos repetitivos utilice gosub. Gosub salta a hacer una funcin y retorna INICIO: HIGH Portb.0 Gosub Tiempo LOW portB.0 GOSUB tiempo GOTO INICIO

Tiempo: PAUSE 1000 Return

Al usar el Gosub se est siendo eficiente puesto que no se usa mucha memoria que lo usa el pause.

Ejercicio 4: Uso de pulsadores o SWITCH

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

Para este caso se usa la instruccin Si botn=0, en programacin es:

IF PORTA.0=0 THEN --End if

Esto es porque se utiliza el voltaje directo que se tiene como 1L que va directo a RA0.

Al revs Se utiliza:

IF PORTA.0=1 THEN --ENDIF Esto es porque en este caso el voltaje que est ingresando es 0 y cuando se presiona el pulsador se convierte en 1L.

Ejercicio: Encendido del led mediante el pulsador CMCON=7; para digitalizar los puertos (ver datasheet) INICIO: ; ojo: tabular

if Porta.0=0 then

Curso de PICs. Realizado por Anita Haro HIGH PortB.0 else low Portb.0 ENDif GOTO INICIO Esto con la primera configuracin de pulsador.

Inicio de curso: 29 de abril 2011

Ejercicio 5: Para poner nombre a las variables se puede poner las siguientes instrucciones Pulsador Var porta.0 Led var portb.0

Para definir variables se puede poner X VAR : Bit 0-1 Byte 0-255 Word 0-65535

Programa: pulso una vez y se enciende el led y pulso otra vez y se apaga. CMCON=7; para digitalizar los puertos (ver datasheet) pulsador var porta.0 led var portb.0 x var bit X=0 INICIO: ; ojo: tabular

if pulsador=0 then gosub AR ; ver si sigue presionado el pulsador if X=0 then high led

Curso de PICs. Realizado por Anita Haro X=1 else low led x=0 endif endif GOTO INICIO

Inicio de curso: 29 de abril 2011

AR: if pulsador=0 then goto AR salta. return ; ve si est presionado el pulsador, una vez q deja de presionarse

Ejercicio 6: Lo mismo de antes, pero al presionar se enciende. Flanco de subida. if pulsador=0 then if X=0 then high led X=1 else low led x=0 endif gosub AR ; ver si sigue presionado el pulsador endif

Sin utilizar un auxiliar se hace como en la pgina 41. HACERLO

Ejercicio 7: Manejo de displays. Ver pgina 49. Del 0 al 9 como que fuesen leds. Para no poner estados en cada

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

pin, se puede utilizar la funcin Portb=%0000001 y con esto se comanda todo el puerto.

CMCON=7; para digitalizar los puertos (ver datasheet) trisb=%00000000 ; lo define como salida y con 1 son entradas =%b.7....B.0

INICIO:

; ojo: tabular

Portb=%1000000; =%b.6....b.0 gosub tiempo Portb=%1111001; 1 gosub tiempo Portb=%0100100 ;2 gosub tiempo Portb=%0110000 ;3 gosub tiempo Portb=%0011001 ;4 gosub tiempo Portb=%0010010 ;5 gosub tiempo Portb=%0000011 ;6 gosub tiempo Portb=%1111000 ;7 gosub tiempo Portb=%0000000 ;8 gosub tiempo Portb=%0011000 ;9 gosub tiempo GOTO INICIO

Tiempo:

Curso de PICs. Realizado por Anita Haro pause 200 return

Inicio de curso: 29 de abril 2011

Ejercicio 8: Uso de teclado. Se puede manejar con una matriz de pulsadores, en este caso se genera una matriz de 3x3 para este ejercicio.

Se utiliza una subrutina para que se pregunte en cada una de las filas y columnas el valor de 0 o 1 de las mismas.

El funcionamiento es que cuando se mande un 0L a la fila A, luego se presiona una tecla de esta fila, se tendr un 0L en la columna, caso contrario no se registra ningn cambio por lo que no se lee nada en el teclado. Las variables a, b y c solo pueden estar con valores de 0 o Vcc. 1 empieza desde FA, C1. Tambin se considera la subrutina AR porque se necesita anti-rrebote. El led va a parpadear el nmero de veces que se presiona la tecla.

Programa

CMCON=7; para digitalizar los puertos (ver datasheet) A var portb.0 B var portb.1 C var portb.2 uno var portb.3

Curso de PICs. Realizado por Anita Haro dos var portb.4 tres var portb.5 x var byte R var byte led var porta.0

Inicio de curso: 29 de abril 2011

barrido: low a if uno=0 then x=1: gosub AR: gosub L1 el endif if dos=0 then x=2: gosub AR: gosub L1 if tres=0 then x=3: gosub AR: gosub L1 high a ; ahora se pone la tierra en B.1 para sensar esta fila low b ;ahora debe pregunta por la columna 1 pero el dato 4 if uno=0 then x=4: gosub AR: gosub L1 el endif if dos=0 then x=5: gosub AR: gosub L1 if tres=0 then x=6: gosub AR: gosub L1 high b low c if uno=0 then x=7: gosub AR: gosub L1 el endif if dos=0 then x=8: gosub AR: gosub L1 if tres=0 then x=9: gosub AR: gosub L1 high c ; se utiliza 2 puntos para no usar enter y no hace falta ; se utiliza 2 puntos para no usar enter y no hace falta ; se utiliza 2 puntos para no usar enter y no hace falta

GOTO barrido ; en este caso no es necesario colocar los otros en cero xq est barriendo muy rpido

Curso de PICs. Realizado por Anita Haro AR: if uno=0 then goto ar if dos=0 then goto ar if tres=0 then goto ar return

Inicio de curso: 29 de abril 2011

L1: for R=1 to x high led pause 200 low led pause 200 next return

Para el antirrebote se pregunta por cada una de las columnas. if uno=0 then x=1: gosub AR: gosub L1 significa:

If uno=0 then X=1 Gosub AR Gosub L1 End if

DEBER: lo mismo pero en display de 1 a 9

Ejercicio 9 DEBER Uso de barrido de teclado pero se muestra en un display de 7 segmentos, como el programa en proteus no simula en los pines porta.5 y .6 debido a que no se especifica que se utiliza el oscilador interno, para definir esto se escribe lo siguiente.

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

@ device intrc_osc_noclkout ; cuando es con cristal se pone osc_HS @ device mclr_off

Ejercicio 10:

Para quemar el programa en el 16F887 se coloca como primera lnea en lugar de MCCON=7, Adcon1=7 Hs_osc hs es para alta velocidad, mayores a 4MHz

AnSEL=0; para digitalizar los puertos (ver datasheet) anselh=0

@ device hs_osc @ device mclr_off

pulsador var porta.0 led var portb.0 x var bit X=0 INICIO: ; ojo: tabular

if pulsador=0 then gosub AR ; ver si sigue presionado el pulsador if X=0 then high led X=1 else

Curso de PICs. Realizado por Anita Haro low led x=0 endif endif GOTO INICIO

Inicio de curso: 29 de abril 2011

AR: if pulsador=0 then goto AR salta. Return ; ve si est presionado el pulsador, una vez q deja de presionarse

Ejercicio 11: Lo anterior aumentando rel donde est el pulsador, el programa no cambia, slo en proteus.

Ejercicio 12:

Parmetros para utilizar en el microcode

DEFINE LCD_DREG portB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG portB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG portB DEFINE LCD_EBIT 2

Se utilizar un LCD 16*2 por ser el ms comn, y se debe definir todos los parmetros.

Definiendo en proteus queda:

Curso de PICs. Realizado por Anita Haro Programa: AnSEL=0; para digitalizar los puertos (ver datasheet) anselh=0

Inicio de curso: 29 de abril 2011

@ device hs_osc @ device mclr_off

DEFINE LCD_DREG portB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG portB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG portB DEFINE LCD_EBIT 2

lcdout $FE,1 ; para limpiar la pantalla lcdout $FE,0,"curso" desde la posicin 0 se escribe lcdout $fe,$c0,"pic y avr" end

Ejercicio 13: AnSEL=0; para digitalizar los puertos (ver datasheet) anselh=0

@ device hs_osc @ device mclr_off

x var byte

DEFINE LCD_DREG portB

Curso de PICs. Realizado por Anita Haro DEFINE LCD_DBIT 4 DEFINE LCD_RSREG portB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG portB DEFINE LCD_EBIT 2

Inicio de curso: 29 de abril 2011

lcdout $FE,1 ; para limpiar la pantalla lcdout $FE,0,"curso" lcdout $fe,$c0,"pic y avr" ;$fe es para bajar a la otra lnea y comienza en la columna 0 pause 2000 lcdout $FE,1 lcdout $FE,0,"variable X"

for x=0 to 2000 lcdout $fe,$c5,dec x pause 200 next end

Ejercicio 14:

Hacer un reloj que se incremente cada segundo.

AnSEL=0; para digitalizar los puertos (ver datasheet) anselh=0

@ device hs_osc @ device mclr_off

Curso de PICs. Realizado por Anita Haro h var byte m var byte s var byte

Inicio de curso: 29 de abril 2011

DEFINE LCD_DREG portB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG portB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG portB DEFINE LCD_EBIT 2

lcdout $FE,1 ; para limpiar la pantalla lcdout $FE,0,"reloj digital" lcdout $fe,$c4,"AniLu" pause 2000 lcdout $FE,1 lcdout $FE,0,"Reloj DigiAn"

for h=0 to 12 for m=0 to 59 for s=0 to 59 lcdout $fe,$c3,dec2 h,":",dec2 m,":",dec2 s ;dec2 es para que salga en 2 cifras pause 100 next next next end

Para que parpadee los puntos se coloca:

Curso de PICs. Realizado por Anita Haro for h=0 to 12 for m=0 to 59 for s=0 to 59

Inicio de curso: 29 de abril 2011

lcdout $fe,$c3,dec2 h,":",dec2 m,":",dec2 s pause 500 lcdout $fe,$c3,dec2 h," ",dec2 m," ",dec2 s pause 500

next next next end

Ms instrucciones del lcd en la pgina 81.

Servomotor Se compone por 3 pines, +, - y control

Este tiene un grupo de engranajes que le permiten tener un mayor torque y por ende mayor fuerza, puede girar de 0 a 180 y posicionarse de acuerdo al pulso (ancho de pulso) que se le enve como se observa en la pgina 170; esta variacin por ancho de pulso se llama PWM.

Ejercicio 15:

Desplazamiento de servomotor, con 3 pulsadores para que gire 0, 90 y 180, para que vaya a 0 se coloca pausas y con eso se maneja las posiciones.

Curso de PICs. Realizado por Anita Haro AnSEL=0; para digitalizar los puertos (ver datasheet) anselh=0

Inicio de curso: 29 de abril 2011

@ device hs_osc @ device mclr_off

pulso var portb.0 r var byte

inicio: if portb.1=0 then gosub AR1 for r=0 to 10 high pulso pauseus 500 low pulso pauseus 19500 next endif

if portb.2=0 then gosub AR2 for r=0 to 10 high pulso pauseus 1500 low pulso pauseus 19500 next endif

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

if portb.3=0 then gosub AR3 for r=0 to 10 high pulso pauseus 2500 low pulso pauseus 19500 next endif

goto inicio

AR1: if portb.1=0 then goto AR1 Return

AR2: if portb.2=0 then goto AR2 Return

AR3: if portb.3=0 then goto AR3 Return

No olvidarse que se debe colocar antirrebotes siempre que se coloca pulsadores.

MICROBASIC portB.0=1

Curso de PICs. Realizado por Anita Haro delay_ms(1000) portB.0=0 delay_ms(1000)

Inicio de curso: 29 de abril 2011

Lazo repetitivo INICIO: portB.0=1 delay_ms(1000) portB.0=0 delay_ms(1000) GOTO INICIO

Usando saltos INICIO: Portb.0=1 Gosub Tiempo PortB.0=0 GOSUB tiempo GOTO INICIO

Tiempo: Delay_ms (1000) Return

Microbasic se utiliza para programas un poco ms complicados. Es ms difcil de utilizarlo pero tiene ms posibilidades, aqu se puede manejar lcd grficos.

Hacer el programa de parpadeo de led GLCD AMPIRE 128x64 tiene 128x64 pixeles, la ventaja es que se puede trabajar punto por punto generando lneas, crculos, etc. DEBER: hacer que la aguja se mueva de acuerdo al ngulo. Para el deber en el glcd se genera una

Curso de PICs. Realizado por Anita Haro lnea y de acuerdo al movimiento se va desplazando la lnea.

Inicio de curso: 29 de abril 2011

Para la imagen se toma otra imagen de base para tener el tamao ideal que soporta el glcd y ah se puede graficar. En microbasic poner tool, glcd bitmap editor y seleccionar ks108, luego cargar la imagen y despus elegir microbasic code abajo y copiar el cdigo en code y exit, luego file, nuevo.

Conectar: glcd_init(portb,0,1,2,3,5,4,portd) portb,0 : cs1 portb.1 : cs2 portb.2 : rs portb.3 : rw portb.4 : E portb.5 : rst portd: d.0 a d.7

Cuando se escribe module, quiere decir que en este caso se utiliza un mdulo donde se encuentra la imagen, y aqu est la imagen, mientras que program es el programa que se va a ejecutar y puede tomarse los mdulos de imagen.

program parpadeodeled include "modulo1" main: ansel=0 anselh=0 glcd_init(portb,0,1,2,3,5,4,portd) 'glcd_set_font(@FontSystem 5*8,5,8,32) Glcd_Fill(0x00) no es necesario escribirlo Glcd_Fill(0xAA) no es necesario escribirlo, el programa funciona sin l

Curso de PICs. Realizado por Anita Haro glcd_image (snoopy_bmp) end. no olvidar el punto despus de end

Inicio de curso: 29 de abril 2011

DEBER: Con 2 pulsadores hacer que el motor se mueva y esto se visualice en el glcd con una recta, slo se debe hacer el movimiento para 0 y 180.

program ejercicio17 include "subida" dim x as word

portc=0 trisc=%11111011

main: ansel=0 anselh=0

glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@FontSystem5x8,5,8,32)

if portc.0=0 then for x=0 to 10 PORTC.2=1 delay_us(500) portc.2=0 delay_us(19500) next x

glcd_image (subiendo1_bmp) gosub tiempo

Curso de PICs. Realizado por Anita Haro glcd_image (subiendo4_bmp) gosub tiempo glcd_image (subiendo6_bmp) gosub tiempo glcd_image (subiendo9_bmp) gosub tiempo

Inicio de curso: 29 de abril 2011

end if

if portc.1=0 then for x=0 to 10 PORTC.2=1 delay_us(2500) portc.2=0 delay_us(17500) next x

glcd_image (subiendo9_bmp) gosub tiempo glcd_image (subiendo6_bmp) gosub tiempo glcd_image (subiendo4_bmp) gosub tiempo glcd_image (subiendo1_bmp) gosub tiempo end if

goto main

Curso de PICs. Realizado por Anita Haro tiempo: delay_ms(5) return

Inicio de curso: 29 de abril 2011

end.

La instruccin de trisc permite colocar al Puerto como entradas o salidas, tambin se puede poner como 255 o $FF para expresar todos los pines como entrada.

Para revisar ms programas con lcd grficos, ir http://www.proteus.110mb.com/Simulaciones_glcd_pic_p2.html

la

siguiente

pgina:

GLCD Ampire Todos los GLCD tipo Ampire se los coloca de la siguiente manera:

Ampire es el controlador del glcd. El Vo y el Vout nos dan el contraste en el glcd, para variarlo se conecta un potencimetro, con esto se puede observar la salida de las letras. Como dice Vout, se coloca en lugar de tierra Vcc, pero en la prctica se tiene un glcd con +Vout. En proteus no es necesario la parte de contraste. Para usar el glcd primero hay que inicializarlo.

A continuacin se presentan las dos formas anteriores:

Ejercicio 19: Se realizar un grfico para colocarlo en el glcd.

Project, new Project, elegir opciones: _hs_osc, _mcrle_off, _lvp_off; flie, Nuevo, guarder como modulo1, herramientas, tools, glcd bitmap editor, ks0108, load bmp picture, seleccionar mikrobasic code, copy code to clipboard, pegar en modulo1, luego del parntesis colocar end., al inicio colocar module x_bmp.

Curso de PICs. Realizado por Anita Haro program ejercicio19 include "modulo1"

Inicio de curso: 29 de abril 2011

main: ANSEL=0 ANSELH=0 GLCD_INIT(PORTB,0,1,2,3,5,4,PORTD) 'inicializar glcd GLCD_SET_FONT(@FontSystem5X8,5,8,32) 'para el formato de letras

inicio: glcd_image(house_bmp) 'permite ingresar el grfico (el mismo de const) end.

Ahora para encerar el glcd, se utiliza la instruccin: Glcd_fill(0) Y para escribir se usa: GLCD_WRITE_TEXT(cualquier cosa q se quiera escribir,0,0,1) En este caso se tiene 8 filas con tamao de carcter 5 porque pusimos 5x8. El 1 indica desde que posicin va a arrancar, columna 1 y el cero de a lado es la fila y el otro es el color, que siempre se ubicar en 0 puesto que es monocromtico. 5 pixels x 8 pixels, cada carcter y el 32 es el offset, el desplazamiento para la visualizacin del carcter.

Ejercicio: Contador

Es con lo anterior pero se escribe para lo cual se definen 2 variables, x e y; donde x es numrica y Y es string, osea como cadena de carateres, para imprimir o visualizar x en la pantalla, es necesario transformarla en string, para ello se utiliza la siguiente instruccin: Wordtostr(x,y) osea de Word a string.

program ejercicio19

Curso de PICs. Realizado por Anita Haro include "modulo1" dim x as word

Inicio de curso: 29 de abril 2011

dim y as string[5] 'y es una variable tipo caracter de 5 caracteres

main: ANSEL=0 ANSELH=0 GLCD_INIT(PORTB,0,1,2,3,5,4,PORTD) 'inicializar glcd GLCD_SET_FONT(@FontSystem5X8,5,8,32) 'para el formato de letras Inicio:

for x=0 to 1000 wordtostr(x,y) glcd_write_text(y,0,2,1) delay_ms(200) next x

end.

TOUCHSCREEN

El touchscreen es una lmina que permite simular lo que se presiona, esto se le indica con inversin de colores o hacer q todo se pinte de negro y en caso q se deje de presionar se despinte.

Ejercicio20: Graficar un teclado en el glcd para despus utilizarlo con el touchscreen. Dividirlo en 16 partes.

program teclado2 dim x as byte

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

trisa=%11110000

main: ansel=0 anselh=0 glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@fontsystem5x8,5,8,32)

glcd_fill(0) Glcd_Rectangle(20, 0, 40, 17, 1) Glcd_Rectangle(40, 0, 60, 17, 1) Glcd_Rectangle(60, 0, 80, 17, 1) Glcd_Rectangle(80, 0, 100, 17, 1) Glcd_Rectangle(20, 17, 40, 34, 1) Glcd_Rectangle(40, 17, 60, 34, 1) Glcd_Rectangle(60, 17, 80, 34, 1) '1 '2 '3 'A '4 '5 '6

Glcd_Rectangle(80, 17, 100, 34, 1) 'B Glcd_Rectangle(20, 34, 40, 51, 1) Glcd_Rectangle(40, 34, 60, 51, 1) Glcd_Rectangle(60, 34, 80, 51, 1) '7 '8 '9

Glcd_Rectangle(80, 34, 100, 51, 1) 'C Glcd_Rectangle(20, 51, 40, 64, 1) Glcd_Rectangle(40, 51, 60, 64, 1) Glcd_Rectangle(60, 51, 80, 64, 1) '* '0 '#

Glcd_Rectangle(80, 51, 100, 64, 1) 'D Glcd_write_text("1",28,1,1) Glcd_write_text("2",48,1,1) Glcd_write_text("3",68,1,1)

Curso de PICs. Realizado por Anita Haro Glcd_write_text("4",28,3,1) Glcd_write_text("5",48,3,1) Glcd_write_text("6",68,3,1) Glcd_write_text("7",28,5,1) Glcd_write_text("8",48,5,1) Glcd_write_text("9",68,5,1) Glcd_write_text("*",28,7,1) Glcd_write_text("0",48,7,1) Glcd_write_text("#",68,7,1) Glcd_write_text("A",88,1,1) Glcd_write_text("B",88,3,1) Glcd_write_text("C",88,5,1) Glcd_write_text("D",88,7,1) x=0

Inicio de curso: 29 de abril 2011

barrido: porta.0=1 if porta.4=1 then x=1 gosub L1 end if

if porta.5=1 then x=2 gosub L2 end if

if porta.6=1 then x=3

Curso de PICs. Realizado por Anita Haro gosub L3 end if

Inicio de curso: 29 de abril 2011

if porta.7=1 then x=11 'a gosub L11 end if

porta.0=0 porta.1=1

if porta.4=1 then x=4 gosub L4 end if

if porta.5=1 then x=5 gosub L5 end if

if porta.6=1 then x=6 gosub L6 end if

if porta.7=1 then x=12 'b gosub L12

Curso de PICs. Realizado por Anita Haro end if

Inicio de curso: 29 de abril 2011

porta.1=0 porta.2=1

if porta.4=1 then x=7 gosub L7 end if

if porta.5=1 then x=8 gosub L8 end if

if porta.6=1 then x=9 gosub L9 end if

if porta.7=1 then x=13 'c gosub L13 end if

porta.2=0 porta.3=1

if porta.4=1 then

Curso de PICs. Realizado por Anita Haro x=14 '* gosub L14 end if

Inicio de curso: 29 de abril 2011

if porta.5=1 then x=10 gosub L10 end if

if porta.6=1 then x=15 '# gosub L15 end if

if porta.7=1 then x=16 'd gosub L16 end if

porta.3=0

goto barrido

L0: return

L16: Glcd_box(80, 51, 100, 64, 1) 'D

Curso de PICs. Realizado por Anita Haro 'gosub tiempo Glcd_box(80, 51, 100, 64, 0) Glcd_rectangle(80, 51, 100, 64, 1) Glcd_write_text("D",88,7,1) return

Inicio de curso: 29 de abril 2011

L1: Glcd_box(20, 0, 40, 17, 1) gosub tiempo Glcd_box(20, 0, 40, 17, 0) Glcd_Rectangle(20, 0, 40, 17, 1) Glcd_write_text("1",28,1,1) RETURN '1 '1

L2: Glcd_box(40, 0, 60, 17, 1) gosub tiempo Glcd_box(40, 0, 60, 17, 0) Glcd_rectangle(40, 0, 60, 17, 1) Glcd_write_text("2",48,1,1) '2

RETURN L3: Glcd_box(60, 0, 80, 17, 1) gosub tiempo Glcd_box(60, 0, 80, 17, 0) Glcd_rectangle(60, 0, 80, 17, 1) Glcd_write_text("3",68,1,1) '3

Curso de PICs. Realizado por Anita Haro RETURN

Inicio de curso: 29 de abril 2011

L4: Glcd_box(20, 17, 40, 34, 1) gosub tiempo Glcd_box(20, 17, 40, 34, 0) Glcd_rectangle(20, 17, 40, 34, 1) Glcd_write_text("4",28,3,1) '4

return

L5: Glcd_box(40, 17, 60, 34, 1) gosub tiempo Glcd_box(40, 17, 60, 34, 0) Glcd_rectangle(40, 17, 60, 34, 1) Glcd_write_text("5",48,3,1) '5

return

L6: Glcd_box(60, 17, 80, 34, 1) gosub tiempo Glcd_box(60, 17, 80, 34, 0) Glcd_rectangle(60, 17, 80, 34, 1) Glcd_write_text("6",68,3,1) '6

return

Curso de PICs. Realizado por Anita Haro L7:

Inicio de curso: 29 de abril 2011

Glcd_box(20, 34, 40, 51, 1) gosub tiempo Glcd_box(20, 34, 40, 51, 0)

'7

Glcd_rectangle(20, 34, 40, 51, 1) Glcd_write_text("7",28,5,1)

return

L8: Glcd_box(40, 34, 60, 51, 1) gosub tiempo Glcd_box(40, 34, 60, 51, 0) Glcd_rectangle(40, 34, 60, 51, 1) Glcd_write_text("8",48,5,1) '8

return

L9: Glcd_box(60, 34, 80, 51, 1) gosub tiempo Glcd_box(60, 34, 80, 51, 0) Glcd_rectangle(60, 34, 80, 51, 1) Glcd_write_text("9",68,5,1) '9

return

L10:

Curso de PICs. Realizado por Anita Haro Glcd_box(40, 51, 60, 64, 1) gosub tiempo Glcd_box(40, 51, 60, 64, 0) Glcd_rectangle(40, 51, 60, 64, 1) Glcd_write_text("0",48,7,1) '0

Inicio de curso: 29 de abril 2011

return

L11: Glcd_box(80, 0, 100, 17, 1) gosub tiempo Glcd_box(80, 0, 100, 17, 0) Glcd_rectangle(80, 0, 100, 17, 1) Glcd_write_text("A",88,1,1) 'A

return

L12: Glcd_box(80, 17, 100, 34, 1) 'B gosub tiempo Glcd_box(80, 17, 100, 34, 0) Glcd_rectangle(80, 17, 100, 34, 1) Glcd_write_text("B",88,3,1)

return

L13: Glcd_box(80, 34, 100, 51, 1) 'C gosub tiempo

Curso de PICs. Realizado por Anita Haro Glcd_box(80, 34, 100, 51, 0) Glcd_rectangle(80, 34, 100, 51, 1) Glcd_write_text("C",88,5,1)

Inicio de curso: 29 de abril 2011

return

L14: Glcd_box(20, 51, 40, 64, 1) gosub tiempo Glcd_box(20, 51, 40, 64, 0) Glcd_rectangle(20, 51, 40, 64, 1) Glcd_write_text("*",28,7,1) '*

return

L15: Glcd_box(60, 51, 80, 64, 1) gosub tiempo Glcd_box(60, 51, 80, 64, 0) Glcd_rectangle(60, 51, 80, 64, 1) Glcd_write_text("#",68,7,1) '#

return

tiempo: delay_ms(100) return

end.

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

CONVERSOR AD Una seal digital es una seal discreta que da valores fijos q no varan, mientras q una seal analgica es variable en el tiempo

Seal analgica

Seal digital

Las seales adecuadas para ingresarlas en el microcontrolador son de 4 a 20mA y de 0 a 5V, generalmente las seales de los sensores son muy pequeas por lo que es necesario amplificarlas. Dentro del microcontrolador se tiene los Conversores AD, que para el 16f887 hay 13 conversores que adquieren seales externas. Al definir una variable como byte se puede tener hasta 255 muestras, Ejm. Se tiene un potencimetro en el puerto AN0 y se lo vara.

Ejercicio 21: program ejercicio21 dim x as byte dim y as string[5]

main: ansel=0 anselh=0 trisa=$ff 'puerto A como entrada adcon1=0 'configura entradas analgicas glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@fontsystem5x8,5,8,32) inicio: x=adc_read(0) 'como tiene varios canales se escribe el canal del cual va a leer 'lo que tengo en la variable se guarda en x

Curso de PICs. Realizado por Anita Haro bytetostr(x,y) glcd_fill(0) glcd_write_text("Conversor anlogo",0,0,1) glcd_write_text(y,3,3,1) delay_ms(100) goto inicio end.

Inicio de curso: 29 de abril 2011

Si se prueba con un lm35 si se observa la variacin perfecta del ad. Para este caso fue necesario definir la variable x como string puesto q de lo contrario no puede desplegarse en el glcd.

Al probarlo con variable tipo Word, el rango se ampla y por ende el valor no se repite de nuevo como con la variable tipo byte, y es por ello que se tiene un mejor resultado.

program ejercicio21 dim x as word dim y as string[5]

main: ansel=0 anselh=0 trisa=$ff 'puerto A como entrada adcon1=0 'configura entradas analgicas glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@fontsystem5x8,5,8,32) glcd_write_text("Conversor anlogo",0,0,1) inicio: x=adc_read(0) 'como tiene varios canales se escribe el canal del cual va a leer

Curso de PICs. Realizado por Anita Haro 'lo que tengo en la variable se guarda en x wordtostr(x,y) 'glcd_fill(0)

Inicio de curso: 29 de abril 2011

glcd_write_text(y,3,3,1) delay_ms(100) goto inicio end.

DEBER:

1 pxel debe ubicarse en la pantalla de acuerdo al valor de 2 potencimetros que indiquen x e y, este valor del pxel debe ser acumulativo, hacer utilizando Conversores AD.

Se utiliza la funcin Glcd_dot (x,y,0) que permite desplegar un punto en el glcd en la posicin x e y.

GLCD 1 Vss 2 Vdd 3Vo 4 R/S 5 R/W 6E 7 DB0

14 DB7 15 CS1 16 CS2

Curso de PICs. Realizado por Anita Haro 17 Reset 18 Vee 19 K 20 A

Inicio de curso: 29 de abril 2011

Cuando sale la una parte de la palabra en la una parte y la otra mitad alreves se debe cambiar cs1 por cs2.

Ejercicio : Hacer lo mismo pero probar con un

Hay touchscreen, resistivos, capacitivos y pticos, el ms comn es el resistivo. Internamente se conecta de la siguiente manera.

Para este se requiere manejar 2 conversores el ADC0 y el 1, con los 2 datos se puede definir las posiciones en la pantalla. Con x e y se define posiciones.

Ejercicio: Hacer el programa para leer las posiciones, definir rangos con el if. En adc0 y 1 se toma los valores de x e y.

1 0: salida en el canal 1 0 1: salida en el canal 0

Programa pa q de los 2 datos a la vez, poner y hacer un lazo infinito.

Subir

Rango de x: 95 a 105 Rango Y: 16 a 23

Curso de PICs. Realizado por Anita Haro Bajar

Inicio de curso: 29 de abril 2011

Rango de X: 95 a 105 Rango de Y: 32 a 39

Para comparar varios dentro del lazo if hacer: If ((x>250) and (x<120)) then Y sirven todos los operadores lgicos

Pines para el topuchscreen

1 CS1 2 CS2 3 GND 4 Vcc 5 Vo 6 RS 7 RW 8E 9 D0 10 D1

16 D7 17 Rst 18 Vee 19 +led 20 led

Curso de PICs. Realizado por Anita Haro X: 108 a 148 Y: 118 a 220

Inicio de curso: 29 de abril 2011

program touchscreen include "selector" dim x as byte dim y as byte dim x1 as string[5] dim y1 as string[5]

main: ansel=0 anselh=0 adcon1=0 trisc=0 glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@fontsystem5x8,5,8,32) glcd_image(selectores_bmp) glcd_write_text("ANILU",26,4,1)

inicio: portc.0=0 portc.1=1 x=adc_read(0) portc.0=1 portc.1=0 y=adc_read(1)

bytetostr(x,x1)

Curso de PICs. Realizado por Anita Haro bytetostr(y,y1) glcd_write_text(x1,1,1,0) glcd_write_text(y1,2,2,0)

Inicio de curso: 29 de abril 2011

if ((x>=108) and (x<=148)) then if ((y>=118)and (y<=223)) then glcd_image(arriba_bmp) 'glcd_fill(0) glcd_write_text("Subiendo",5,3,1) delay_ms(100) else glcd_image(selectores_bmp) glcd_write_text("ANILU",26,4,1) end if end if

if ((x>=160) and (x<=1170)) then if ((y>=70) and (y<96)) then glcd_image(abajo_bmp) 'glcd_fill(0) glcd_write_text("Bajando",5,3,1) else glcd_image(selectores_bmp) glcd_write_text("ANILU",26,4,1) end if

end if

goto inicio

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

end.

Este permite subir y bajar de acuerdo a la posicin en el touchscreen.

Con promedio:

Comunicacin Serial El micro posee un programador por hardware q permite realizar la comunicacin serial, aunq tambin por software se puede simular puertos. La comunicacin serial permite comunicacin entre 2 dispositivos. En los microcontroladores se tienen 2 pines q permiten hacer la comunicacin, para el PIC16f628a los pines son el 7:RX y el 8:TX

Hay varios tipos de comunicacin q se detalla en el libro. Para utilizarlo en el mikrobasic se utiliza la siguiente instruccin:

Include modedefs.bas Serin portb.0, n2400, dato recibe el dato a la velocidad de 2400 esto se guarda en la variable dato, esto es para microcode

Para comunicar se utiliza tramas y se transmite en ascii mediante 8 bits. IF dato=A then High led

Al definir n2400, se define lo siguiente: 2400 de velocidad, 8 bits, sin paridad y 1 bit paridad. En el computador se debe conectar tierra, rx y tx. Ojo: no se puede enviar palabras, hay q enviar letra por letra.

Ejercicio: Sacar un 628 y el hiperterminal, para este caso se utiliza el microcode.

Curso de PICs. Realizado por Anita Haro CMCON=7 include "modedefs.bas"

Inicio de curso: 29 de abril 2011

inicio: serout PORTB.0,T9600,["A"] goto inicio

se debe conectar slo el pin pero del puerto b.0 xq se est simulando que ese es el transmisor.

Ejercicio: Poner el portb.0 como receptor de lo q se escribe en el puerto serial. include "modedefs.bas" CMCON=7 DEFINE LCD_DREG portB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG portB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG portB DEFINE LCD_EBIT 2 dato var word

inicio: 'serout PORTB.0,T9600,["A"] 'pause 1000 serin portb.0,T9600, dato lcdout $fe,1,"DATO: ",dato goto inicio

Ahora lo mismo pero en mikrobasic. Simulacin de puerto serial

Curso de PICs. Realizado por Anita Haro Soft_vart_init(portb,0,1,9600,0) Inicializar comunicacin

Inicio de curso: 29 de abril 2011

0: RX 1: TX 9600: velocidad 0: dato T--- =0 N---=1 Soft_vart_write(A) (dato)

program serial2

main: ansel=0 anselh=0

inicio: soft_uart_init(porta,0,1,9600,0) soft_uart_write("A") delay_ms(100) goto inicio

end.

Ejercicio:

dim er as byte dim otro as string[5] main:

Curso de PICs. Realizado por Anita Haro ansel=0 anselh=0 glcd_init(portb,0,1,2,3,5,4,portd) glcd_set_font(@fontsystem5x8,5,8,32) glcd_fill(0) glcd_write_text("Programa para leer ", 7,1,1) glcd_write_text("dato",54,2,1) glcd_write_text("AniLu",50,4,1) delay_ms(1000)

Inicio de curso: 29 de abril 2011

inicio:

'glcd_fill(0) soft_uart_init(porta,0,1,9600,0) do dato=soft_uart_read(er) loop until (er=0) bytetostr (dato,otro) glcd_write_text("Dato: ", 1,6,1) glcd_write_text(otro,54,7,1) goto inicio

end.

DEBER: Hacer un osciloscopio con glcd con touchscreen, medir seales continuas de 0 a 120 y continuas de 0 a 110, para ver el funcionamiento del led.

Visualizar: -DATO DC: Linea vertical de 0 a 50V

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

-Alterna de 0 a 120V ver kmo acoplar. Al micro entra de 0 a 5V (transformador) - Al aplastar clr debe borrar y dejar slo el eje de coordenadas - Visualizar el voltaje q da. Ver la conduccin en el led Y si envio la A debe verse los bits kmo se visualizan. Hacer con transformador y dems en plaquita que slo quede para conectar el micro.

Mandar hasta el mircoles

Mdulos de radio frecuencia Es similar a la comunicacin serial, pero en lugar de cables se usa el mdulo, con el que se trabaja es de 433MHz. La conexin est en la pgina 130. Transmisor: es similar a un transistor de 3 pines, slo q este tiene 4 pines.

Serout, portb.0, n2400,[A] Similar al de com serial

Serin, portb.1, n2400,1000,inicio,dato durante 1 segundo si no recibe nada se va a inicio, y si recibe algo, se guarda en dato.

Inicio: Serin, portb.1,n2400,200,inicio,[A],dato si durante 200ms no recibe el dato A, regresa a inicio, caso contrario si me da A, guarda lo dems en dato, pero no guarda A.

Curso de PICs. Realizado por Anita Haro Esto es en microcode.

Inicio de curso: 29 de abril 2011

Comunicacin serial visit hardware Usart_init(9600) solo se debe definir la velocidad porque los pines ya estn definidos.

Ejercicio:

MIkrobasic main: usart_init(9600) while true if (usart_data_ready()) then x=usart_read() usart_write(x) end if wend end.

Cuando se enva una sola vez el dato, no se asegura q el dato llegue puesto q siempre se estn enviando y recibiendo datos basura por el transmisor de radio frecuencia.

Ejercicio: Transmitir D con radio frecuencia program serial

main: ansel=0 anselh=0 usart_init(2400) inicio:

Curso de PICs. Realizado por Anita Haro usart_write("D") delay_ms(100) goto inicio end.

Inicio de curso: 29 de abril 2011

Mdulos ZigBee

Son utilizados en automatizacin de casas, sistemas de seguridad, monitoreo de sistemas remotos, etc. Son bidireccionales, es decir, permiten mandar y recibir seales.

Tienen que ser programados, tienen algunos Conversores AD, puertos I/O, etc y pueden programarse por hiperterminal con comandos AT. Existe un programa llamado X-CTU que permiten programar a estos mdulos de manera sencilla pues con AT es muy complicado.

Tienes 6ADC y 8 entradas digitales adems de TX, RX

Comunicacin con microcontroladores.

Estos mdulos trabajan con 3,3V por lo que se requiere de un regulador

Transmisor

Receptor

Los pines importantes para la programacin son : MY direccin de origen DL direccin de destino BD baud rate (velocidad de transmisin)

Curso de PICs. Realizado por Anita Haro Ejm. Transmisor:

Inicio de curso: 29 de abril 2011

En el parmetro MY introducimos el valor 123 y en el parmetro DL introducimos el valor 321.

Receptor: En el parmetro MY introducimos el valor 321 y en el parmetro DL introducimos el valor 123. Esto se traduce de la siguiente manera en terminos generales: nuestro receptor se llama 321 y solo recibe de nuestro transmisor que se llama 123.

El ultimo parmetro a configurar es el de BD (del menu serial interfacing ), aqui introduciremos el valor de la velocidad a la cual nuestro microcontrolador enviara y recibir datos. Por default, los mdulos vienen programados a 9600 baudios, basta seleccionar el parmetro al valor deseado, pero lo dejaremos en 9600.

X-CTU

En modem configuration se debe poner read para que lea el mdulo, de lo contrario saldr la siguiente pantalla

La ventaja de usar estos mdulos es que no enva nada de datos basura porque est definido el canal por el que enva y recibe los datos.

Ejercicio: Hacer un programa para mandar nuestro nombre en mikrocode. Recibir: portb.2 Transmitir: portb.1

include "modedefs.bas" cmcon=7 @ device hs_osc @ device mclr_off

Curso de PICs. Realizado por Anita Haro 'dato var byte

Inicio de curso: 29 de abril 2011

inicio: serout portb.1,t9600,[" ANILU "] pause 100 'serin portb.2,T9600, dato goto inicio

Se puede crear una cuenta en clubbuzon.com y de ah mandar lo que quiera a esa cuenta y se paga con tarjeta. Ver en www.mouser.com para comprar q es ms barato. La membresa en el clubbuzon es de 45 anuales.

Si sale S debe mandar el nombre

inicio: high porta.0 serin portb.2,t9600,200,inicio,dato

if dato="s" then serout portb.1,t9600,[" ANILU "] high porta.0 endif low porta.0

goto inicio Ejercicio: Recibir lo que me envan y mandarlo

inicio:

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

serin portb.2,t9600,200,inicio,dato

serout portb.1,t9600,[dato]

goto inicio

Transmisin y recepcin de datos en LabVIEW

En la pgina 123 se detalla el programa como se lo hace.

Gambas2 Para utilizar las ventanas de gambas se puede actuar como administrador o usuario, para tener todas las ventajas se debe entrar como administrador, para ello se abre el terminal sudo su escribir contrasea gambas2 ejemplos, serial port para comunicacin serial en proyecto, propiedades, habilitar gb.net en componentes.

Curso de PICs. Realizado por Anita Haro

Inicio de curso: 29 de abril 2011

Al abrir en carpetas lugares, dev, aqu aparece la carpeta del puerto serial cuando se lo conecta. Para cambiar el nombre, hacer click en el primero y ver en propiedades, lo mismo en el cono de serial y en CR q sirve para ver las veces que se repite el lazo. Revisar los ejemplos del gambas y hacerlos. Para que funcione bien, se requiere que tambien se tenga el puerto serial.

También podría gustarte