PICAXE

Prácticas de laboratorio para PICAXE

¿Qué PICAXE escoger? observa la siguiente tabla y escoge el que más se adecue a tus implementaciones:






Estos laboratorios han sido diseñados para que el interesado en PICAXE pueda entender su programación.  En esta recopilación encontraremos temas para implementar y diseñar sus propios proyectos con PICAXE, por lo tanto se explicarán algunos conocimientos básicos:

Circuitos base

Observa el circuito base de los distintos modelos de PICAXE desde su configuración de 8 a 20 pines, si deseas saber el circuito base para los de 28 y 40 pines revisa el manual 1 que trae el software de PICAXE.






Si tu PC no tiene puerto serial: puedes comprar un conversor de usb a serial y se conecta el cable serial que uno puede fabricar con un conector DB9, cable UTP, PICAXE utiliza un jack de audio para conectar,  pero yo prefiero tener los alambres libres sin conector para poderlo poner en el protoboard sin problemas.



Variables

En dispositivos PICAXE encontramos dos tipos de variables BYTE y WORD, una variable BYTE tiene 8 bits y una WORD es el conjunto de dos variables tipo BYTE.  Por ejemplo: w0 es el conjunto de b0 y b1, w1 es b2 y b3. Por lo que tenemos que tener claro que tipo de variable es la que necesitamos para cierta aplicación.

Configuración de puertos
Se debe revisar las configuraciones de los puertos de  cada uno de los modelos de PICAXE, ya que algunos tienen funciones especiales que solo esos pines la pueden realizar como: I2C(solo traen 2 pines SDA y SCL), ADC (la mayoria de puertos lo trae, pero no todos), PWM por hardware (especificamente de 1 a 3 pines según el modelo), puertos que solo son digitales, etc.  Observa la configuración de pines para el picaxe 8M2, 14M2, 18M2 y 20X2:






Conversor Análogo - Digital

Convierte una señal análoga a digital, puede utilizarse para una resolución de 8 o 10 bits, se aconseja proteger con hardware el puerto para evitar sobrevoltajes y dañarlo.

Laboratorios

Es recomendable que aparte que se hagan los laboratorios al pie de la letra, también cambien de puertos las salidas o entradas para poder adquidir la experiencia en el control de puertos. Para saber que hacen los comandos, les recomiendo leer el manual 2 de PICAXE, o puedes descargarlo desde aquí: PICAXE.

LABORATORIO 1 - semáforo:  Realizar un programa en lenguaje basic para el circuito mostrado abajo, el cual simule el funcionamiento de un semáforo con tiempos imaginarios.
  • do...loop: ciclo infinito el cual hace que el programa se repita, si no se coloca sólo se ejecuta 1 vez
  • low: asigna a un puerto definido un valor de 0 lógico como salida
  • high: asigna a un puerto definido un valor de 1 lógico como salida
  • pause: delay en ms.
  • for...next: ciclo definido
Materiales:

  • 1 PICAXE 20X2
  • 2 resistencias de 330 ohms
  • 1 resistencia 10kohms
  • 1 resistenca 22kohms
  • 3 LEDS (rojo, amarillo y verde)


CÓDIGO FUENTE:

do
high b.5
pause 3000
low b.5
high b.7
pause 4000
low b.7
pause 700
for b1=1 to 5
high b.6
pause 500
low b.6
pause 500
next b1
loop
También puedes utilizar el siguiente código, el cual te ayudará a entender el uso del comando "symbol".  El cual se utiliza para renombrar variables o constantes y hacerlas más faciles de recordar en la programación. No se utiliza el comando "symbol" en los demás laboratorios para efecto de demostraciónde programación pero te invito a que modifiques dichos laboratorios y apliques el comando symbol.

CÓDIGO FUENTE ALTERNO:

symbol rojo=b.5
symbol amarillo=b.6
symbol verde = b.7
do
 high rojo
 pause 3000
 low rojo
 high verde
 pause 4000
 low verde
 pause 700
 for b1=1 to 5
  high amarillo
  pause 500
  low amarillo
  pause 500
 next b1
loop


LABORATORIO 1a - semáforo:  Realizar un programa en lenguaje basic para el circuito mostrado abajo, el cual simule el funcionamiento de un semáforo con tiempos imaginarios.


