Title: I Jornadas de Iniciacin a la Microbtica 2004
1I Jornadas de Iniciación a la Microbótica 2004
A M U B u
PROGRAMACIÓN
A M U B u
- Organiza AMUBu
- Asociación de Microbótica de la Universidad de
Burgos - www.amubu.com amubu_asoc_at_yahoo.com
2Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
3Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
PROGRAMACIÓN
A M U B u
4Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
Se trata de un sistema electrónico basado en el
microcontrolador M68HC11. Engloba casi toda la
electrónica necesaria para la construcción de un
microbot.
Es un sistema cerrado
A M U B u
5Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
A M U B u
6Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
7Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
PROGRAMACIÓN
- Cómo se programa un microbot? (Handyboard)
Crear archivo .C (programación en IC?
Interactive C)
A M U B u
8Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
PROGRAMACIÓN
- Cómo se programa un microbot? (PIC)
Crear archivo .C (programación en C)
Crear archivo .asm (programación en ensamblador)
La herramienta MPLAB de Microchip puede englobar
a todas ellas. Además, incluye un depurador
A M U B u
9Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
10Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Lenguaje de programación IC (Interactive C)
Se trata de programar en C, aunque usando unas
funciones que nos permiten controlar directamente
los recursos de una Handyboard (puertos E/S,
motores, servos, etc.)
- La base va a ser un programa en C, por lo que su
estructura será la misma. - Cabeceras (includes, preprocesador, etc.)
- Función main()
- Otras funciones
A M U B u
11Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones para programar MOTORES en IC
Mover los motores al 100
fd(int m) ? mover motor m hacia delante
(forward) bk(int m) ? mover motor m hacia atrás
(backward)
A M U B u
12Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones para programar PUERTOS en IC
Entradas digitales
digital(int p) ? leer la patilla p
(esta función nos puede devolver un 1 o un 0)
A M U B u
13Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones para programar TIEMPOS en IC
sleep(float sec) ? esperar sin hacer otra cosa
durante sec segundos sleep(1.5) msleep(long
m_sec ) ? esperar sin hacer otra cosa durante
m_sec milisegundos msleep(1500L)
A M U B u
14Jornadas de Iniciación a la Microbótica
PROGRAMACION
- Funciones para programar MULTITAREA en IC
main int pid1,pid2 pid1start_process(sensor_d
cha) pid2start_process(sensor_izda) sigue
el código... kill_process(pid2) sensor_dcha(
) código ... sensor_izda() código ...
pidstart_process(nombre) ? comienza
paralelamente a ejecutar la función que se llama
nombre. pid es el identificador del
proceso kill_process(pid) ? mata al proceso
cuyo identificador es pid kill_all() ? mata a
todos los procesos en ejecución
A M U B u
15Jornadas de Iniciación a la Microbótica
PROGRAMACION
- Otras posibilidades de programación en IC
- Uso de servos con la expansión
- Programación del emisor-receptor de infrarrojos
- Knob Potenciómetro que da valores de 0 a 255
- Posibilidad de insertar código ensamblador del
M68HC11 entre el código en IC - Sacar datos por pantalla.
- Otras muchas (puertos dedicados... )
A M U B u
16Jornadas de Iniciación a la Microbótica
PROGRAMACION
- Ejemplo de programación en IC
/
Programación de un robot que
va por una habitación. Cuando choca con un objeto
retrocede un poco, se da la vuelta, y
sigue.
/ define DCHA 1 define
IZDA 3 define SENS_D digital(1) define SENS_I di
gital(2) void main() fd(DCHA) /Ponemos los
motores a funcionar / fd(IZDA) while(1)
/Este bucle se repite indefinidamente/ if(S
ENS_D1SENS_I1) bk(DCHA) /
Retrocedemos / bk(IZDA) sleep(1.5) fd(
DCHA) / Giramos / sleep(0.5) fd(IZDA) /
Volvemos a avanzar /
A M U B u
17Jornadas de Iniciación a la Microbótica
PROGRAMACION
- BibliografÃa sobre programación en IC
www.handyboard.com
- Pinchando en el apartado de DOCS, podremos
encontrar - The Handyboard Thecnical Reference
- Interactive C for the Handyboard Manual
- Manuales sobre el M68HC11
- Otros documentos interesantes
Robotics Explorations Fred G. Martin
A M U B u
18Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
19Jornadas de Iniciación a la Microbótica
PROGRAMACION
- Ensamblador para PIC Estructura interna (16F84)
A M U B u
20Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Registros más importantes del PIC 16F84
A M U B u
21Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Registro de estado (STATUS)
RP1-RP0 Selección de banco para direccionamiento
directo
Z Señalizador cero DC Señalizador de acarreo (4º
bit de menos peso) C Señalizador de acarreo
(octavo bit)
A M U B u
22Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Partes de un programa en ensamblador
- Etiquetas
- Ej PORTA EQU 0x01
- Configuración
- Establecer como va a funcionar cada recurso del
PIC - Cargar datos en los registros de configuración
- Programa, propiamente dicho
A M U B u
23Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
LIST P16F84 RADIX HEX INCLUDE
P16F84.INC ORG 0X00 INICIO bsf STATUS, RP0
Seleccionamos el banco 1 clrf TRISB 0Salidas
1Entradas movlw b00000110 movwf TRISA
Dos patillas de A son entradas bcf STATUS,RP0
Volvemos al banco 0 movlw 0xFF movwf PORTB
Encendemos los motores BUCLE btfsc PORTA,1
Leemos lo que hay en el puerto A
Comprobamos si RA11 goto GIRA_DCHA Si es
RA11, el sensor IZDO ha tocado la lÃnea,
luego paramos el motor IZDO btfsc PORTA,2
Idem, con el sensor derecho (RA2) goto GIRA_IZDA
Si no, seguimos esperando goto BUCLE GIRA_DCH
A bsf PORTB,1 Encendemos el motor
derecho bcf PORTB,2 Apagamos el motor
izquierdo GIRA_IZDA bcf PORTB,1 Apagamos el
motor derecho bsf PORTB,2 Encendemos el motor
izquierdo
- Ejemplo de programación en ensamblador
A M U B u
24Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
25Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Programación de PICs en lenguaje C
Existe una gran diversidad de compiladores de C
para programar microcontroladores PIC. Cada uno
de ellos tiene unas peculiaridades y unas formas
de programar distintas. Nosotros vamos a ver el
compilador C2C, por ser el más sencillo, aunque
cualquier otro es igualmente válido.
A M U B u
26Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Programación de PICs en lenguaje C
- Como ocurrÃa con el lenguaje IC, la estructura de
un programa en C para PICs sigue teniendo la
estructura clásica de un programa en C - cabecera con instrucciones del preprocesador
- función main()
- llamadas a funciones
- control de flujo
- ...
A M U B u
27Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones particulares para programar PICs
Lo primero del programa será establecer la
frecuencia del reloj que estemos usando, para
cálculo de tiempos, principalmente. Usamos la
instrucción del preprocesador pragma
CLOCK_FREQ 4000000 Existen otra serie de
pragmas, no muy corrientes, que pueden ser
consultados en la bibliografÃa.
A M U B u
28Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones particulares de C2C
Operaciones con registros
Al principio de la función main(), como en
lenguaje ensamblador, deberemos configurar las
lÃneas de los puertos como entradas o salidas.
INICIO bsf STATUS, RP0 Seleccionamos el banco
1 clrf TRISB 0Salidas 1Entradas movlw b00
000110 movwf TRISA Dos patillas de A son
entradas bcf STATUS,RP0 Volvemos al banco 0
set_bit(STATUS,RP0) / Seleccionamos el banco 1
/ set_tris_b(0) / 0salidas 1entradas
/ set_tris_a(0000110b) / Dos patillas de A
son entradas / clear_bit(STATUS,RP0) /
Volvemos al banco 0 /
A M U B u
29Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones particulares de C2C
Operaciones con registros
A M U B u
30Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones particulares de C2C
Operaciones con los puertos
A M U B u
31Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Funciones particulares de C2C
Operaciones con el tiempo
delay_s(número) segundos delay_ms(número) mil
isegundos delay_us(número) microsegundos
A M U B u
32Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
pragma CLOCK_FREQ 4000000 main() set_bit(STATU
S,RP0) / Seleccionamos el banco 1
/ set_tris_b(0) / 0salidas 1entradas
! set_tris_a(0000011b) / RA1 y RA0 son
entradas / clear_bit(STATUS,RP0) / Volvemos
al banco 0 / output_port_b(11110000b) /
Ponemos a andar al robot / while(1) /
Repetimos el bucle indefinidamente
/ if(input_pin_port_a(0)1) output_port_b(
11000000) / Retrocedemos / delay_s(2) o
utput_high_port_b(5) / Giramos
/ delay_s(0.1) output_high_port_b(4) /
Volvemos a avanzar / if(input_pin_port_a(1)
1) output_port_b(11000000) /
Retrocedemos / delay_s(2) output_high_port
_b(4) / Giramos / delay_s(0.1) outpu
t_high_port_b(5) / Volvemos a
avanzar /
- Ejemplo de programación de un PIC en C
A M U B u
33Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Introducción.
- Cómo se programa un microcontrolador?
- Lenguajes de programación para microbots.
- Lenguaje IC (Handyboard).
- Lenguaje ensamblador (PICs).
- Programación de PICs en C.
- Qué lenguaje elijo?
A M U B u
34Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
Debemos plantearnos
- Voy a emplear una tarjeta comercial, o voy a
crear yo mi propia tarjeta?
- Si me creo yo mi propia tarjeta, Qué
micro-controlador voy a usar? ?Dispongo del
software necesario para programarlo?
- Si no dispongo de él, cuánto dinero me quiero
gastar en comprar software?
A M U B u
35Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
- Nuestro caso Tenemos todas las herramientas
(PIC)
A M U B u
36Jornadas de Iniciación a la Microbótica
PROGRAMACIÓN
Hacer el programa en lenguaje C, introduciendo
en ensamblador las partes que nos resulten más
sencillas o menos engorrosas
AsÃ, conseguimos optimizar el código, sin
complicarnos, y poco a poco vamos cogiendo
confianza con el ensamblador, hasta que logremos
escribir un programa completo en ensamblador
A M U B u
37I Jornadas de Iniciación a la Microbótica 2004
A M U B u
PROGRAMACIÓN
A M U B u
Organiza AMUBu Asociación de Microbótica de la
Universidad de Burgos www.amubu.com
amubu_asoc_at_yahoo.com