Materiales:

  • 1 PICAXE 20X2
  • 2 resistencias de 330 ohms
  • 1 resistencia 10kohms
  • 1 resistenca 22kohms
  • 3 LEDS (rojo, amarillo y verde)


CÓDIGO FUENTE:

do
low b.5
pause 3000
high b.5
low b.7
pause 4000
high b.7
pause 700
for b1=1 to 5
low b.6
pause 500
high b.6
pause 500
next b1
loop


LABORATORIO 2 - ADC:  Realizar un programa en lenguaje basic para el circuito mostrado, el cual lea un valor  analógico en uno de sus puertos recibido por el potenciómetro e indique con 3 leds si es un nivel de voltaje alto (verde), medio (amarillo) o bajo(rojo) que recibe en su puerto.


Materiales:

  • 1 PICAXE 20X2
  • 2 resistencias de 330 ohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 Potenciometro 10 Kohms
  • 3 LEDS (rojo, amarillo y verde)


CÓDIGO FUENTE:

high b.5,b.6,b.7
do
readadc c.3,b1
if b1 < 86 then
low b.5
high b.6,b.7
endif
if b1 > 86 and b1 < 171 then
low b.6
high b.5,b.7
endif
if b1 < 170 then
low b.7
high b.6,b.5
endif
loop

LABORATORIO 3 - PWMRealizar un programa en lenguaje basic para el circuito mostrado, el cual lea un valor  analógico en uno de sus puertos recibido por el potenciómetro y atenue la intensidad lumínica de un led según sea el valor recibido del potenciómetro.
  • setfreq: asigna la frecuencia de trabajo del PICAXE
  • readadc: lee un valor análogo y lo convierte a digital con una resolución de 8 bits.
  • pwm: envia pulsos con ciclos de trabajo definido, es un comnado que rara vez se utiliza y compatible solo con algunos PICAXE, es recomendable usar este comando cuando necesitemos más pines de los que posee PICACE para hacer un PWM.

Materiales:

  • 1 PICAXE 20X2
  • 1 resistencia de 330 ohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 Potenciometro 10 Kohms
  • 1 LED rojo


CÓDIGO FUENTE:
setfreq m16
do
readadc b.6,b1
pwm b.7,b1,2
loop




LABORATORIO 4 - switch tipo toggle:  Realizar un programa en lenguaje basic para el circuito mostrado, el cual lea un valor  lógico 1 y luego 0  por medio de un interruptor.
  • input: define al puerto como entrada
  • output: define al puerto como salida
  • toggle: invierte el valor de la salida del puerto. Ej: si es 1 lo pasa a 0 y viceversa
Materiales:

  • 1 PICAXE 20X2
  • 1 resistencia de 330 ohms
  • 2 resistencias 10 Kohms
  • 1 resistencia de 1Kohms
  • 1 resistenca 22 Kohms
  • 1 Switch pulsador
  • 1 LED rojo
CÓDIGO FUENTE:
input c.2
output b.7
do
if pinc.2 = 1 then
pause 200
if pinc.2 = 0 then
toggle b.7
endif
endif
loop


LABORATORIO 4a - switch tipo toggle:  Realizar un programa en lenguaje basic para el circuito mostrado, el cual lea un valor  lógico 0 y luego 1  por medio de un interruptor.

Materiales:

  • 1 PICAXE 20X2
  • 1 resistencia de 330 ohms
  • 2 resistencias 10 Kohms
  • 1 resistencia de 1Kohms
  • 1 resistenca 22 Kohms
  • 1 Switch pulsador
  • 1 LED rojo
CÓDIGO FUENTE:
input c.2
output b.7
do
if pinc.2 = 0 then
pause 200
if pinc.2 = 1 then
toggle b.7
endif
endif
loop


LABORATORIO 5 - temperaturaRealizar un programa en lenguaje basic para el circuito mostrado, el cual lea la temperatura medida por el DS18B20 y envie el valor de la temperatura por medio de la comunicación serial a la PC.
  • readtemp: lee la temperatura de un DS18B20 y la guarda en una variable
  • sertxd: envia información a la PC por medio del cable de programación
Materiales:
  • 1 PICAXE 20X2
  • 1 resistencia de 330 ohms
  • 2 resistencias 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 DS18B20
CÓDIGO FUENTE:
do
readtemp c.6,b1
sertxd ("La temperatura es: ",#b1,13,10)
loop










LABORATORIO 6 - servomotorRealizar un programa en lenguaje basic para el circuito mostrado, el cual haga que un servomotor gire media vuelta y luego regrese al origen, el ciclo debe ser infinito.

  • servo: inicializa en el pin definido el servo y le dice donde posicionarse
  • servopos: después de inicializar se puede proceder a movilizar al servomotor con este comando, sus rangos son: mínimo 45 y máximo 225 (aproximadamente).
Materiales:
  • 1 PICAXE 20X2
  • 1 resistencia de 330 ohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 servomotor


CÓDIGO FUENTE:

servo b.7,75

b2=75
main:
if  b2 < 225 then
servopos b.7,b2
pause 200
b2=b2+10
endif
if  b2 > 225 then
servopos b.7,75
pause 200
b2=75
endif
goto main






LABORATORIO 6a - servomotorRealizar un programa en lenguaje basic para el circuito mostrado, el cual haga que un servomotor gire dependiendo de la cantidad que se gira un potenciómetro. Los límites de funcionamiento de dicho motor con respecto a su posición son: mínimo 45 y máximo 225 (aproximadamente).

Materiales:
  • 1 PICAXE 20X2
  • 2 resistencias de 330 ohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 potenciometro 10 Kohms
  • 1 servomotor

CÓDIGO FUENTE:

servo b.7,45

do
readadc c.7,b1
if b1 < 46 then
servopos b.7,45
endif
if b1 > 45 and b1 < 225 then
servopos b.7,b1
endif
if b1 > 225 then
servopos b.7,225
endif
loop




LABORATORIO 7 - sonidos morseRealizar un programa en lenguaje basic para el circuito mostrado, el cual haga piezo sounder produzca un sonido semejante al código morse. Utilizando los dos circuitos mostrados.
  • sound: produce pulsos para generar sonidos con un piezo sounder o una bocina.
Materiales:
  • 1 PICAXE 20X2
  • 1 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 transistor 1N2222
  • 1 diodo 1N4004
  • 1 piezo buzzer
  • 1 capacitor de .1uf 25V
CÓDIGO FUENTE:
setfreq m16
main:
for b1 = 0 to 2
sound B.7,(110,30)
pause 50
sound B.7,(110,30)
pause 150 next b1
sound B.7,(110,35)
pause 250
sound B.7,(110,80)
pause 250
goto main
 Circuito 1:

Circuito 2:


LABORATORIO 8 - sensor HallRealizar un programa en lenguaje basic para el circuito mostrado, el cual detecte un campo magnético por medio de un sensor de efecto Hall (A3144), apague el LED.

Materiales:
  • 1 PICAXE 20X2
  • 1 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 A3144
  • 1 LED rojo

CÓDIGO FUENTE:
input c.6
output c.2

do
    b1 = pinc.6
    if b1 = 1 then
        high c.2
    endif
    if b1 = 0 then
        low c.2
    endif
loop




LABORATORIO 9 - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y que cuente de 0 a 15 y muestre en binario el valor contado.
  • pinsX: con este comando le decimos al PICAXE que envie un valor al puerto definido en formato binario.

Materiales:
  • 1 PICAXE 20X2
  • 4 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 4 LEDs

CÓDIGO FUENTE:
output b.0,b.1,b.2,b.3
do

for b1 = 0 to 15

pinsb = b1

pause 750

next b1

loop




LABORATORIO 9a - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y que cuente de 0 a 15 cuando se presiona el interruptor y muestre en binario el valor contado.

Materiales:
  • 1 PICAXE 20X2
  • 5 resistencia de 1 Kohms
  • 2 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 Interruptor
  • 4 LEDs

CÓDIGO FUENTE:

output b.0,b.1,b.2,b.3
input c.0
do
if pinc.0 = 1 then
pause 80
if pinc.0 = 0 then
for b1 = 0 to 15
pinsb = b1
pause 750
next b1
endif
endif
loop

LABORATORIO 9b - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y que cuente de 0 a 255 y muestre en binario el valor contado.

Materiales:
  • 1 PICAXE 20X2
  • 8 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 8 LEDs

CÓDIGO FUENTE:
output b.0,b.1,b.2,b.3,b.4,b.5,b.6,b.7
do

for b1 = 0 to 255

pinsb = b1

pause 250

next b1

loop





LABORATORIO 9c - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y muestre en binario el valor leido por el ADC.

Materiales:
  • 1 PICAXE 20X2
  • 5 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 1 Potenciometro de 10Kohms
  • 4 LEDs

CÓDIGO FUENTE:
output b.0,b.1,b.2,b.3
do
readadc c.2,b1
pinsb = b1
pause 250
loop




¿Por qué muestra que se repite la secuencia de 0 a 15 varias veces? el comando readadc es un comando de 8 bits por lo tanto lee de 0 a 255 lo cual hace que varias veces se repita la secuencia de 0 a 15.

LABORATORIO 9d - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y despliegue valores aleatorios binarios (puede escoger los valores).

Materiales:
  • 1 PICAXE 20X2
  • 4 resistencia de 1 Kohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 4 LEDs

CÓDIGO FUENTE:

output b.0,b.1,b.2,b.3
do
    pinsb = 254
    pause 300
    pinsb = 001101
    pause 300
    pinsb = 001010
    pause 300
    pinsb = 000001
    pause 300
    pinsb = 0x0A
    pause 300
    pinsb = 0x00
    pause 300
    pinsb = 0x04
    pause 800
loop


LABORATORIO 9e - control de puertosRealizar un programa en lenguaje basic para el circuito mostrado, el cual controle el puerto del microcontrolador donde estan conectado los LEDs y que cuente de 0 a 9 y los despliegue en un display de 7 segmentos con un 4511B.

  • let dirsX: configura los pines del PICAXE para hacerlos salidas o entradas.

Materiales:
  • 1 PICAXE 20X2
  • 1 resistencia de 500 ohms
  • 1 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 4 LEDs

CÓDIGO FUENTE:
let dirsb = %11111111
do
for b1 = 0 to 9
let pinsb = b1
pause 1000
next b1
loop


LABORATORIO 10 - protocolo I2C: Realizar un programa en lenguaje basic para el circuito mostrado, el cual grabe por I2c a una memoria EEPROM dos valores 30 y 255 presionando dos interruptores (cada interruptor para cada uno de los valores) y que el otro PICAXE cuando se presione el interruptor si lee el la EEPROM 255 hará parpadear el LED.

  • hi2csetup: configura el protocolo I2C en donde se asigna si es maestro o esclavo, la dirección del maestro o del esclavo (por configurar el PICAXE como maestro se usa la dirección del esclavo), la velocidad de envio y en que empaquetado se envia (word o byte, depende del dispositivo I2C se define si es word o byte).
  • hi2cout: envia al número de registro del dispositivo el valor enviado entre paréntesis. 
  • hi2cin: lee en el registro asignado y lo almacena en una variable.

Materiales:
  • 2 PICAXE 20X2
  • 1 EEPROM 24LC256
  • 3 interruptores
  • 6 resistencia de 1 Kohms
  • 7 resistencia 10 Kohms
  • 2 resistenca 22 Kohms
  • 2 LEDs
 CÓDIGO FUENTE (maestro escribe):
hi2csetup i2cmaster, %10100000, i2cslow, i2cword
low c.7
main:
    if pinc.0 = 1 then
        pause 50
        high c.7
        hi2cout 0,(30)
        pause 80
        low c.7
    endif
    if pinc.2 = 1 then
        pause 50
        high c.7
        hi2cout 0,(255)
        pause 80
        low c.7
    endif
goto main
CÓDIGO FUENTE (maestro lee):
hi2csetup i2cmaster, %10100000, i2cslow, i2cword
main:
    if pinc.0 = 1 then
        pause 50
        hi2cin 0,(w1)
        if w1 = 255 then
            for b2 = 0 to 30
                toggle b.6
                pause 150   
            next b2
        endif
    endif
goto main


LABORATORIO 10a - protocolo I2C: Realizar un programa en lenguaje basic para el circuito mostrado, el cual grabe por I2c a una memoria EEPROM dos valores 30 y 255 presionando dos interruptores (cada interruptor para cada uno de los valores) y ese mismo PICAXE cuando se presione otro interruptor y lee en la EEPROM 255 hará parpadear el LED.

Materiales:
  • 1 PICAXE 20X2
  • 1 EEPROM 24LC256
  • 3 interruptores
  • 4 resistencia de 1 Kohms
  • 6 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 2 LEDs
CÓDIGO FUENTE:
hi2csetup i2cmaster, %10100000, i2cslow, i2cword
low c.7
main:
    if pinc.0 = 1 then
        pause 50
        high c.7
        hi2cout 0,(30)
        pause 80
        low c.7
    endif
    if pinc.2 = 1 then
        pause 50
        high c.7
        hi2cout 0,(255)
        pause 80
        low c.7
    endif
    if pinc.3 = 1 then
        pause 50
        hi2cin 0,(w1)
        if w1 = 255 then
            for b2 = 0 to 30
                toggle b.6
                pause 150   
            next b2
        endif
    endif
goto main


LABORATORIO 11 - interrupción: Realizar un programa en lenguaje basic para el circuito mostrado, el cual interrumpa el parpadeo de un LED utilizando una interrupción por Software. ¿Qué es una interrupción? el microcontrolador tiene la capacidad de analizar pines externos por  medio de un sub nucleo interno, para cuando suceda algún evento el microcontrolador sepa e interrumpe el programa original y hace ejecutar el cmando para la interrupción.

  • # picaxe 20x2: directiva que se emplea para decirle al software que debe grabarse el programa en un PICAXE 20X2.
  • setin: configura la interrupción por software, a este tipo de comando picaxe le llama "interrupción por arrastre" ya que antes de que se ejecute cada línea de comando se analiza el o los puertos en cuestión y ver si cumple con las condiciones, se recomienda al lector leer el Manual 2 de PICAXE sobre este tema.
  • interrupt: es la etiqueta por la cual se llamara la interrupción (es la asignada por PICAXE asi que no puede variarse), el subprocedimiento debe finalizarse repitiendo el comando setin (si no se agrega se desactivará la interrupción) y luego el comando "return".
  • return: hace regresar de un subprocedimiento al programa principal, si este comando se usa y no hay otro subprocedimiento creado al cual pueda estar ligado, el programa no marcara error pero cuando se ejecute, no funcionará correctamente.

Materiales:
  • 1 PICAXE 20X2
  • 1 interruptor
  • 3 resistencia de 1 Kohms
  • 2 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 2 LEDs

 CÓDIGO FUENTE:
# picaxe 20x2

setint 000100,000100,c
input c.2
output b.6
low c.7
do
    toggle b.6
    pause 150   
loop

interrupt:
    pause 10
    for b0 = 0 to 5
        pause 50
        high c.7
        pause 50
        low c.7
    next b0
    setint 000100,000100,c
    return


LABORATORIO 11a - interrupción: Realizar un programa en lenguaje basic para el circuito mostrado, el cual interrumpa el parpadeo de un LED utilizando una interrupción por Hardware.

  • hintsetup: comando para configurar los pines definidos para los PICAXE (únicamente PICAXE 20X2, 28X2 Y 40X2) y sus estados para interrumpir, se recomienda al lector leer más referente al tema de interrupciones por hardware en el manual 2 de PICAXE.
  • setintflags: crea interrupciónes en ciertas condiciones de las banderas, en el cual le indicamos que pin de interrupción se habilitará y su cndición.
  • interrupt: subprocedimiento con el cual inicia la interrupción, debe finalizarse con 4 comandos inicialización de la bandera de las interrupciones (hInt0Fla, hInt1Fla o hInt2Fla), hintsetup, setintflags y el comando return.
  • hInt1Fla: bandera la cual se tiene que inicializar a 0 después del subprocedimiento interrupt, cambia según el pin de interrupción que usamos (hInt0Fla, hInt1Fla y hInt2Fla).

Materiales:
  • 1 PICAXE 20X2
  • 1 interruptor
  • 3 resistencia de 1 Kohms
  • 2 resistencia 10 Kohms
  • 1 resistenca 22 Kohms
  • 2 LEDs

CÓDIGO FUENTE:
# picaxe 20x2

hintsetup 100010
setintflags 000010,000010
input b.0
output b.6, c.7
low c.7
do
    toggle b.6
    pause 150   
loop

interrupt:
    pause 10
    for b0 = 0 to 5
        pause 50
        high c.7
        pause 50
        low c.7
    next b0
     hInt1Flag = 0
     hintsetup   100010
     setintflags 000010, 000010
    return