torres.electronico
Well-known-Alfil
Bueno, les dejo un poco de información varia sobre los microcontroladores PICAXE para aquellos que no encuentren nada por ahi... y prometo tratar de actualizarlo de apoco...
Indice de este Post:
1_Intro a los PICAXE
2_Enlaces a paginas relacionadas con estos microcontroladores
3_Ejemplos Varios de Aplicacion con estos microcontroladores
1_Intro a los microcontroladores PICAXE
La empresa Revolution Education adquiere los pic y les graba un firmware en la memoria libre, de esta forma no necesita un programador especial para ser grabado, se puede programar por puerto serial y con protocolo rs232. Al picaxe se lo puede programar sin sacarlo del circuito, ademas viene en varias versiones de diferentes capacidades. Tambien es posible bajarse un lenguaje parecido al basic para hacer los programas de una manera bastante amigable.
El sistema "PICAXE" es un sistema de microcontrolador fácil de programar que utiliza un lenguaje BASIC muy simple,
el cual la mayoría de los estudiantes pueden aprender rápidamente. El sistema PICAXE explota las
características únicas de la nueva generación de microcontroladores de bajo costo FLASH. Estos microcontroladores pueden ser programados una y otra vez sin la necesidad de un costoso programador PIC.
El poder del sistema PICAXE radica en su sencillez. No necesita de ningún programador, borrador o complejo sistema electrónico - el microcontrolador es programado (con un simple programa en BASIC o un diagrama de flujo) mediante una conexión de tres alambres conectada al puerto serie del ordenador. El circuito operacional PICAXE utiliza únicamente tres componentes y puede ser ensamblado fácilmente en un tablero experimental para componentes electrónicos, en una placa corriente o en una placa PCB.
EL sistema PICAXE está disponible en dos variedades - 18 pines y 28 pines. El controlador PICAXE-28 provee 22 pines de entrada/salida (8 salidas digitales, 8 entradas digitales y 4 entradas analógicas). El sistema PICAXE-18 provee 8 salidas y 5 entradas.
Las características principales del sistema PICAXE son las siguientes:
· bajo costo, circuito de fácil construcción
· hasta 8 entradas, 8 salidas y 4 canales analógicos
· rápida operación de descarga mediante el cable serial
· Software "Editor de Programación" gratuito y de fácil uso
· lenguaje BASIC simple y fácil de aprender
· editor de diagramas de flujo incluido
· puede ser programado también mediante el software "Crocodile Technology"
· extenso número de manuales gratuitos y foro de apoyo en línea
· tablero experimental tutorial y tutoriales incluidos
· paquete de control remoto infrarrojo disponible
· paquete de servocontrolador disponible
ANEXO1: Comandos BASIC PICAXE para programacion:
COMENTARIOS
Usar comentarios. Aunque sea perfectamente obvio para ti, lo que estás escribiendo, alguien más puede leerlo (o tu mismo más tarde) y puede no tener idea de lo que habías hecho. Aunque los comentarios usan espacio en el archivo fuente, no lo hacen en el PICAXE. Haz que los comentarios te digan algo útil acerca de lo que el programa está haciendo. Un comentario como “poner a 1 el pin 0” simplemente explica la sintaxis del lenguaje, pero no te dice nada acerca de la necesidad de hacerlo. “Encender el LED de alarma” puede ser más útil.
Un bloque de comentarios en el comienzo del programa y antes de cada sección de código puede describir que sucederá con más detalle que un simple espacio después de cada línea. No incluyas un bloque de comentarios en lugar de comentarios individuales de línea. Usar ámbos. En el comienzo del programa que hará el programa, autor y fecha. Puede ser útil para listar informaciónes de revisión y fechas. Especificar las conexiones de cada pin puede ser útil para
recordar para que equipo en especial se programó.
Los comentarios comienzan con un apóstrofe (‘) o punto y coma ( y continúa hasta el final de la línea. La palabra clave REM también puede ser usada para comentarios.
Ejemplo:
high 0 ‘poner pin0 a nivel alto
high0 ;poner pin0 a nivel alto
Rem poner pin0 a nivel alto
SIMBOLOS
Los símbolos nemotécnicos son palabras clave que identifican constantes, variables y direcciones de programa.
La asignación del símbolo se realiza poniendo el nombre del símbolo seguido del símbolo igual (=) y posteriormente la variable o constante.
Los símbolos pueden ser cualquier palabra que no sea la relativa a un comando.
Los símbolos pueden contener carácteres numéricos (e.j.: flash1, flash2, etc.) Pero el primer carácter no puede ser uno numérico (e.j.: 1flash)
El uso de símbolos no aumentan la longitud del programa.
Las direcciones de programa son asignadas siguiendo el símbolo con dos puntos ).
Ejemplos:
symbol Led_Rojo = 7 ‘define Led-Rojo como una constante 7
symbol Contador = B0 ‘define Contador como una variable B0
let Contador = 200 ‘precarga de la variable Contador con el valor 200
inicio: ‘define una dirección de programa
high Led_Rojo ‘pone a nivel alto “1” la salida 7
pause Contador ‘espera de 0,2 segundos
low Led_Rojo ‘pone a nivel bajo “0” la salida 7
pause Counter ‘espera de 0,2 segundos
goto inicio ‘salta hasta la dirección indicada en inicio
CONSTANTES
Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser más
conveniente usar un nombre de constante en lugar de un número constante. Si el número
necesita ser cambiado, únicamente puede ser cambiado en un lugar del programa donde se
define la constante. No pueden guardarse datos variables dentro de una constante.
Las constantes declaradas pueden ser de cuatro tipos: decimal, hexadecimal, binario y ASCII.
Los números decimales se escriben directamente sin ningún prefijo.
Los números hexadecimales se preceden del símbolo dólar (&).
Los números binarios de preceden del símbolo tanto por ciento (%).
Los valores ASCII se colocan tre comilla (“…”).
Ejemplos:
100 ‘ número 100 en decimal
&64 ‘ número 64 en hexadecimal
%01100110 ‘ número binario: 01100110
“A” ‘ letra “A” en código ASCII (65)
“Hello” ‘ ”Hello” equivalente a “H”, “e”, “l”, “l”, “o”
B1 = B0 ^ $AA ‘ operación XOR entre la variable B0 com AA en hex
VARIABLES
Tipos según sistema:
A continuación se indican las variables que se aplican a cada modelo de programación:
· PICAXE es usado al programar módulos PICAXE.
· El BASIC y Extended son usados al programar módulos Stamp.
· El ensamblador es el utilizado con código de ensamblador.
PICAXE
El sistema PICAXE da soporte a las siguientes variables:
Words: W0, W1, W2, W3, W4, W5, W6
Bytes: DIRS, PINS (solo PICAXE-08), INFRA, KEYVALUE
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13
Bits: PIN0, PIN1, PIN2, PIN3, PIN4, PIN5, PIN6, PIN7 (conjuntamente igual PINS)
BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
In/Out añade los pseudo nombres:
INPUT0, INPUT1, etc. puede usarse en lugar de PIN0, PIN1, tec.
OUTPUT0, OUTPUT1, etc. puede usarse en lugar de 0, 1, 2, etc.
BASIC
El modo BASIC da soporte a las siguientes variables:
Words: PORT
W0, W1, W2, W3, W4, W5, W6
Bytes: DIRS, PINS
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13
Bits: DIR0, DIR1, DIR2, DIR3, DIR4, DIR5, DIR6, DIR7 (conjuntamente igual DIRS)
BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
Nota: B12 y B13 (W6) es usado dentro de las órdenes GOSUB como una pila. Por consiguiente no debería utilizarse como un registro de propósito general.
EXTENDED
El modo extendido da soporte a todas las variables de BASIC. Además:
INPUT0, INPUT1, etc . puede usarse en lugar de pin0, pin1 etcétera.
OUTPUT0, OUTPUT1, etc . puede usarse en lugar de 0, 1, 2 etcétera.
Nota: B12 y B13 (W6) es usado dentro de las órdenes GOSUB como una pila. Por consiguiente
no debería utilizarse como un registro de propósito general.
ENSAMBLADOR
El modo ensamblador soporta los mismos modelos de variables que el modo extendido.
RESUMEN DE COMANDOS (A-0)
Sistemas:
La siguiente tabla muestra los comandos que se aplican a los siguientes sistemas:
· El BASIC y Extended se usan al programar módulos Stamp.
· El PIC16F84A se usan al hacer un download directamente en un PIC16F84A
PIC16F627
· PICAXE se usa al programar módulos PICAXE
http://imageshack.us
RESUMEN DE COMANDOS (P-Z)
Sistemas:
La siguiente tabla muestra los comandos que se aplican a los siguientes sistemas:
· El BASIC y Extended se usan al programar módulos Stamp.
· El PIC16F84A se usan al hacer un download directamente en un PIC16F84A
PIC16F627
· PICAXE se usa al programar módulos PICAXE
http://imageshack.us
BACKWARD
BACKWARD motor, Hace que el motor conectado a la salida cambie de giro Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
BRANCH
BRANCH offset,(dirección0, dirección1….direcciónN)
Causa que el programa salte a una posición diferente, basada en una variable indexada. Es similar al ON…GOTO de otros BASIC. La etiqueta que especifica la dirección, debe estar en la misma página de código que la instrucción BRANCH.
- offset: es una variable/constante que especifica que dirección usar (0, 1…n)
- direcciones: son etiquetas que especifican donde ir
Ejemplo:
rest:
let infra = 0 ‘resetear la variable infra
inicio:
if infra > 0 then test
goto inicio ‘salta a test si la variable infra es > 0 si no vuelta a inicio
test:
branch infra, (btn0,btn1,btn2,btn3)
goto rest ‘ramifica a rutinas indicadas (btn0..btn3) si no
‘resetea saltando a rest
btn0: etc.
btn1: etc.
btn2: etc.
btn3: etc.
BUTTON
BUTTON Pin, Down, Delay, Rate, Bvar, Action, Etiqueta lee Pin y opcionalmente ejecuta anti-rebote y autoprotección. Pin automáticamente se toma como entrada. Pin debe ser una constante entre 0-15 o una variable que contenga
un número entre 0-15 (p.ej. B0) ó un número de pin (p.ej. PORTA,0)
- Down: estado del pin cuando se oprime el pulsador (0..1)
- Delay: contador de ciclos antes de que comience la auto-repetición (0..255). Si es 0, no se efectua anti-rebote ni auto-repetición. Si es 255 se eliminan rebotes, pero no auto-repitición
- Rate: valor de auto-repetición (0..255)
- Bvar: variable con tamaño de byte usada internamente para conteo de demoras y repeticiones. Debe ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa
- Action: estado del pulsador al ser actuado
- Etiqueta: la ejecución comienza en esta etiqueta si es cierto Action
Ejemplo:
inicio:
button 0,0,200,100,b2,0,cont ‘salta a cont a menos que pin0 = 0
toggle 1 ‘cambia el estado del pin1
cont:
COUNT
COUNT Pin, Period, Var Cuenta el número de pulsos en un Pin, durante un período Period, y guada el resultado
en Var. Pin
- Pin: debe ser una constante (0..7) ó una variable que contenga un número de 0 a 15 (p.ej. B0) ó un numero de pin
- Period: valor numérico (0..65535) en ms
- Variable: variable tipo word, recibe el valor del conteo (0..65535)
Chequea el estado de Pin mediante un bucle y cuenta las transiciones de bajo a alto. Con un oscilador de 4 MHz chequea el estado del pin cada 20 μs. Con un oscilador de 20MHz chequea el estado cada 4 μs. De esto, se deduce que la mayor frecuencia de pulsos que puede ser contada es de 25 KHz con un oscilador de 4 MHz y de 125KHz con un oscilador de 20 MHz si la frecuencia tiene un ciclo útil del 50% (los tiempos altos son iguales a los bajos).
Ejemplo:
inicio:
count 1, 500, w1 ‘cuenta los pulsos del pin1 en 5 segundos
debug w1 ‘viasualiza los valores
goto inicio ‘salta a inicio (bucle)
DEBUG
DEBUG Var Visualiza la información contenida en la variable Var en la ventana del depurador
durante la ejecución.
- Var: variable con un valor previamente cargado
Ejemplo:
inicio:
debug b1 ‘visualiza el valor de b1
let b1 = b1+1 ‘incrementa el valor de b1 en una unidad
pause 500 ‘espera de 0,5 segundos
goto inicio ‘salta a inicio (bucle)
EEPROM
EEPROM {location},(data,data,…) Guarda constantes en un chip EEPROM. Si se omite el valor opcional Location, la
primera declaración se guarda en la dirección 0 de la EEPROM y las subsiguientes en las siguientes direcciones del mismo. Si se indica un valor Location, éste indica la dirección de comienzo para guardar los datos..
- Location: es una constante numérica (0..255) que especifica donde empezar a almacenar los datos en la EEPROM. Si no existe una posición indicada el almacenamiento continúa a partir del último dato introducido. Si inicialmente no se
especificó ninguna posición el almacenamiento comienza en la 0.
- Data: son constantes (0..255) que se almacenan en la EEPROM.
EEPROM solo trabaja con microcontroladores con EEPROM incorporado como el PIC16F84 y PIC16C84 , PICAXE-18A, 28, 28A, 28X. Dado que la EEPROM es una memoria no volátil, los datos permanecerán intactos aún sin alimentación.
Los datos se guardan en la EEPROM solo una vez, cuando el microcontrolador es programado, no cada vez que se ejecuta el programa. Se puede usar WRITE para colocar valores en la EEPROM en el momento de la ejecucuión.
Ejemplo:
EEPROM 5, (10,20,30) ‘guarda 10, 20, 30 a partir de la dirección 5
EEPROM 0, (“Hello Word”) ‘guarda el valor ASCII
END
End Detiene la ejecución del proceso y entra en modo de bajo consume. Todos los pins de I/O permanecen en el estado en que se encuentran. END trabaja ejecutando una instrucción SLEEP continua dentro de un bucle.
Un END, STOP ó GOTO deben ser colocados al final de un programa para evitar pasar del límite de la misma u comience nuevamente.
Ejemplo:
inicio:
let b2 = 15 ‘set b2 con valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
let b2 = 5 ‘set b2 con valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
end
flash:
for b0 = 1 to b2 ‘define el bucle con el valor b2
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
return ‘retorno a linea siguiente de la llamada
FOR...NEXT
FOR contador = start TO end {STEP {-} inc} {body}
El bucle FOR … NEXT permite a los programas ejecutar un número de declaraciones {body} un número de veces, usando una variable como contador. Debido a su complejidad y versatilidad, es mejor describirla paso a paso. El valor de start se asigna a la variable índice: count, que puede ser una variable de cualquier tipo. Se ejecuta las instrucciones de body. Body es opcional y puede ser omitido (quizás por un bucle de demora). El valor de inc es sumado a (ó restado si se especifica “-“) count. Si no se define un valor steep, se incrementa count en una unidad. Si count no pasó end ó desbordó el tipo de variable, la ejecución vuelve al paso 2.
Si el bucle necesita contar más de 255 (count > 255), se debe usar una variable de tamaño Word.
Ejemplo:
bucle:
for b0 = 1 to 20 ‘define el bucle con repetición de 1 a 20
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
pause 2000 ‘espera de 2 segundos
goto bucle ‘salta a bucle para comienzo de nuevo
FORWARD
FORWARD motor Arranca motor hacia delante
- Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
GOSUB
GOSUB etiqueta Salta a la subrutina indicada en etiqueta, guardando su dirección de regreso en la pila (snack). A diferencia del GOTO, cuando se llega a un RETURN, la ejecución sigue con la declaración siguiente al último GOSUB ejecutado. Se puede usar un número ilimitado de subrutinas en un programa y pueden estar anidadas. En otras palabras, las subrutinas pueden llamar a otra subrutina. Cada anidamiento no debe ser mayor de cuatro niveles.
Ejemplo:
inicio:
let b2 = 15 ‘set b2 con valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
let b2 = 5 ‘set b2 con valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
end
flash:
for b0 = 1 to b2 ‘define el bucle con el valor b2
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
return ‘retorno a linea siguiente de la llamada
GOTO
GOTO etiqueta La ejecución del programa continua en la declaración de la etiqueta.
Ejemplo:
inicio:
high 1 ‘salida 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘salida 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio
HALT
HALT motor Para el motor indicado
Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
HIGH
HIGH pin Pone a nivel alto el pin especificado y lo convierte automáticamente en salida. Pin puede ser una constante, 0 – 7, ó una variable que contenga un número de 0 – 7 (p. ej. B0) ó un número de pin (p. ej. PORTA.0)
Ejemplo:
bucle:
high 1 ‘pone salida 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone la salida 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto bucle ‘salta a comienzo de bucle repetitivo
i2cslave
I2CSLAVE esclavo, velocidad, dirección El comando i2cslave se utiliza para configurar los pines del PICAXE y definir el
tipo de i2c. Si se utiliza únicamente un dispositivo i2c, entonces generalmente solo se necesita una orden i2cslave dentro del programa.
Esclavo: es la dirección del esclavo i2c.
Velocidad: marca la velocidad de transmisión. I2cfast: 400KHz o I2cslow:
100KHz.
Dirección: es el i2cbyte o i2sword que indica la dirección a partir de la cual se guardará la información.
Después de que se utilice el comando i2cslave, se pueden utilizar los comandos readi2c y writei2c para acceder al dispositivo i2c. Se pueden utilizar para leer y grabar datos de una EEPROM serie usando un interface i2c de 2 hilos, como la 24LC01B ó similar. Esto permite guardar datos en una memoria externa no volátil, para que sean mantenidos aún sin conexión de alimentación. Tambie´n se utilizan para poder comunicarse con otros dispositivoscon interface i2c, como sensores de temperatura y convertidores A/D.
Dirección esclavo
La dirección del esclavo cambia para dispositivos diferentes del i2c.
Para las EEPROM del tipo 24LCxx la dirección es %1010xxxx.
Velocidad
La velocidad del bus i2c se selecciona a través de los comandos i2cfast para
velocidad de 400KHz y i2cslow para 100 KHz.
Dirección control
Los 7 bits superiores del byte de control contienen el código de control junto con la selección del chip e información adicional de dirección, dependiendo de cada dispositivo. El bit inferior es una bandera interna que indica si es un comando de lectura ó escritura y no se debe usar.
Por ejemplo, cuando comunicamos con un 24LC01B, el código de control es %1010 y no se usa la selección de chip, por lo que el byte de control será %10100000 ó $A0. Algunos formatos de control se pueden ver en la siguiente
tabla:
http://imageshack.us
El tamaño de dirección enviado (byte o Word) viene determinado por el tamaño de la variable usada. Si se usa una variable con tamaño byte se envía una dirección de 8 bits. Si se envía una variable de tamaño Word, se envía una
dirección de 16 bits. Asegurarse de utilizar una variable apropiada al dispositivo a comunicar.
http://imageshack.us
if…then
if…and…then
if…or…then
IF variable ? valor {AND/OR variable ? valor …} THEN etiqueta Estructura de comparación condicional con salto a una dirección determinada (etiqueta) en caso de que se cumpla.
?: condicional =, <>, >=, <=, >, <
Variable: valor de la comparación
Valor: variable constante
Etiqueta: dirección del salto en caso de cumplir el condicional
Efectúa una o más comparaciones. Cada término variable puede relacionar un valor con una constante ú otra variable e incluye uno de los operadores listados anteriormente.
IF…THEN evalúa la comparación en términos de CIERTO o FALSO. Si lo considera cierto, se ejecuta la operación posterior al THEN. Si lo considera falso, no se ejecuta la operación posterior al THEN. Las comparaciones que dan
0 se consideran falso. Cualquier otro valor es cierto.
Ejemplo:
inicio:
if pin0 = 1 then flash ‘salta a flash si el valor del pin0 es un 1
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a valor alto la salida 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a valor bajo la salida 1
goto inicio ‘salto a inicio
INFRAIN
Espera hasta que una señal de infrarrojos sea recibida. Este comando se utiliza para esperar una señal infrarrojo nueva procedente del transmisor de infrarrojos (utiliza el protocolo de Sony). El programa se detiene hasta que reciba la señal infrarroja. El valor de la orden recibida se almacena en la variable predefinida “infra”.
Ejemplo:
Inicio:
infrain ‘espera una nueva señal infrarroja
if infra = 1 then swon1 ‘si el valor de infra es 1 salta a swon1
if infra = 2 then swon2 ‘si el valor de infra es 1 salta a swon2
if infra = 3 then swon3 ‘si el valor de infra es 1 salta a swon3
if infra = 4 then swoff1 ‘si el valor de infra es 1 salta a swoff1
if infra = 5 then swoff2 ‘si el valor de infra es 1 salta a swoff2
if infra = 6 then swoff3 ‘si el valor de infra es 1 salta a swoff3
goto inicio
swon1:
high 1
goto inicio
swon2:
high 2
goto inicio
swon3:
high 3
goto inicio
swoff1:
low1
goto inicio
swoff2:
low2
goto inicio
swoff3:
low3
goto inicio
INPUT
Convierte el Pin especificado en una entrada. Pin debe ser una constante entre 0–7, o una variable que contenga un número 0-7 (p. ej.: B0) o el nombre de un pin (p. ej.: PORTA.0)
Ejemplo:
inicio:
input 1 ‘configura el pin1 como entrada
reverse 1 ‘configura el pin 1 como salida
reverse 1 ‘configura el pin1 como entrada
output1 ‘configura el pin1 como salida
LCD ({#}dato,{#}dato…)
LCD clear
LCD line1
LCD line2
Comando para controlar el módulo LCD con salida serie conectado al pin 7.
Clear: borra la pantalla LCD.
Line1 osiciona el cursor en la linea 1 para comenzar la escritura de dato.
Line2: posiciona el cursor en la linea 2 para comenzar la escritura de dato.
Dato: variable/constante (0-255) que se envían a la salida.
Este seudo comando realmente analiza gramaticalmente comandos serout. Equivale en BASIC a serout 7, T2400, (datos).
Muestra ítems en un LCD con controlador Hitachi 44780 o equivalente. Estos LCD, usualmente, tienen un cabezal de 14 o 16 pines simples o duales en un extremo. Si el signo (#) está colocado antes de un item, la representación ASCII para cada digito es enviada al LCD. Un programa debe esperar, por lo menos, medio segundo antes de enviar el primer
comando a un LCD. Puede tomar bastante tiempo a un LCD arrancar. Los comandos son enviados al LCD, enviando un $FE seguido por el comando.
Algunos comandos útiles se muestran en la siguiente tabla:
http://imageshack.us
Ejemplo:
inicio:
LCD (“hola”) ‘escribe en el LCD la palabra “hola”
LCD line2 ‘posiciona cursor en la linea 2
LCD (“ amigo”) ‘escribe en el LCD la palabra “amigo”
pause 2000 ‘espera 2 segundos
LCD clear ‘borra contenido LCD
pause 500 ‘espera de 0,5 segundos
goto inicio ‘salta a inicio
LET
{LET} variable = {-}valor ? valor … Asigna un valor a una variable. El valor puede ser una constante, otra variable o el
resultado de una expresión. La palabra clave LET, por sí misma, es opcional.
? puede ser:
+ ;add
- ;subtract
* ;multiply (returns low word of result)
* * ;multiply (returns high word result)
/ ;divide (returns quotient)
// ;divide (returns remainder)
MAX ;make less than or equal to
MIN ;make greater than or equal to
& ;and
| ;or (typed as SHIFT + \ on UK
^ k;xeoyrb o a r d ()t yped as SHIFT + 6 on UK
&/ ;and not (nand)
|/ ;or not (nor)
^/ ;xor not (xnor)
Ejemplo:
inicio:
let b0 = b0 + 1 ‘incrementa b0 en una unidad
sound 7, (b0,50) ‘emite sonido
if b0 > 50 then reset ‘si la variable es superior a 50 salta a reset
goto inicio ‘sino a inicio
reset:
let b0 = b0 max 10 ‘resetea b0 con un valor 10 y 10 es el máximo valor
goto inicio
LOOKDOWN
LOOKDOWN target,(valor0,valor1…valorN),variable La declaración LOOKDOWN busca en una lista de 8 bits los valores (value0…valueN) que coincidan con un valor target. Si se encuentra, el índice de la constante es almacenado en variable así, si el valor es el primero de la lista, variable = 0. Si es el segundo, variable = 1 y así sucesivamente. Si no se encuentra, no se toma ninguna acción y variable permanece sin cambios.
Ejemplo:
serin 1,N2400,b0 ‘obtiene un carácter hex de pin1 en
‘forma serie
lookdown bo,(“0123456789ABCDEF”),b1 ‘convierte el character hex en b0 a un
‘valor decimal b1
serout 0,N2400,[#b1] ‘envía un valor decimal al pin0 de
‘forma serie
Otro ejemplo:
reset:
let infra = 0 ‘resetea la variable infra
inicio:
if infra > 0 then test ‘salta a reset si se detecta una nueva señal
goto inicio ‘sino salta a inicio
test:
lookdown infra, (“1234”),b0 ‘mete el carácter ASCII 1 a 4 en b0
LOOKUP
LOOKUP offset,(dato0,dato1…datoN),variable LOOKUP puede ser usado para obtener valores de una tabla de constantes de 8 bits. Si offset es cero, variable toma el valor del primer dato (dato0). Si es 1, variable toma el valor del segundo dato (dato1) y así sucesivamente. Si offset es mayor ó igual que el número de entradas en la lista de constantes, no se toma ninguna acción y variable permanece sin cambios.
Ejemplo:
for b0 = 0 to 5 ‘cuenta hasta 5
lookup b0,(“hola”),b1 ‘obtiene el carácter b0 de la serie y lo deja en b1
serout 0,N2400,[b1] ‘envía el carácter b1 al pin0 de forma serie
Otro ejemplo:
inicio:
let b0 = 0 b0 + 1 ‘incrementa b0 en una unidad
lookup b0,(“1234”),b1 ‘mete el carácter ASCII 1 a 4 en b1
if b0 < 4 then inicio ‘si b0 es menor que 4 salta a inicio
end ‘sino fin de programa
LOW
LOW pin Coloca el pin especificado en valor bajo y automáticamente lo convierte en salida. Pin puede ser una variable/constante de 0-7.
Ejemplo:
inicio:
high 1 ‘pone el pin 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone el pin 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio del bucle
NAP
NAP periodo Coloca al microcontrolador en modo de bajo consumo por períodos de tiempo reducidos. Durante este NAP, se reduce al mínimo el consumo de energía. Los períodos indicados son solo aproximados, porque el tiempo se deriva del Watchdog Timer que está controlado por R/C y puede variar de chip a chip y también con la temperatura.
Como NAP usa el Watchdog Timer es independiente de la frecuencia del oscilador.
Periodo: constante entre 0-7.
El número de períodos está limitado a 7 y el tiempo correspondiente a cada período sigue la formula: (2periodo)x 18 ms
http://imageshack.us
Ejemplo:
inicio:
high 1 ‘pone salida pin1 a nivel alto
nap 4 ‘estado de bajo consumo durante: (24)x18ms = 288 ms
low 1 ‘pone salida 1 a nivel bajo
nap 7 ‘estado de bajo consumo durante: (27)x18ms = 2304 ms
goto inicio ‘salta a inicio
OUTPUT
OUTPUT pin Convierte el Pin especificado en una salida. Pin debe ser una constante entre 0–7, o una variable que contenga un número 0-7 (p. ej.: B0) o el nombre de un pin (p. ej.: PORTA.0)
Ejemplo:
inicio:
input 1 ‘configura el pin1 como entrada
reverse 1 ‘configura el pin 1 como salida
reverse 1 ‘configura el pin1 como entrada
output1 ‘configura el pin1 como salida
PAUSE
PAUSE periodo Detiene el programa por periodo milisegundos. Periodo tiene 16 bits, por lo que los retardos pueden ser hasta 65635 milisegundos (un poco más de un minuto). No coloca al microcontrolador en modo de bajo consumo como las otras funciones de retardo (NAP y SLEEP). Inclusive, consume mayor consumo, pero es más exacto. Tiene la
misma precisión que el clock.
Ejemplo:
inicio:
high 1 ‘pone el pin 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone el pin 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio del bucle
PEEK
PEEK direccion,variable Lee el registro del microcontrolador en la dirección y guarda la lectura en variable.
Direccion: variable/constante que especifica la dirección del registro. Valores válidos entre 0-255.
Variable: variable donde se guarda el dato del registro.
Esto permite el uso de registros no definidos por b0-b13. Es necesario tener precauciones en el uso de este comando. Para programadores inexpertos se recomienda el uso de los registros localizados entre $50 a $7F, que son registros de uso general.
Los registros indicados entre las direcciones $00 a $1F y $80 a $9F, son de función especial, que determinan como funciona el microcontrolador. Evitar el uso de estos registros a no ser que se sepa bien lo que se hace.
Las direcciones $20 a $7F y $A0 a $BF apuntan a registros de propósito general reservados para para el intérprete de instrucciones PICAXE. El uso de esos registros puede dar resultados inesperados y podría causar la no interpretación de instrucciones.
Utilizar los registros apuntados por las direcciones que van desde $50 a $7F (registros de propósito general) y de $C0 a $FF en el caso de PICAXE-28x.
Ejemplo:
peek 80,b1 ‘carga el contenido del registro apuntado por la dirección 80 en
‘la variable b1
peek, PORTA,b0 ‘toma el estado actual de PORTA y lo coloca en b0
POKE
POKE direccion,variable Guarda el valor de variable en el registro del microcontrolador indicado en dirección.
Direccion: variable/constante que especifica la dirección del registro. Valores válidos entre 0-255.
Variable: variable que contiene el dato a cargar en el registro especificado.
Lo indicado en el comando peek es válido para el comando poke, en cuanto a las precauciones a tomar en su uso.
Ejemplo:
poke 80,b1 ‘guarda el valor de b1 en el registro 80
poke $85,0 ‘guarda 0 en el registro 85 en hexadecinal (set todo
‘PORTA como salidas)
Se puede acceder directamente a registros y bits sin necesidad de utilizar PEEK
y POKE. Se recomienda usar el acceso directo y no los comandos mencionados.
TRISA = 0 ‘set todo PORTA como salidas
PORTA.0 = 1 ‘set a nível alto el bit 0 de PORTA
PULSIN
PULSIN pin,state,variable Mire el ancho del pulso en pin. Si state es cero se mide el ancho de un pulso bajo. Si
state es uno, se mide el ancho de un pulso alto. El ancho medido se coloca en variable. Si el flanco del pulso no llega, ó el ancho del pulso es demasiado grande para ser medido, variable = 0. Si se usa uma variable de 8 bits, solo se usan los bits menos significativos de la medición de 16 bits.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
State: variable/constante (0 o 1). Configura el tipo de pulso a medir en unidades de 10μs (para um cristal de 4MHz).
Variable: variable (1-65536) que contiene el dato a cargar en el registro especificado. Si el intervalo de espera ocurre (.65536s), entonces el resultado será 0.
La resolución de PULSIN depende de la frecuencia del oscilador. Si se usa un oscilador de 4 MHz, el ancho de pulso se obtiene en incrementos de 10μs. Si se usa un oscilador de 20 MHz, el ancho de pulso tendrá una resolución de 2μs. Definir un valor de OSC no tiene efectos sobre PULSIN. La resolución siempre cambia con la velocidad del
oscilador en uso.
Ejemplo:
pulsin 3,1,b1 ‘guarda la longitud del pulso introducido en el pin 1 en la variable b1
PULSOUT
PULSOUT pin,periodo Genera un pulso en pin, con un periodo especificado. El pulso se genera activando dos
veces el pin, por lo que la polaridad del pulso depende del estado inicial del pin.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
Período: variable/constante que especifica el período (0-65535)em unidades de 10μs (para um cristal de 4MHz).
La resolución de PULSOUT depende de la frecuencia del oscilador. Si se usa un oscilador de 4 MHz, el período del pulso generado estará en incrementos de 10μs. Si se usa un oscilador de 20 MHz, período tendra una duración de 2μs. Definir un valor de OSC no tiene efectos sobre PULSOT. La resolución siempre cambia con la velocidad del oscilador en uso.
Ejemplo:
inicio:
pulsout 4,150 ‘envía un pulso por el pin 4 de 1,5 ms de duración
pause 20 ‘pausa de 20 ms
goto inicio ‘salta a inicio y repite formando un bucle
PWM
PWM pin,duty,cicle Envía un tren de pulsos modulados en ancho por el pin indicado. Cada ciclo de PWM está compuesto de 256 pasos. El ciclo útil duty para cada ciclo varía de 0 (0%) a 255 (100%). El ciclo PWM es repetido cycle veces.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
Duty: variable/constante (0-255)especificando el ciclo útil que puede varíar de 0 (0%) a 255 (100%).
Cycle: variable/constante (0-255) que especifica el número de ciclos que se
repetirá.Cada ciclo tiene un período de 5 ms (con un cristal de 4MHz). Cycle depende de la frecuencia del oscilador. Con un oscilador de 4 MHz, cada cycle será de aproximadamente 5 ms de largo. Con un oscilador de 20 MHz la duración del ciclo será de 1 ms aproximadamente. Definir un valor de OSC no tiene efecto sobre PWM. El tiempo de cycle siempre cambia con la velocidad del oscilador en uso.
Pin se convierte en salida justo antes de la generación del pulso y vuelve a ser entrada, cuando cesa. La salida de PWM en un pin tiene mucho ruido, y no tiene forma de onda cuadrada. Es necesario usar algún tipo de filtro para convertirla en algo útil. Un circuito R/C puede usarse como un simple convertidor A/D.
Ejemplo:
inicio:
pwm 4,127,20 ‘envía 20 pulsos por el pin 4 con un ciclo útil del 50%
pause 20 ‘pausa de 20 ms
goto inicio ‘salta a inicio
PWMOUT
PWMOUT pin,period,duty cycles Genera una salida contínua de pwm usando el módulo interno del pwm del
microcontrolador. Esta orden es diferente de otras ordenes semejantes de BASIC, el pwmout funciona
contínuamente hasta que otra orden de pwmot sea indicada. Por ello puede usarse, por ejemplo, para controlar la velocidad de un motor. Para deterner la orden pwmout, enviar otra orden con un period = 0.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará (siempre 3 con 18X, 2 com 08M y 1 o 2 com el 28X/40X.
Period: variable/constante (0-255)especificando el período del pulso.
Duty: variable/constante (0-1023)especificando el ciclo de trabajo the la señal pwm.
http://imageshack.us
El pwm duty cycle = (duty) x resonador speed
Notar que el valor de period y el valor de duty siguen la ecuación indicada anteriormente. Si desea una relación de 50:50 mientras se incrementa el período, entonces debe aumentar el valor del ciclo de trabajo apropiadamente.
Un cambio de la velocidad del oscilador cambiará la fórmula.
La frecuencia del pwm = 1/(period pwm).
Como el comando utiliza el módulo interno del pwm del microcontrolador, hay ciertas restricciones para su uso:
1. El comando solo funciona con ciertos pines de los microcontroladores:
· 28X/40X (1 y 2)
· 18X (3)
· 08M (2)
2. Duty cycles es un valor de 10 bits (0 a 1023).
3. El comando servo no se puede usar al mismo tiempo que el comando
pwmout dado que utilizan la misma señal de reloj.
4. Pwmout deja de funcionar durante las ordenes de , nap, sleep o end.
Ejemplo:
inicio:
pwmot 2,150,100 ‘set pwm
pause 1000 ‘pausa de 1s.
goto inicio ‘salta a inicio
RANDOM
RANDOM variable Efectúa una iteración pseudos-aleatoria en variable.
Variable: variable de 16 bits donde se almacena el número aleatorio.
El algoritmo pseudoaleatorio usado tiene un paso de 65535 (el único número que no produce es el cero).
Ejemplo:
inicio:
random b1 ‘carga en la variable b1 un valor aleatorio
let pins = b1 ‘pone el valor aleatorio en la salida pins
pause 100 ‘espera de 0,1 s
goto inicio ‘salta a inicio
READADC
READADC canal,variable El contenido del convertidor A/D (8 bits de resolución) indicado por canal es
almacenado en variable.
Canal:variable/constante que especifica el canal (0-3)
Variable: variable donde se almacena el byte leido.
Ejemplo:
inicio:
readadc 1,b1 ‘lee el valor y lo almacena en b1
if b1 > 50 then flash ‘salta a flash si b1 > 50
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a nivel alto el pin 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a nivel bajo la salida 1
goto inicio ‘salto a inicio
readadc10
READADC canal,wordvariable El contenido del convertidor A/D (10 bits de resolución) indicado por canal es
almacenado en variable.
Canal:variable/constante que especifica el canal (0-3)
Wordvariable: variable tipo Word donde se almacena los bytes leidos.
Ejemplo:
inicio:
readadc 1,w1 ‘lee el valor y lo almacena en w1
if w1 > 50 then flash ‘salta a flash si b1 > 50
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a nivel alto el pin 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a nivel bajo la salida 1
goto inicio ‘salto a inicio
readi2c
READI2C location,(variable,…)
Lee el i2c indicado en location y lo almacena en variable(s).
location: variable/constante que especifica la dirección mediante un byte del tipo Word la dirección del i2c.
Variable(s): donde se almacenan los byte(s) del dato leído.
Este comando se usa para leer los datos de byte de un dispositivo i2c.
Location define la dirección de inicio de la lectura de datos, aunque se logra también leer más de un byte secuencialmente (si el dispositivo i2c da soporte a lecturas secuenciales).
Location debe ser un byte que defina al 12cslave. Un comando del 12cslave tiene que haberse ejecutado con anterioridad de la ejecución del readi2c. Si el hardware del i2c no fue configurado de forma correcta o el byte de localización no es el adecuado el valor almacenado en la variable será 255 ($FF) indicándonos un error.
Ejemplo:
‘Un ejemplo de cómo usar el time clock DS1307
‘los datos son enviados/recibidos en código BCD
‘coloca la dirección del esclavo del DS1307
12cslave %11010000, i2cslow, i2cbyte
‘lectura de la hora y fecha y presenta en el depurador
inicio:
readi2c 0, (b0,b1,b2,b3,b4,b5,b6,b7)
debug b1
pause 2000
goto inicio
READ
READ location,variable Lee la EEPROM incorporada en la dirección location, y guarda el resultado en
variable.
location: variable/constante que especifica la dirección mediante un byte (0-255).
Variable: donde se almacena el byte leído.
Al usar los módulos Stamp, la forma de almacenar los datos es desde la posición 0 hacia arriba mientras que el almacenamiento de programa se construye hacia abajo desde la posición 255. Al usar el PICAXE-08 y 18el almacenamiento de datos se construye hacia arriba desde la posición 0y el almacenamiento de programa es hacia abajo desde la
posición 127.
Ejemplo:
inicio:
for b0 = 0 to 63 ‘inicio el bucle
read b0,b1 ‘lee el dato de la memoria en la posición de bo y
‘almacena su valor en b1
serout 7,T2400,(b1) ‘transmite el valor del dato de b1 al LCD utilizando
‘transmisión serie
next b0
READMEM
READMEM location,variable Lee la memoria de programa FLASH en la posición location y lo vuelca en variable.
Provee un espacio adicional de 256 bytes de almacenamiento para este comando en los dispositivos PIC 16F87x (incluyendo a PICAXE-28, 28ª). Este comando no está presente en el PICAXE-28X como el módulo del i2c puede servir para EEPROMs externas mayores.
location: variable/constante que especifica la dirección mediante un byte (0-255).
Variable: donde se almacena el byte leído.
Ejemplo:
inicio:
for b0 = 0 to 255 ‘inicio el bucle
read b0,b1 ‘lee el dato de la memoria en la posición de bo y
‘almacena su valor en b1
serout 7,T2400,(b1) ‘transmite el valor del dato de b1 al LCD utilizando
‘transmisión serie
next b0
readtemp/readtemp12
READTEMP pin,variable
READTEMP pin,wordvariable
Lee la temperatura de un DS18B20, sensor digital de temperatura, conectado en pin y almacena su lectura en variable.
Pin: es el pin de entrada del PICAXE que tiene conectado el sensor.
Variable: donde se almacena el byte leído.
READTEMP: la resolución de la lectura es de enteros de grado, y el sensor funciona de -55 ºC hasta +125 ºC. El bit 7 indicará si los valores de temperatura son positivos (0) o negativos (1).
READTEMP12: (para programadores avanzados). La temperatura viene expresada con una resolución de 0,125 ºC y necesita 12 bits para su representación digital. El usuario debe interpretar los datos a través de cálculo matemático. Ver el dataste del DS18B20 (www.dalsemi.com) para más información en relación con Data Temperatura.
Ejemplo:
inicio:
readtemp 1,b1 ‘lee el valor del sensor en pin 1 y lo almacena en b1
if b1 > 127 then neg ‘chequeo si el valor medido es negativo
serout, 7, T2400, (#b1) ‘transmite el valor al LCD en formato serie
goto inicio ‘salta a inicio
neg:
let b1 = b1 – 128 ‘ajuste del valor negativo en b1
serout 7,T2400, (“-“) ‘transmite el símbolo negativo
serout 7,T2400, (#b1) ‘transmite el valor al LCD en formato serie
goto inicio
http://imageshack.us
READOWCLK
Lectura de la hora indicada por un reloj de precisión DS2415 conectado en la entrada especificada por pin.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor. Este comando no esta disponible en el PICAXE-28X pero puede usarse un DS1307, reloj de precisión en tiempo real por i2c.
El DS2415 es un reloj en tiempo real de precisión que opera con una única línea. La información está contenida en 4 bytes (32 bits) y es muy preciso debido al uso de un cristal de cu¡arzo como clock del C.I. El registro de 32 bits puede aportar la información de 132 años en segundos. El dispositivo puede estar alimentado de forma independiente con 3 V. de forma que pueda trabajar aún cuando el controlador principal con el PICAXE esté parado. Si se utiliza ésta opción se debe utilizar la orden RESETOWCLK para activar el reloj de nuevo y de esta forma arrancar el reloj en tiempo real.
El comando READOWCLK lee los 32 bits del reloj y guarda el contenido de los 32 bits en la variable b10 (LBS) a b13 (MBS), también conocidas como w6 y w7.
Usando variables tipo byte:
o El valor b10 es el número de segundos
o El valor b11 es el número x 256 segundos
o El valor b12 es el número x 65536 segundos
o El valor b13 es el número x 16777216 segundos
Usando variables tipo Word:
o El valor en w6 es el número de segundos
o El valor en w7 es el número x 65536 segundos
Ejemplo:
inicio:
resetowclk 2 ‘reset el reloj en pin 2
bucle:
readowclk 2 ‘lectura del reloj en pin de entrada 2
debug b1 ‘visualiza el tiempo en depurador
pause 10000 ‘espera de 10 segundos
goto bucle ‘repetición de lectura y presentación
RESETOWCLK
Resetea el reloj DS2415, es decir pone a cero su contador.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor
Este comando pone a cero el tiempo en un chip reloj tipo DS2415 que está conectado a un pin de salida del PICAXE. También activa el cristal del reloj. Debe usarse al comienzo de cada conteo. El método de conexionado del reloj de precisión con el PICAXE se muestra a continuación:
http://imageshack.us
READOWSN
Lectura serie de cualquier dispositivo Dallas 1-wire, conectado en el pin de entrada especificado por pin.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor.
Este comando lee el valor de cualquier dispositivo Dallas de un Terminal i/o de comunicación (1-wire) que esté conectado al PICAXE en una de sus pines (especificado por pin), por ejemplo, sensor digital de temperatura: DS18B20, reloj de precisión:
DS2415, iButton: DS1990A (http://www.esicomsa.com/product_1.html).
Al usar un dispositivo iButton cuyo número serie está grabado en el chip que contiene la envoltura del iButton y ejecutar el comando readowsn se realizará la lectura del número seie y guardará el código indicador de la familia en b6, el número de serie en b7..b12 y la suma de verificación en b13.
http://imageshack.us
Nunca deberá utilizar los registros b6 a b13 para otros propósitos durante la ejecución del comando readowsn.
Ejemplo:
inicio:
let b6 = 0 ‘reset el registro, con valor cero
‘bucle para leer el código hasta que b6 no sea
‘igual a 0
bucle:
readowsn 2 ‘lectura serie del número en el pin de entrada 2
if b6 = 0 then bucle ‘repite lectura hasta que b6 no sea 0
‘hace una comprobación simple de seguridad.
‘Lo normal es que b12 no contenga
‘nunca el valor FF, Si el valor FF existe quiere
‘decir que la lectura del dispositivo
‘ya fue efectuada o a ocurrido un cortocircuito
If b12 = $FF then inicio ‘si el valor b12 es FF salta a inicio
‘todo esta correcto así que continúa
debug b1 ‘presenta el número en el depurador
pause 1000 ‘espera de 1 segundo
goto inicio ‘comienzo de programa
RETURN
Vuelve desde una subrutina. Retoma la ejecución en la declaración que sigue al GOSUB que llamó la subrutina.
Ejemplo:
inicio:
let b2 = 15 ‘asigna a la variable b2 el valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘llamada a subrutina flash
let b2 = 5 ‘asigna a la variable b2 el valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘llamada a subrutina flash
end
flash:
for b0 = 1 to b2 ‘define el bucle para el tiempo de b2
high 1 ‘pone la salida 1 a nivel alto
pause 500 ‘espera 0,5 segundos
low 1 ‘pone la salida 1 a nivel bajo
pause 500 ‘espera 0,5 segundos
next b0 ‘fin del bucle
return ‘vuelve a línea siguiente de llamada
REVERSE
Si pin es entrada, lo convierte en salida. Si es salida, lo convierte en entrada.
Pin: es el pin de entrada (0-7) del PICAXE.
Ejemplo:
inicio:
input 1 ‘configura pin1 como entrada
reverse 1 ‘configura pin 1 como salida
reverse 1 ‘configura pin 1 como entrada
output 1 ‘configura pin 1 como salida
serin
SERIN pin,baudmode,(qualifier,qualifier…)
SERIN pin,baudmode,(qualifier,qualifier…),{#}variable,{#}variable…
SERIN pin,baudmode ,{#}variable,{#}variable…
Recibe uno o más conjunto de datos en pin, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1). Pin automáticamente se convierte en entrada.
Pin: es un pin de entrada del PICAXE (0-7).
Baudmode: es una variable/constante (0-7) que especifica el modo en el que se transferirá el/los dato/s
Qualifiers: son variables/constants opcionales (0-255). La lista de datos a recibir puede estar precedida por uno o más quqlifiers encerrados entre corchetes. SERIN debe recibir estos bytes en un orden exacto, antes de recibir los datos. Si algún byte recibido no concuerda con el byte siguiente de la secuencia de calificación, el proceso de calificación comienza nuevamente (p.e. el próximo byte recibido es comparado con el primer byte de la lista de calificación).
Variable/s: son variables/constantes opcionales (0-255). SERIN comienza a guardar datos en la variable asociada. Si el nombre de variable es único, el valor del carácter ASCII recibido es guardado en la variable. Si la variable es
precedida por el signo #, SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable.
4800 y 9600 están sólo disponibles en el PICAXE-28X. El microcontrolador puede no llegar a seguir datagramas complicados a esa velocidad – se recomienda un máximo de 2400 para un reloj de 4 MHz.
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
serin 6,T2400,b1 ‘recibe serie de datos
write b0,b1 ‘guarda valor en b1
next b0 ‘siguiente ciclo
serout
SEROUT pin,baudmode,({#}data, {#}data …) Envía uno o más conjunto de datos en pin, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1). Pin automáticamente se convierte en salida.
Pin: es un pin de salida del PICAXE (0-7).
Baudmode: es una variable/constante (0-7) que especifica el modo en el que se transferirá el/los dato/s
Variable/s: son variables/constantes opcionales (0-255). Contienen el byte/s que se enviará por el pin de salida. Si la variable es precedida por el signo #, SEROUT convierte un valor decimal en ASCII y guarda el resultado en esa
variable. Se puede enviar cadenas de texto, precedidas por “”(“Hola”).
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
read b0,b1 ‘leer valor y cargar en b1
serout 7,T2400,(b1) ‘transmite valor de b1
next b0 ‘siguiente ciclo
sertxd
SERT ({#}data, {#}data …) Envía uno o más conjunto de datos en pin de programación, en formato Standard
asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1) a 4800 baudios..
Variable/s: son variables/constantes opcionales (0-255). Contienen el byte/s que se enviará por el pin de salida. Si la variable es precedida por el signo #, SERT convierte un valor decimal en ASCII y guarda el resultado en esa
variable. Se puede enviar cadenas de texto, precedidas por “”(“Hola”).
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
read b0,b1 ‘leer valor y cargar en b1
sertxd (b1) ‘transmite valor de b1
next b0 ‘siguiente ciclo
SERVO
Envía un pulso por el pin indicado para el control de un dispositivo de radio control tipo servo.
Pin: es un pin de salida del PICAXE (0-7).
Pulse: es una variable/constante (75-225) que especifica la posición del servo.
Este comando pone el pin a nivel alto durante un tiempo (x0.01 ms) cada 20ms indicado por pulse.
Generalmente el servo de RC requiere un pulso (0.75 a 2.25ms de duración) cada 20ms.
Por consiguiente el comando servo 1,75 moverá el servo a la posición de 0 grados, con el comando servo1,225 se posicionará en el extremo opuesto 180 º. Con el comando servo 1,150 colocará el servo en la posición central.
El comando servo no se puede usar al mismo tiempo que pwmout dado que comparten un contador común.
No usar un valor de pulso menor de 75 o mayor de 255, dado que esto puede causar que el servo funcione incorrectamente. Debido a las tolerancias en la fabricación de los servos todos los valores son aproximados y requieren un ajuste fino por experimentación.
Ejemplo:
inicio:
servo 4,75 ‘mueve el servo a la posición inicial 0 grados
pause 2000 ‘espera 2 segundos
servo 4,150 ‘mueve el servo a la posición central
pause 2000 ‘espera 2 segundos
servo 4,225 ‘mueve el servo a la posición final 180 grados
pause 2000 ‘espera 2 segundos
goto inicio ‘salta a inicio y repite ciclo
setint
SETINT input,mask Interrupción en función de ciertas condiciones de entrada.
Input: es una variable/constante (0-7) que especifica las condiciones de entrada.
Mask: es una variable/constante (75-225) que especifica la máscara.
Este comando causa la interrupción del código en ejecución cuando se activa un pin, previamente configurado, de interrupción.
La interrupción es el método más rápido de atender a una petición de paro del microcontrolador en función de condiciones determinadas. Es el único tipo de interrupción disponible en el sistema PICAXE.
El pin de interrupción se comprueba entre la ejecución de cada linea de código del programa y inclusive durante cualquier orden de pausa.
Si la condición particular de entrada es cierta, un gosub para la subrutina de interrupción se ejecuta inmediatamente. Cuando remata la ejecución de la subrutina de interrupción, el programa continúa en la línea siguiente desde donde se produjo la llamada a la interrupción del programa principal.
La condición de entrada de interrupción es cualquier patrón de “0” y “1” en el “Terminal de
entrada de interrupción”, enmascarado por el byte mask (máscara). Por consiguiente cualquier bit enmascarado por un “0” en la mascara será ignorado.
Ejemplos:
Para interrumpir con entrada input1 a nivel alto
Setint %00000010, % 00000010
Para interrumpir con entrada input1 a nivel bajo
Setint %00000000, % 00000010
Para interrumpir con entrada input0 a nivel alto, input1 a nivel alto e input2 a nivel bajo
Setint %00000011, % 00000111
Solo un patrón de entrada es admitido en cualquier momento. Para desactivar la interrupción
ejecutar una orden SETINT con el valor 0 como byte de máscara.
Notas:
1) Cada programa que usa la orden setint debe tener la correspondiente subrutina de
interrupción (termina con el correspondiente retorno al programa principal con
return) al final del programa principal.
2) Cuando ocurre una interrupción esta será atendida inmediatamente quedando
inhabilitada cualquier interrupción del programa principal. Si se desease ejecutar
nuevamente una interrupción , esta deberá programarse dentro de la subrutina de
interrupción en ejecución. Queda claro que después de ser atendida una interrupción
y ejecutar la subrutina asociada quedan habilitadas las peticiones de interrupción del
programa principal.
3) Si la condición de interrupción no es atendida dentro de la subrutina, una segunda
llamada de interrupción puede ocurrir inmediatamente.
4) Después de ser ejecutado el código de la subrutina de interrupción, la ejecución del
programa continúa en la siguiente línea del programa principal. Si la interrupción se
produce durante la ejecución de un comando pause, después de la ejecución de la
subrutina de interrupción y retorno al programa principal ignorará el tiempo que
restaba de la ejecución del comando pause y continuará en la línea siguiente.
Ejemplo:
setint %10000000,%10000000 ‘activa interrupción cuando el pin7 esta a nivel alto
principal:
low 1 ‘conmuta la salida 1 a nivel bajo
pause 2000 ‘espera 2 segundos
goto principal ‘repite bucle principal
interrupt:
high 1 ‘conmuta la salida 1 a nivel alto
if pin7 = 1 then interrupt ‘salta a la subrutina interrupt hasta que se
‘cumpla la condición indicada
pause 2000 ‘espera 2 segundos
setint %10000000,%10000000 ‘reactiva la interrupción
return ‘termina la subrutina de interrupción
‘y retorna al programa principal
En el ejemplo, la salida 1, conectada a un LED estará apagado y se pondrá a nivel alto
durante 2 segundos cuando se active la interrupción (pin 7 a nivel alto), reactivando de nuevo
la interrupción.
A continuación se muestra una variación del anterior ejemplo:
principal:
low 1 ‘conmuta la salida 1 a nivel bajo
pause 2000 ‘espera 2 segundos
if pin7 = 1 then sw_on
goto principal ‘repite bucle principal
sw_on:
high 1 ‘conmuta la salida 1 a nivel alto
if pin7 = 1 then sw_on ‘salta a la subrutina sw_on hasta que se
‘cumpla la condición indicada
pause 2000 ‘espera 2 segundos
return ‘termina la subrutina de interrupción
‘y retorna al programa principal
setfreq
SETFRQ freq Establece la frecuencia interna del reloj para el microprocesador PICAXE-18X para 4 MHz (por defecto) o 8 MHz.
freqt: es un keyword m4 o m8
Ejemplo:
setfreq m8 ‘frecuencia interna a 8 MHz
El cambio no ocurre hasta que el interruptor de arranque se active de nuevo, y el valor es
almacenado en memoria interna siendo, ahora, el cambio permanente.
sleep
SLEEP seconds Coloca al microcontrolador en modo de bajo consumo (duerme) por un periodo de tiempo indicado en seconds segundos. Los retardos pueden ser de hasta 65535 segundos (aprox. 18 horas).
seconds: variable/constante que especifica la duración del sleep (0-65535) SLEEP usa el WatchDog Timer, por lo que es independientemente de la frecuencia del oscilador utilizado. La resolución es de aproximadamente 2,3 s y la exactitud de aproximadamente un 99,9%, aunque puede variar de acuerdo al dispositivo y la temperatura.. El consumo se reduce en una relación 1/100.
Ejemplo:
inicio:
high 1 ‘salida 1 a nivel alto
sleep 10 ‘duerme durante 23 segundos aproximadamente
low 1 ‘salida 1 a nivel bajo
sleep 100 ‘duerme 230 segundos aproximadamente
goto inicio ‘repite programa indefinidamente
symbol
SYMBOL symbolname = value Asigna un symbolname (símbolo identificativo) con un valor value que lo identifica con
más claridad en la elaboración e interpretación del código del programa.
Symbolname: es una cadena de texto que debe comenzar con un carácter literal después se puede utilizar los caracteres numéricos (0..9)
Value: es una variable que dan valor al nuevo símbolo
Ejemplo:
symbol LED_ROJO = 7 ‘define una constante symbol
symbol CONTADOR = B0 ‘define una constante symbol
let CONTADOR = 200 ‘precarga CONTADOR con el valor 200
inicio:
high LED_ROJO ‘salida 7 a nivel alto
pause CONTADOR ‘pausa de 0,2 segundos
low LED_ROJO ‘salida 7 a nivel bajo
pause CONTADOR ‘pausa de 0,2 seguundos
goto inicio ‘repite programa indefinidamente
Indice de este Post:
1_Intro a los PICAXE
2_Enlaces a paginas relacionadas con estos microcontroladores
3_Ejemplos Varios de Aplicacion con estos microcontroladores
1_Intro a los microcontroladores PICAXE
La empresa Revolution Education adquiere los pic y les graba un firmware en la memoria libre, de esta forma no necesita un programador especial para ser grabado, se puede programar por puerto serial y con protocolo rs232. Al picaxe se lo puede programar sin sacarlo del circuito, ademas viene en varias versiones de diferentes capacidades. Tambien es posible bajarse un lenguaje parecido al basic para hacer los programas de una manera bastante amigable.
El sistema "PICAXE" es un sistema de microcontrolador fácil de programar que utiliza un lenguaje BASIC muy simple,
el cual la mayoría de los estudiantes pueden aprender rápidamente. El sistema PICAXE explota las
características únicas de la nueva generación de microcontroladores de bajo costo FLASH. Estos microcontroladores pueden ser programados una y otra vez sin la necesidad de un costoso programador PIC.
El poder del sistema PICAXE radica en su sencillez. No necesita de ningún programador, borrador o complejo sistema electrónico - el microcontrolador es programado (con un simple programa en BASIC o un diagrama de flujo) mediante una conexión de tres alambres conectada al puerto serie del ordenador. El circuito operacional PICAXE utiliza únicamente tres componentes y puede ser ensamblado fácilmente en un tablero experimental para componentes electrónicos, en una placa corriente o en una placa PCB.
EL sistema PICAXE está disponible en dos variedades - 18 pines y 28 pines. El controlador PICAXE-28 provee 22 pines de entrada/salida (8 salidas digitales, 8 entradas digitales y 4 entradas analógicas). El sistema PICAXE-18 provee 8 salidas y 5 entradas.
Las características principales del sistema PICAXE son las siguientes:
· bajo costo, circuito de fácil construcción
· hasta 8 entradas, 8 salidas y 4 canales analógicos
· rápida operación de descarga mediante el cable serial
· Software "Editor de Programación" gratuito y de fácil uso
· lenguaje BASIC simple y fácil de aprender
· editor de diagramas de flujo incluido
· puede ser programado también mediante el software "Crocodile Technology"
· extenso número de manuales gratuitos y foro de apoyo en línea
· tablero experimental tutorial y tutoriales incluidos
· paquete de control remoto infrarrojo disponible
· paquete de servocontrolador disponible
ANEXO1: Comandos BASIC PICAXE para programacion:
COMENTARIOS
Usar comentarios. Aunque sea perfectamente obvio para ti, lo que estás escribiendo, alguien más puede leerlo (o tu mismo más tarde) y puede no tener idea de lo que habías hecho. Aunque los comentarios usan espacio en el archivo fuente, no lo hacen en el PICAXE. Haz que los comentarios te digan algo útil acerca de lo que el programa está haciendo. Un comentario como “poner a 1 el pin 0” simplemente explica la sintaxis del lenguaje, pero no te dice nada acerca de la necesidad de hacerlo. “Encender el LED de alarma” puede ser más útil.
Un bloque de comentarios en el comienzo del programa y antes de cada sección de código puede describir que sucederá con más detalle que un simple espacio después de cada línea. No incluyas un bloque de comentarios en lugar de comentarios individuales de línea. Usar ámbos. En el comienzo del programa que hará el programa, autor y fecha. Puede ser útil para listar informaciónes de revisión y fechas. Especificar las conexiones de cada pin puede ser útil para
recordar para que equipo en especial se programó.
Los comentarios comienzan con un apóstrofe (‘) o punto y coma ( y continúa hasta el final de la línea. La palabra clave REM también puede ser usada para comentarios.
Ejemplo:
high 0 ‘poner pin0 a nivel alto
high0 ;poner pin0 a nivel alto
Rem poner pin0 a nivel alto
SIMBOLOS
Los símbolos nemotécnicos son palabras clave que identifican constantes, variables y direcciones de programa.
La asignación del símbolo se realiza poniendo el nombre del símbolo seguido del símbolo igual (=) y posteriormente la variable o constante.
Los símbolos pueden ser cualquier palabra que no sea la relativa a un comando.
Los símbolos pueden contener carácteres numéricos (e.j.: flash1, flash2, etc.) Pero el primer carácter no puede ser uno numérico (e.j.: 1flash)
El uso de símbolos no aumentan la longitud del programa.
Las direcciones de programa son asignadas siguiendo el símbolo con dos puntos ).
Ejemplos:
symbol Led_Rojo = 7 ‘define Led-Rojo como una constante 7
symbol Contador = B0 ‘define Contador como una variable B0
let Contador = 200 ‘precarga de la variable Contador con el valor 200
inicio: ‘define una dirección de programa
high Led_Rojo ‘pone a nivel alto “1” la salida 7
pause Contador ‘espera de 0,2 segundos
low Led_Rojo ‘pone a nivel bajo “0” la salida 7
pause Counter ‘espera de 0,2 segundos
goto inicio ‘salta hasta la dirección indicada en inicio
CONSTANTES
Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser más
conveniente usar un nombre de constante en lugar de un número constante. Si el número
necesita ser cambiado, únicamente puede ser cambiado en un lugar del programa donde se
define la constante. No pueden guardarse datos variables dentro de una constante.
Las constantes declaradas pueden ser de cuatro tipos: decimal, hexadecimal, binario y ASCII.
Los números decimales se escriben directamente sin ningún prefijo.
Los números hexadecimales se preceden del símbolo dólar (&).
Los números binarios de preceden del símbolo tanto por ciento (%).
Los valores ASCII se colocan tre comilla (“…”).
Ejemplos:
100 ‘ número 100 en decimal
&64 ‘ número 64 en hexadecimal
%01100110 ‘ número binario: 01100110
“A” ‘ letra “A” en código ASCII (65)
“Hello” ‘ ”Hello” equivalente a “H”, “e”, “l”, “l”, “o”
B1 = B0 ^ $AA ‘ operación XOR entre la variable B0 com AA en hex
VARIABLES
Tipos según sistema:
A continuación se indican las variables que se aplican a cada modelo de programación:
· PICAXE es usado al programar módulos PICAXE.
· El BASIC y Extended son usados al programar módulos Stamp.
· El ensamblador es el utilizado con código de ensamblador.
PICAXE
El sistema PICAXE da soporte a las siguientes variables:
Words: W0, W1, W2, W3, W4, W5, W6
Bytes: DIRS, PINS (solo PICAXE-08), INFRA, KEYVALUE
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13
Bits: PIN0, PIN1, PIN2, PIN3, PIN4, PIN5, PIN6, PIN7 (conjuntamente igual PINS)
BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
In/Out añade los pseudo nombres:
INPUT0, INPUT1, etc. puede usarse en lugar de PIN0, PIN1, tec.
OUTPUT0, OUTPUT1, etc. puede usarse en lugar de 0, 1, 2, etc.
BASIC
El modo BASIC da soporte a las siguientes variables:
Words: PORT
W0, W1, W2, W3, W4, W5, W6
Bytes: DIRS, PINS
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13
Bits: DIR0, DIR1, DIR2, DIR3, DIR4, DIR5, DIR6, DIR7 (conjuntamente igual DIRS)
BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
Nota: B12 y B13 (W6) es usado dentro de las órdenes GOSUB como una pila. Por consiguiente no debería utilizarse como un registro de propósito general.
EXTENDED
El modo extendido da soporte a todas las variables de BASIC. Además:
INPUT0, INPUT1, etc . puede usarse en lugar de pin0, pin1 etcétera.
OUTPUT0, OUTPUT1, etc . puede usarse en lugar de 0, 1, 2 etcétera.
Nota: B12 y B13 (W6) es usado dentro de las órdenes GOSUB como una pila. Por consiguiente
no debería utilizarse como un registro de propósito general.
ENSAMBLADOR
El modo ensamblador soporta los mismos modelos de variables que el modo extendido.
RESUMEN DE COMANDOS (A-0)
Sistemas:
La siguiente tabla muestra los comandos que se aplican a los siguientes sistemas:
· El BASIC y Extended se usan al programar módulos Stamp.
· El PIC16F84A se usan al hacer un download directamente en un PIC16F84A
PIC16F627
· PICAXE se usa al programar módulos PICAXE
http://imageshack.us
RESUMEN DE COMANDOS (P-Z)
Sistemas:
La siguiente tabla muestra los comandos que se aplican a los siguientes sistemas:
· El BASIC y Extended se usan al programar módulos Stamp.
· El PIC16F84A se usan al hacer un download directamente en un PIC16F84A
PIC16F627
· PICAXE se usa al programar módulos PICAXE
http://imageshack.us
BACKWARD
BACKWARD motor, Hace que el motor conectado a la salida cambie de giro Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
BRANCH
BRANCH offset,(dirección0, dirección1….direcciónN)
Causa que el programa salte a una posición diferente, basada en una variable indexada. Es similar al ON…GOTO de otros BASIC. La etiqueta que especifica la dirección, debe estar en la misma página de código que la instrucción BRANCH.
- offset: es una variable/constante que especifica que dirección usar (0, 1…n)
- direcciones: son etiquetas que especifican donde ir
Ejemplo:
rest:
let infra = 0 ‘resetear la variable infra
inicio:
if infra > 0 then test
goto inicio ‘salta a test si la variable infra es > 0 si no vuelta a inicio
test:
branch infra, (btn0,btn1,btn2,btn3)
goto rest ‘ramifica a rutinas indicadas (btn0..btn3) si no
‘resetea saltando a rest
btn0: etc.
btn1: etc.
btn2: etc.
btn3: etc.
BUTTON
BUTTON Pin, Down, Delay, Rate, Bvar, Action, Etiqueta lee Pin y opcionalmente ejecuta anti-rebote y autoprotección. Pin automáticamente se toma como entrada. Pin debe ser una constante entre 0-15 o una variable que contenga
un número entre 0-15 (p.ej. B0) ó un número de pin (p.ej. PORTA,0)
- Down: estado del pin cuando se oprime el pulsador (0..1)
- Delay: contador de ciclos antes de que comience la auto-repetición (0..255). Si es 0, no se efectua anti-rebote ni auto-repetición. Si es 255 se eliminan rebotes, pero no auto-repitición
- Rate: valor de auto-repetición (0..255)
- Bvar: variable con tamaño de byte usada internamente para conteo de demoras y repeticiones. Debe ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa
- Action: estado del pulsador al ser actuado
- Etiqueta: la ejecución comienza en esta etiqueta si es cierto Action
Ejemplo:
inicio:
button 0,0,200,100,b2,0,cont ‘salta a cont a menos que pin0 = 0
toggle 1 ‘cambia el estado del pin1
cont:
COUNT
COUNT Pin, Period, Var Cuenta el número de pulsos en un Pin, durante un período Period, y guada el resultado
en Var. Pin
- Pin: debe ser una constante (0..7) ó una variable que contenga un número de 0 a 15 (p.ej. B0) ó un numero de pin
- Period: valor numérico (0..65535) en ms
- Variable: variable tipo word, recibe el valor del conteo (0..65535)
Chequea el estado de Pin mediante un bucle y cuenta las transiciones de bajo a alto. Con un oscilador de 4 MHz chequea el estado del pin cada 20 μs. Con un oscilador de 20MHz chequea el estado cada 4 μs. De esto, se deduce que la mayor frecuencia de pulsos que puede ser contada es de 25 KHz con un oscilador de 4 MHz y de 125KHz con un oscilador de 20 MHz si la frecuencia tiene un ciclo útil del 50% (los tiempos altos son iguales a los bajos).
Ejemplo:
inicio:
count 1, 500, w1 ‘cuenta los pulsos del pin1 en 5 segundos
debug w1 ‘viasualiza los valores
goto inicio ‘salta a inicio (bucle)
DEBUG
DEBUG Var Visualiza la información contenida en la variable Var en la ventana del depurador
durante la ejecución.
- Var: variable con un valor previamente cargado
Ejemplo:
inicio:
debug b1 ‘visualiza el valor de b1
let b1 = b1+1 ‘incrementa el valor de b1 en una unidad
pause 500 ‘espera de 0,5 segundos
goto inicio ‘salta a inicio (bucle)
EEPROM
EEPROM {location},(data,data,…) Guarda constantes en un chip EEPROM. Si se omite el valor opcional Location, la
primera declaración se guarda en la dirección 0 de la EEPROM y las subsiguientes en las siguientes direcciones del mismo. Si se indica un valor Location, éste indica la dirección de comienzo para guardar los datos..
- Location: es una constante numérica (0..255) que especifica donde empezar a almacenar los datos en la EEPROM. Si no existe una posición indicada el almacenamiento continúa a partir del último dato introducido. Si inicialmente no se
especificó ninguna posición el almacenamiento comienza en la 0.
- Data: son constantes (0..255) que se almacenan en la EEPROM.
EEPROM solo trabaja con microcontroladores con EEPROM incorporado como el PIC16F84 y PIC16C84 , PICAXE-18A, 28, 28A, 28X. Dado que la EEPROM es una memoria no volátil, los datos permanecerán intactos aún sin alimentación.
Los datos se guardan en la EEPROM solo una vez, cuando el microcontrolador es programado, no cada vez que se ejecuta el programa. Se puede usar WRITE para colocar valores en la EEPROM en el momento de la ejecucuión.
Ejemplo:
EEPROM 5, (10,20,30) ‘guarda 10, 20, 30 a partir de la dirección 5
EEPROM 0, (“Hello Word”) ‘guarda el valor ASCII
END
End Detiene la ejecución del proceso y entra en modo de bajo consume. Todos los pins de I/O permanecen en el estado en que se encuentran. END trabaja ejecutando una instrucción SLEEP continua dentro de un bucle.
Un END, STOP ó GOTO deben ser colocados al final de un programa para evitar pasar del límite de la misma u comience nuevamente.
Ejemplo:
inicio:
let b2 = 15 ‘set b2 con valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
let b2 = 5 ‘set b2 con valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
end
flash:
for b0 = 1 to b2 ‘define el bucle con el valor b2
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
return ‘retorno a linea siguiente de la llamada
FOR...NEXT
FOR contador = start TO end {STEP {-} inc} {body}
El bucle FOR … NEXT permite a los programas ejecutar un número de declaraciones {body} un número de veces, usando una variable como contador. Debido a su complejidad y versatilidad, es mejor describirla paso a paso. El valor de start se asigna a la variable índice: count, que puede ser una variable de cualquier tipo. Se ejecuta las instrucciones de body. Body es opcional y puede ser omitido (quizás por un bucle de demora). El valor de inc es sumado a (ó restado si se especifica “-“) count. Si no se define un valor steep, se incrementa count en una unidad. Si count no pasó end ó desbordó el tipo de variable, la ejecución vuelve al paso 2.
Si el bucle necesita contar más de 255 (count > 255), se debe usar una variable de tamaño Word.
Ejemplo:
bucle:
for b0 = 1 to 20 ‘define el bucle con repetición de 1 a 20
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
pause 2000 ‘espera de 2 segundos
goto bucle ‘salta a bucle para comienzo de nuevo
FORWARD
FORWARD motor Arranca motor hacia delante
- Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
GOSUB
GOSUB etiqueta Salta a la subrutina indicada en etiqueta, guardando su dirección de regreso en la pila (snack). A diferencia del GOTO, cuando se llega a un RETURN, la ejecución sigue con la declaración siguiente al último GOSUB ejecutado. Se puede usar un número ilimitado de subrutinas en un programa y pueden estar anidadas. En otras palabras, las subrutinas pueden llamar a otra subrutina. Cada anidamiento no debe ser mayor de cuatro niveles.
Ejemplo:
inicio:
let b2 = 15 ‘set b2 con valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
let b2 = 5 ‘set b2 con valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘salta al procedimiento flash
end
flash:
for b0 = 1 to b2 ‘define el bucle con el valor b2
high 1 ‘salida 1 a nivel alto
pause 500 ‘espera de 0,5 segundos
low 1 ‘salida 1 a nivel bajo
pause 500 ‘espera de 0,5 segundos
next b0 ‘fin de bucle
return ‘retorno a linea siguiente de la llamada
GOTO
GOTO etiqueta La ejecución del programa continua en la declaración de la etiqueta.
Ejemplo:
inicio:
high 1 ‘salida 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘salida 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio
HALT
HALT motor Para el motor indicado
Motor: puede tomar el valor motor A o motor B
Nota: salidas 4, 5 (A) y salidas 6, 7 (B)
Ejemplo:
inicio:
forward A ‘motor A en marcha
wait 5 ‘espera 5 segundos
backward A ‘motor A cambio de giro
wait 5 ‘espera 5 segundos
halt A ‘motor A parado
wait 5 ‘espera 5 segundos
goto inicio ‘salto a inicio
HIGH
HIGH pin Pone a nivel alto el pin especificado y lo convierte automáticamente en salida. Pin puede ser una constante, 0 – 7, ó una variable que contenga un número de 0 – 7 (p. ej. B0) ó un número de pin (p. ej. PORTA.0)
Ejemplo:
bucle:
high 1 ‘pone salida 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone la salida 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto bucle ‘salta a comienzo de bucle repetitivo
i2cslave
I2CSLAVE esclavo, velocidad, dirección El comando i2cslave se utiliza para configurar los pines del PICAXE y definir el
tipo de i2c. Si se utiliza únicamente un dispositivo i2c, entonces generalmente solo se necesita una orden i2cslave dentro del programa.
Esclavo: es la dirección del esclavo i2c.
Velocidad: marca la velocidad de transmisión. I2cfast: 400KHz o I2cslow:
100KHz.
Dirección: es el i2cbyte o i2sword que indica la dirección a partir de la cual se guardará la información.
Después de que se utilice el comando i2cslave, se pueden utilizar los comandos readi2c y writei2c para acceder al dispositivo i2c. Se pueden utilizar para leer y grabar datos de una EEPROM serie usando un interface i2c de 2 hilos, como la 24LC01B ó similar. Esto permite guardar datos en una memoria externa no volátil, para que sean mantenidos aún sin conexión de alimentación. Tambie´n se utilizan para poder comunicarse con otros dispositivoscon interface i2c, como sensores de temperatura y convertidores A/D.
Dirección esclavo
La dirección del esclavo cambia para dispositivos diferentes del i2c.
Para las EEPROM del tipo 24LCxx la dirección es %1010xxxx.
Velocidad
La velocidad del bus i2c se selecciona a través de los comandos i2cfast para
velocidad de 400KHz y i2cslow para 100 KHz.
Dirección control
Los 7 bits superiores del byte de control contienen el código de control junto con la selección del chip e información adicional de dirección, dependiendo de cada dispositivo. El bit inferior es una bandera interna que indica si es un comando de lectura ó escritura y no se debe usar.
Por ejemplo, cuando comunicamos con un 24LC01B, el código de control es %1010 y no se usa la selección de chip, por lo que el byte de control será %10100000 ó $A0. Algunos formatos de control se pueden ver en la siguiente
tabla:
http://imageshack.us
El tamaño de dirección enviado (byte o Word) viene determinado por el tamaño de la variable usada. Si se usa una variable con tamaño byte se envía una dirección de 8 bits. Si se envía una variable de tamaño Word, se envía una
dirección de 16 bits. Asegurarse de utilizar una variable apropiada al dispositivo a comunicar.
http://imageshack.us
if…then
if…and…then
if…or…then
IF variable ? valor {AND/OR variable ? valor …} THEN etiqueta Estructura de comparación condicional con salto a una dirección determinada (etiqueta) en caso de que se cumpla.
?: condicional =, <>, >=, <=, >, <
Variable: valor de la comparación
Valor: variable constante
Etiqueta: dirección del salto en caso de cumplir el condicional
Efectúa una o más comparaciones. Cada término variable puede relacionar un valor con una constante ú otra variable e incluye uno de los operadores listados anteriormente.
IF…THEN evalúa la comparación en términos de CIERTO o FALSO. Si lo considera cierto, se ejecuta la operación posterior al THEN. Si lo considera falso, no se ejecuta la operación posterior al THEN. Las comparaciones que dan
0 se consideran falso. Cualquier otro valor es cierto.
Ejemplo:
inicio:
if pin0 = 1 then flash ‘salta a flash si el valor del pin0 es un 1
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a valor alto la salida 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a valor bajo la salida 1
goto inicio ‘salto a inicio
INFRAIN
Espera hasta que una señal de infrarrojos sea recibida. Este comando se utiliza para esperar una señal infrarrojo nueva procedente del transmisor de infrarrojos (utiliza el protocolo de Sony). El programa se detiene hasta que reciba la señal infrarroja. El valor de la orden recibida se almacena en la variable predefinida “infra”.
Ejemplo:
Inicio:
infrain ‘espera una nueva señal infrarroja
if infra = 1 then swon1 ‘si el valor de infra es 1 salta a swon1
if infra = 2 then swon2 ‘si el valor de infra es 1 salta a swon2
if infra = 3 then swon3 ‘si el valor de infra es 1 salta a swon3
if infra = 4 then swoff1 ‘si el valor de infra es 1 salta a swoff1
if infra = 5 then swoff2 ‘si el valor de infra es 1 salta a swoff2
if infra = 6 then swoff3 ‘si el valor de infra es 1 salta a swoff3
goto inicio
swon1:
high 1
goto inicio
swon2:
high 2
goto inicio
swon3:
high 3
goto inicio
swoff1:
low1
goto inicio
swoff2:
low2
goto inicio
swoff3:
low3
goto inicio
INPUT
Convierte el Pin especificado en una entrada. Pin debe ser una constante entre 0–7, o una variable que contenga un número 0-7 (p. ej.: B0) o el nombre de un pin (p. ej.: PORTA.0)
Ejemplo:
inicio:
input 1 ‘configura el pin1 como entrada
reverse 1 ‘configura el pin 1 como salida
reverse 1 ‘configura el pin1 como entrada
output1 ‘configura el pin1 como salida
LCD ({#}dato,{#}dato…)
LCD clear
LCD line1
LCD line2
Comando para controlar el módulo LCD con salida serie conectado al pin 7.
Clear: borra la pantalla LCD.
Line1 osiciona el cursor en la linea 1 para comenzar la escritura de dato.
Line2: posiciona el cursor en la linea 2 para comenzar la escritura de dato.
Dato: variable/constante (0-255) que se envían a la salida.
Este seudo comando realmente analiza gramaticalmente comandos serout. Equivale en BASIC a serout 7, T2400, (datos).
Muestra ítems en un LCD con controlador Hitachi 44780 o equivalente. Estos LCD, usualmente, tienen un cabezal de 14 o 16 pines simples o duales en un extremo. Si el signo (#) está colocado antes de un item, la representación ASCII para cada digito es enviada al LCD. Un programa debe esperar, por lo menos, medio segundo antes de enviar el primer
comando a un LCD. Puede tomar bastante tiempo a un LCD arrancar. Los comandos son enviados al LCD, enviando un $FE seguido por el comando.
Algunos comandos útiles se muestran en la siguiente tabla:
http://imageshack.us
Ejemplo:
inicio:
LCD (“hola”) ‘escribe en el LCD la palabra “hola”
LCD line2 ‘posiciona cursor en la linea 2
LCD (“ amigo”) ‘escribe en el LCD la palabra “amigo”
pause 2000 ‘espera 2 segundos
LCD clear ‘borra contenido LCD
pause 500 ‘espera de 0,5 segundos
goto inicio ‘salta a inicio
LET
{LET} variable = {-}valor ? valor … Asigna un valor a una variable. El valor puede ser una constante, otra variable o el
resultado de una expresión. La palabra clave LET, por sí misma, es opcional.
? puede ser:
+ ;add
- ;subtract
* ;multiply (returns low word of result)
* * ;multiply (returns high word result)
/ ;divide (returns quotient)
// ;divide (returns remainder)
MAX ;make less than or equal to
MIN ;make greater than or equal to
& ;and
| ;or (typed as SHIFT + \ on UK
^ k;xeoyrb o a r d ()t yped as SHIFT + 6 on UK
&/ ;and not (nand)
|/ ;or not (nor)
^/ ;xor not (xnor)
Ejemplo:
inicio:
let b0 = b0 + 1 ‘incrementa b0 en una unidad
sound 7, (b0,50) ‘emite sonido
if b0 > 50 then reset ‘si la variable es superior a 50 salta a reset
goto inicio ‘sino a inicio
reset:
let b0 = b0 max 10 ‘resetea b0 con un valor 10 y 10 es el máximo valor
goto inicio
LOOKDOWN
LOOKDOWN target,(valor0,valor1…valorN),variable La declaración LOOKDOWN busca en una lista de 8 bits los valores (value0…valueN) que coincidan con un valor target. Si se encuentra, el índice de la constante es almacenado en variable así, si el valor es el primero de la lista, variable = 0. Si es el segundo, variable = 1 y así sucesivamente. Si no se encuentra, no se toma ninguna acción y variable permanece sin cambios.
Ejemplo:
serin 1,N2400,b0 ‘obtiene un carácter hex de pin1 en
‘forma serie
lookdown bo,(“0123456789ABCDEF”),b1 ‘convierte el character hex en b0 a un
‘valor decimal b1
serout 0,N2400,[#b1] ‘envía un valor decimal al pin0 de
‘forma serie
Otro ejemplo:
reset:
let infra = 0 ‘resetea la variable infra
inicio:
if infra > 0 then test ‘salta a reset si se detecta una nueva señal
goto inicio ‘sino salta a inicio
test:
lookdown infra, (“1234”),b0 ‘mete el carácter ASCII 1 a 4 en b0
LOOKUP
LOOKUP offset,(dato0,dato1…datoN),variable LOOKUP puede ser usado para obtener valores de una tabla de constantes de 8 bits. Si offset es cero, variable toma el valor del primer dato (dato0). Si es 1, variable toma el valor del segundo dato (dato1) y así sucesivamente. Si offset es mayor ó igual que el número de entradas en la lista de constantes, no se toma ninguna acción y variable permanece sin cambios.
Ejemplo:
for b0 = 0 to 5 ‘cuenta hasta 5
lookup b0,(“hola”),b1 ‘obtiene el carácter b0 de la serie y lo deja en b1
serout 0,N2400,[b1] ‘envía el carácter b1 al pin0 de forma serie
Otro ejemplo:
inicio:
let b0 = 0 b0 + 1 ‘incrementa b0 en una unidad
lookup b0,(“1234”),b1 ‘mete el carácter ASCII 1 a 4 en b1
if b0 < 4 then inicio ‘si b0 es menor que 4 salta a inicio
end ‘sino fin de programa
LOW
LOW pin Coloca el pin especificado en valor bajo y automáticamente lo convierte en salida. Pin puede ser una variable/constante de 0-7.
Ejemplo:
inicio:
high 1 ‘pone el pin 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone el pin 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio del bucle
NAP
NAP periodo Coloca al microcontrolador en modo de bajo consumo por períodos de tiempo reducidos. Durante este NAP, se reduce al mínimo el consumo de energía. Los períodos indicados son solo aproximados, porque el tiempo se deriva del Watchdog Timer que está controlado por R/C y puede variar de chip a chip y también con la temperatura.
Como NAP usa el Watchdog Timer es independiente de la frecuencia del oscilador.
Periodo: constante entre 0-7.
El número de períodos está limitado a 7 y el tiempo correspondiente a cada período sigue la formula: (2periodo)x 18 ms
http://imageshack.us
Ejemplo:
inicio:
high 1 ‘pone salida pin1 a nivel alto
nap 4 ‘estado de bajo consumo durante: (24)x18ms = 288 ms
low 1 ‘pone salida 1 a nivel bajo
nap 7 ‘estado de bajo consumo durante: (27)x18ms = 2304 ms
goto inicio ‘salta a inicio
OUTPUT
OUTPUT pin Convierte el Pin especificado en una salida. Pin debe ser una constante entre 0–7, o una variable que contenga un número 0-7 (p. ej.: B0) o el nombre de un pin (p. ej.: PORTA.0)
Ejemplo:
inicio:
input 1 ‘configura el pin1 como entrada
reverse 1 ‘configura el pin 1 como salida
reverse 1 ‘configura el pin1 como entrada
output1 ‘configura el pin1 como salida
PAUSE
PAUSE periodo Detiene el programa por periodo milisegundos. Periodo tiene 16 bits, por lo que los retardos pueden ser hasta 65635 milisegundos (un poco más de un minuto). No coloca al microcontrolador en modo de bajo consumo como las otras funciones de retardo (NAP y SLEEP). Inclusive, consume mayor consumo, pero es más exacto. Tiene la
misma precisión que el clock.
Ejemplo:
inicio:
high 1 ‘pone el pin 1 a nivel alto
pause 5000 ‘espera de 5 segundos
low 1 ‘pone el pin 1 a nivel bajo
pause 5000 ‘espera de 5 segundos
goto inicio ‘salta a inicio del bucle
PEEK
PEEK direccion,variable Lee el registro del microcontrolador en la dirección y guarda la lectura en variable.
Direccion: variable/constante que especifica la dirección del registro. Valores válidos entre 0-255.
Variable: variable donde se guarda el dato del registro.
Esto permite el uso de registros no definidos por b0-b13. Es necesario tener precauciones en el uso de este comando. Para programadores inexpertos se recomienda el uso de los registros localizados entre $50 a $7F, que son registros de uso general.
Los registros indicados entre las direcciones $00 a $1F y $80 a $9F, son de función especial, que determinan como funciona el microcontrolador. Evitar el uso de estos registros a no ser que se sepa bien lo que se hace.
Las direcciones $20 a $7F y $A0 a $BF apuntan a registros de propósito general reservados para para el intérprete de instrucciones PICAXE. El uso de esos registros puede dar resultados inesperados y podría causar la no interpretación de instrucciones.
Utilizar los registros apuntados por las direcciones que van desde $50 a $7F (registros de propósito general) y de $C0 a $FF en el caso de PICAXE-28x.
Ejemplo:
peek 80,b1 ‘carga el contenido del registro apuntado por la dirección 80 en
‘la variable b1
peek, PORTA,b0 ‘toma el estado actual de PORTA y lo coloca en b0
POKE
POKE direccion,variable Guarda el valor de variable en el registro del microcontrolador indicado en dirección.
Direccion: variable/constante que especifica la dirección del registro. Valores válidos entre 0-255.
Variable: variable que contiene el dato a cargar en el registro especificado.
Lo indicado en el comando peek es válido para el comando poke, en cuanto a las precauciones a tomar en su uso.
Ejemplo:
poke 80,b1 ‘guarda el valor de b1 en el registro 80
poke $85,0 ‘guarda 0 en el registro 85 en hexadecinal (set todo
‘PORTA como salidas)
Se puede acceder directamente a registros y bits sin necesidad de utilizar PEEK
y POKE. Se recomienda usar el acceso directo y no los comandos mencionados.
TRISA = 0 ‘set todo PORTA como salidas
PORTA.0 = 1 ‘set a nível alto el bit 0 de PORTA
PULSIN
PULSIN pin,state,variable Mire el ancho del pulso en pin. Si state es cero se mide el ancho de un pulso bajo. Si
state es uno, se mide el ancho de un pulso alto. El ancho medido se coloca en variable. Si el flanco del pulso no llega, ó el ancho del pulso es demasiado grande para ser medido, variable = 0. Si se usa uma variable de 8 bits, solo se usan los bits menos significativos de la medición de 16 bits.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
State: variable/constante (0 o 1). Configura el tipo de pulso a medir en unidades de 10μs (para um cristal de 4MHz).
Variable: variable (1-65536) que contiene el dato a cargar en el registro especificado. Si el intervalo de espera ocurre (.65536s), entonces el resultado será 0.
La resolución de PULSIN depende de la frecuencia del oscilador. Si se usa un oscilador de 4 MHz, el ancho de pulso se obtiene en incrementos de 10μs. Si se usa un oscilador de 20 MHz, el ancho de pulso tendrá una resolución de 2μs. Definir un valor de OSC no tiene efectos sobre PULSIN. La resolución siempre cambia con la velocidad del
oscilador en uso.
Ejemplo:
pulsin 3,1,b1 ‘guarda la longitud del pulso introducido en el pin 1 en la variable b1
PULSOUT
PULSOUT pin,periodo Genera un pulso en pin, con un periodo especificado. El pulso se genera activando dos
veces el pin, por lo que la polaridad del pulso depende del estado inicial del pin.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
Período: variable/constante que especifica el período (0-65535)em unidades de 10μs (para um cristal de 4MHz).
La resolución de PULSOUT depende de la frecuencia del oscilador. Si se usa un oscilador de 4 MHz, el período del pulso generado estará en incrementos de 10μs. Si se usa un oscilador de 20 MHz, período tendra una duración de 2μs. Definir un valor de OSC no tiene efectos sobre PULSOT. La resolución siempre cambia con la velocidad del oscilador en uso.
Ejemplo:
inicio:
pulsout 4,150 ‘envía un pulso por el pin 4 de 1,5 ms de duración
pause 20 ‘pausa de 20 ms
goto inicio ‘salta a inicio y repite formando un bucle
PWM
PWM pin,duty,cicle Envía un tren de pulsos modulados en ancho por el pin indicado. Cada ciclo de PWM está compuesto de 256 pasos. El ciclo útil duty para cada ciclo varía de 0 (0%) a 255 (100%). El ciclo PWM es repetido cycle veces.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará.
Duty: variable/constante (0-255)especificando el ciclo útil que puede varíar de 0 (0%) a 255 (100%).
Cycle: variable/constante (0-255) que especifica el número de ciclos que se
repetirá.Cada ciclo tiene un período de 5 ms (con un cristal de 4MHz). Cycle depende de la frecuencia del oscilador. Con un oscilador de 4 MHz, cada cycle será de aproximadamente 5 ms de largo. Con un oscilador de 20 MHz la duración del ciclo será de 1 ms aproximadamente. Definir un valor de OSC no tiene efecto sobre PWM. El tiempo de cycle siempre cambia con la velocidad del oscilador en uso.
Pin se convierte en salida justo antes de la generación del pulso y vuelve a ser entrada, cuando cesa. La salida de PWM en un pin tiene mucho ruido, y no tiene forma de onda cuadrada. Es necesario usar algún tipo de filtro para convertirla en algo útil. Un circuito R/C puede usarse como un simple convertidor A/D.
Ejemplo:
inicio:
pwm 4,127,20 ‘envía 20 pulsos por el pin 4 con un ciclo útil del 50%
pause 20 ‘pausa de 20 ms
goto inicio ‘salta a inicio
PWMOUT
PWMOUT pin,period,duty cycles Genera una salida contínua de pwm usando el módulo interno del pwm del
microcontrolador. Esta orden es diferente de otras ordenes semejantes de BASIC, el pwmout funciona
contínuamente hasta que otra orden de pwmot sea indicada. Por ello puede usarse, por ejemplo, para controlar la velocidad de un motor. Para deterner la orden pwmout, enviar otra orden con un period = 0.
Pin: variable/constante (0-7) que especifica em pin I/O que se usará (siempre 3 con 18X, 2 com 08M y 1 o 2 com el 28X/40X.
Period: variable/constante (0-255)especificando el período del pulso.
Duty: variable/constante (0-1023)especificando el ciclo de trabajo the la señal pwm.
http://imageshack.us
El pwm duty cycle = (duty) x resonador speed
Notar que el valor de period y el valor de duty siguen la ecuación indicada anteriormente. Si desea una relación de 50:50 mientras se incrementa el período, entonces debe aumentar el valor del ciclo de trabajo apropiadamente.
Un cambio de la velocidad del oscilador cambiará la fórmula.
La frecuencia del pwm = 1/(period pwm).
Como el comando utiliza el módulo interno del pwm del microcontrolador, hay ciertas restricciones para su uso:
1. El comando solo funciona con ciertos pines de los microcontroladores:
· 28X/40X (1 y 2)
· 18X (3)
· 08M (2)
2. Duty cycles es un valor de 10 bits (0 a 1023).
3. El comando servo no se puede usar al mismo tiempo que el comando
pwmout dado que utilizan la misma señal de reloj.
4. Pwmout deja de funcionar durante las ordenes de , nap, sleep o end.
Ejemplo:
inicio:
pwmot 2,150,100 ‘set pwm
pause 1000 ‘pausa de 1s.
goto inicio ‘salta a inicio
RANDOM
RANDOM variable Efectúa una iteración pseudos-aleatoria en variable.
Variable: variable de 16 bits donde se almacena el número aleatorio.
El algoritmo pseudoaleatorio usado tiene un paso de 65535 (el único número que no produce es el cero).
Ejemplo:
inicio:
random b1 ‘carga en la variable b1 un valor aleatorio
let pins = b1 ‘pone el valor aleatorio en la salida pins
pause 100 ‘espera de 0,1 s
goto inicio ‘salta a inicio
READADC
READADC canal,variable El contenido del convertidor A/D (8 bits de resolución) indicado por canal es
almacenado en variable.
Canal:variable/constante que especifica el canal (0-3)
Variable: variable donde se almacena el byte leido.
Ejemplo:
inicio:
readadc 1,b1 ‘lee el valor y lo almacena en b1
if b1 > 50 then flash ‘salta a flash si b1 > 50
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a nivel alto el pin 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a nivel bajo la salida 1
goto inicio ‘salto a inicio
readadc10
READADC canal,wordvariable El contenido del convertidor A/D (10 bits de resolución) indicado por canal es
almacenado en variable.
Canal:variable/constante que especifica el canal (0-3)
Wordvariable: variable tipo Word donde se almacena los bytes leidos.
Ejemplo:
inicio:
readadc 1,w1 ‘lee el valor y lo almacena en w1
if w1 > 50 then flash ‘salta a flash si b1 > 50
goto inicio ‘sino salta a inicio
flash:
high 1 ‘pone a nivel alto el pin 1
pause 5000 ‘espera de 5 segundos
low 1 ‘pone a nivel bajo la salida 1
goto inicio ‘salto a inicio
readi2c
READI2C location,(variable,…)
Lee el i2c indicado en location y lo almacena en variable(s).
location: variable/constante que especifica la dirección mediante un byte del tipo Word la dirección del i2c.
Variable(s): donde se almacenan los byte(s) del dato leído.
Este comando se usa para leer los datos de byte de un dispositivo i2c.
Location define la dirección de inicio de la lectura de datos, aunque se logra también leer más de un byte secuencialmente (si el dispositivo i2c da soporte a lecturas secuenciales).
Location debe ser un byte que defina al 12cslave. Un comando del 12cslave tiene que haberse ejecutado con anterioridad de la ejecución del readi2c. Si el hardware del i2c no fue configurado de forma correcta o el byte de localización no es el adecuado el valor almacenado en la variable será 255 ($FF) indicándonos un error.
Ejemplo:
‘Un ejemplo de cómo usar el time clock DS1307
‘los datos son enviados/recibidos en código BCD
‘coloca la dirección del esclavo del DS1307
12cslave %11010000, i2cslow, i2cbyte
‘lectura de la hora y fecha y presenta en el depurador
inicio:
readi2c 0, (b0,b1,b2,b3,b4,b5,b6,b7)
debug b1
pause 2000
goto inicio
READ
READ location,variable Lee la EEPROM incorporada en la dirección location, y guarda el resultado en
variable.
location: variable/constante que especifica la dirección mediante un byte (0-255).
Variable: donde se almacena el byte leído.
Al usar los módulos Stamp, la forma de almacenar los datos es desde la posición 0 hacia arriba mientras que el almacenamiento de programa se construye hacia abajo desde la posición 255. Al usar el PICAXE-08 y 18el almacenamiento de datos se construye hacia arriba desde la posición 0y el almacenamiento de programa es hacia abajo desde la
posición 127.
Ejemplo:
inicio:
for b0 = 0 to 63 ‘inicio el bucle
read b0,b1 ‘lee el dato de la memoria en la posición de bo y
‘almacena su valor en b1
serout 7,T2400,(b1) ‘transmite el valor del dato de b1 al LCD utilizando
‘transmisión serie
next b0
READMEM
READMEM location,variable Lee la memoria de programa FLASH en la posición location y lo vuelca en variable.
Provee un espacio adicional de 256 bytes de almacenamiento para este comando en los dispositivos PIC 16F87x (incluyendo a PICAXE-28, 28ª). Este comando no está presente en el PICAXE-28X como el módulo del i2c puede servir para EEPROMs externas mayores.
location: variable/constante que especifica la dirección mediante un byte (0-255).
Variable: donde se almacena el byte leído.
Ejemplo:
inicio:
for b0 = 0 to 255 ‘inicio el bucle
read b0,b1 ‘lee el dato de la memoria en la posición de bo y
‘almacena su valor en b1
serout 7,T2400,(b1) ‘transmite el valor del dato de b1 al LCD utilizando
‘transmisión serie
next b0
readtemp/readtemp12
READTEMP pin,variable
READTEMP pin,wordvariable
Lee la temperatura de un DS18B20, sensor digital de temperatura, conectado en pin y almacena su lectura en variable.
Pin: es el pin de entrada del PICAXE que tiene conectado el sensor.
Variable: donde se almacena el byte leído.
READTEMP: la resolución de la lectura es de enteros de grado, y el sensor funciona de -55 ºC hasta +125 ºC. El bit 7 indicará si los valores de temperatura son positivos (0) o negativos (1).
READTEMP12: (para programadores avanzados). La temperatura viene expresada con una resolución de 0,125 ºC y necesita 12 bits para su representación digital. El usuario debe interpretar los datos a través de cálculo matemático. Ver el dataste del DS18B20 (www.dalsemi.com) para más información en relación con Data Temperatura.
Ejemplo:
inicio:
readtemp 1,b1 ‘lee el valor del sensor en pin 1 y lo almacena en b1
if b1 > 127 then neg ‘chequeo si el valor medido es negativo
serout, 7, T2400, (#b1) ‘transmite el valor al LCD en formato serie
goto inicio ‘salta a inicio
neg:
let b1 = b1 – 128 ‘ajuste del valor negativo en b1
serout 7,T2400, (“-“) ‘transmite el símbolo negativo
serout 7,T2400, (#b1) ‘transmite el valor al LCD en formato serie
goto inicio
http://imageshack.us
READOWCLK
Lectura de la hora indicada por un reloj de precisión DS2415 conectado en la entrada especificada por pin.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor. Este comando no esta disponible en el PICAXE-28X pero puede usarse un DS1307, reloj de precisión en tiempo real por i2c.
El DS2415 es un reloj en tiempo real de precisión que opera con una única línea. La información está contenida en 4 bytes (32 bits) y es muy preciso debido al uso de un cristal de cu¡arzo como clock del C.I. El registro de 32 bits puede aportar la información de 132 años en segundos. El dispositivo puede estar alimentado de forma independiente con 3 V. de forma que pueda trabajar aún cuando el controlador principal con el PICAXE esté parado. Si se utiliza ésta opción se debe utilizar la orden RESETOWCLK para activar el reloj de nuevo y de esta forma arrancar el reloj en tiempo real.
El comando READOWCLK lee los 32 bits del reloj y guarda el contenido de los 32 bits en la variable b10 (LBS) a b13 (MBS), también conocidas como w6 y w7.
Usando variables tipo byte:
o El valor b10 es el número de segundos
o El valor b11 es el número x 256 segundos
o El valor b12 es el número x 65536 segundos
o El valor b13 es el número x 16777216 segundos
Usando variables tipo Word:
o El valor en w6 es el número de segundos
o El valor en w7 es el número x 65536 segundos
Ejemplo:
inicio:
resetowclk 2 ‘reset el reloj en pin 2
bucle:
readowclk 2 ‘lectura del reloj en pin de entrada 2
debug b1 ‘visualiza el tiempo en depurador
pause 10000 ‘espera de 10 segundos
goto bucle ‘repetición de lectura y presentación
RESETOWCLK
Resetea el reloj DS2415, es decir pone a cero su contador.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor
Este comando pone a cero el tiempo en un chip reloj tipo DS2415 que está conectado a un pin de salida del PICAXE. También activa el cristal del reloj. Debe usarse al comienzo de cada conteo. El método de conexionado del reloj de precisión con el PICAXE se muestra a continuación:
http://imageshack.us
READOWSN
Lectura serie de cualquier dispositivo Dallas 1-wire, conectado en el pin de entrada especificado por pin.
Pin: es el pin de entrada (0-7) del PICAXE que tiene conectado el sensor.
Este comando lee el valor de cualquier dispositivo Dallas de un Terminal i/o de comunicación (1-wire) que esté conectado al PICAXE en una de sus pines (especificado por pin), por ejemplo, sensor digital de temperatura: DS18B20, reloj de precisión:
DS2415, iButton: DS1990A (http://www.esicomsa.com/product_1.html).
Al usar un dispositivo iButton cuyo número serie está grabado en el chip que contiene la envoltura del iButton y ejecutar el comando readowsn se realizará la lectura del número seie y guardará el código indicador de la familia en b6, el número de serie en b7..b12 y la suma de verificación en b13.
http://imageshack.us
Nunca deberá utilizar los registros b6 a b13 para otros propósitos durante la ejecución del comando readowsn.
Ejemplo:
inicio:
let b6 = 0 ‘reset el registro, con valor cero
‘bucle para leer el código hasta que b6 no sea
‘igual a 0
bucle:
readowsn 2 ‘lectura serie del número en el pin de entrada 2
if b6 = 0 then bucle ‘repite lectura hasta que b6 no sea 0
‘hace una comprobación simple de seguridad.
‘Lo normal es que b12 no contenga
‘nunca el valor FF, Si el valor FF existe quiere
‘decir que la lectura del dispositivo
‘ya fue efectuada o a ocurrido un cortocircuito
If b12 = $FF then inicio ‘si el valor b12 es FF salta a inicio
‘todo esta correcto así que continúa
debug b1 ‘presenta el número en el depurador
pause 1000 ‘espera de 1 segundo
goto inicio ‘comienzo de programa
RETURN
Vuelve desde una subrutina. Retoma la ejecución en la declaración que sigue al GOSUB que llamó la subrutina.
Ejemplo:
inicio:
let b2 = 15 ‘asigna a la variable b2 el valor 15
pause 2000 ‘espera de 2 segundos
gosub flash ‘llamada a subrutina flash
let b2 = 5 ‘asigna a la variable b2 el valor 5
pause 2000 ‘espera de 2 segundos
gosub flash ‘llamada a subrutina flash
end
flash:
for b0 = 1 to b2 ‘define el bucle para el tiempo de b2
high 1 ‘pone la salida 1 a nivel alto
pause 500 ‘espera 0,5 segundos
low 1 ‘pone la salida 1 a nivel bajo
pause 500 ‘espera 0,5 segundos
next b0 ‘fin del bucle
return ‘vuelve a línea siguiente de llamada
REVERSE
Si pin es entrada, lo convierte en salida. Si es salida, lo convierte en entrada.
Pin: es el pin de entrada (0-7) del PICAXE.
Ejemplo:
inicio:
input 1 ‘configura pin1 como entrada
reverse 1 ‘configura pin 1 como salida
reverse 1 ‘configura pin 1 como entrada
output 1 ‘configura pin 1 como salida
serin
SERIN pin,baudmode,(qualifier,qualifier…)
SERIN pin,baudmode,(qualifier,qualifier…),{#}variable,{#}variable…
SERIN pin,baudmode ,{#}variable,{#}variable…
Recibe uno o más conjunto de datos en pin, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1). Pin automáticamente se convierte en entrada.
Pin: es un pin de entrada del PICAXE (0-7).
Baudmode: es una variable/constante (0-7) que especifica el modo en el que se transferirá el/los dato/s
Qualifiers: son variables/constants opcionales (0-255). La lista de datos a recibir puede estar precedida por uno o más quqlifiers encerrados entre corchetes. SERIN debe recibir estos bytes en un orden exacto, antes de recibir los datos. Si algún byte recibido no concuerda con el byte siguiente de la secuencia de calificación, el proceso de calificación comienza nuevamente (p.e. el próximo byte recibido es comparado con el primer byte de la lista de calificación).
Variable/s: son variables/constantes opcionales (0-255). SERIN comienza a guardar datos en la variable asociada. Si el nombre de variable es único, el valor del carácter ASCII recibido es guardado en la variable. Si la variable es
precedida por el signo #, SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable.
4800 y 9600 están sólo disponibles en el PICAXE-28X. El microcontrolador puede no llegar a seguir datagramas complicados a esa velocidad – se recomienda un máximo de 2400 para un reloj de 4 MHz.
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
serin 6,T2400,b1 ‘recibe serie de datos
write b0,b1 ‘guarda valor en b1
next b0 ‘siguiente ciclo
serout
SEROUT pin,baudmode,({#}data, {#}data …) Envía uno o más conjunto de datos en pin, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1). Pin automáticamente se convierte en salida.
Pin: es un pin de salida del PICAXE (0-7).
Baudmode: es una variable/constante (0-7) que especifica el modo en el que se transferirá el/los dato/s
Variable/s: son variables/constantes opcionales (0-255). Contienen el byte/s que se enviará por el pin de salida. Si la variable es precedida por el signo #, SEROUT convierte un valor decimal en ASCII y guarda el resultado en esa
variable. Se puede enviar cadenas de texto, precedidas por “”(“Hola”).
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
read b0,b1 ‘leer valor y cargar en b1
serout 7,T2400,(b1) ‘transmite valor de b1
next b0 ‘siguiente ciclo
sertxd
SERT ({#}data, {#}data …) Envía uno o más conjunto de datos en pin de programación, en formato Standard
asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1) a 4800 baudios..
Variable/s: son variables/constantes opcionales (0-255). Contienen el byte/s que se enviará por el pin de salida. Si la variable es precedida por el signo #, SERT convierte un valor decimal en ASCII y guarda el resultado en esa
variable. Se puede enviar cadenas de texto, precedidas por “”(“Hola”).
Ejemplo:
inicio:
for b0 = 0 to 63 ‘comienzo bucle
read b0,b1 ‘leer valor y cargar en b1
sertxd (b1) ‘transmite valor de b1
next b0 ‘siguiente ciclo
SERVO
Envía un pulso por el pin indicado para el control de un dispositivo de radio control tipo servo.
Pin: es un pin de salida del PICAXE (0-7).
Pulse: es una variable/constante (75-225) que especifica la posición del servo.
Este comando pone el pin a nivel alto durante un tiempo (x0.01 ms) cada 20ms indicado por pulse.
Generalmente el servo de RC requiere un pulso (0.75 a 2.25ms de duración) cada 20ms.
Por consiguiente el comando servo 1,75 moverá el servo a la posición de 0 grados, con el comando servo1,225 se posicionará en el extremo opuesto 180 º. Con el comando servo 1,150 colocará el servo en la posición central.
El comando servo no se puede usar al mismo tiempo que pwmout dado que comparten un contador común.
No usar un valor de pulso menor de 75 o mayor de 255, dado que esto puede causar que el servo funcione incorrectamente. Debido a las tolerancias en la fabricación de los servos todos los valores son aproximados y requieren un ajuste fino por experimentación.
Ejemplo:
inicio:
servo 4,75 ‘mueve el servo a la posición inicial 0 grados
pause 2000 ‘espera 2 segundos
servo 4,150 ‘mueve el servo a la posición central
pause 2000 ‘espera 2 segundos
servo 4,225 ‘mueve el servo a la posición final 180 grados
pause 2000 ‘espera 2 segundos
goto inicio ‘salta a inicio y repite ciclo
setint
SETINT input,mask Interrupción en función de ciertas condiciones de entrada.
Input: es una variable/constante (0-7) que especifica las condiciones de entrada.
Mask: es una variable/constante (75-225) que especifica la máscara.
Este comando causa la interrupción del código en ejecución cuando se activa un pin, previamente configurado, de interrupción.
La interrupción es el método más rápido de atender a una petición de paro del microcontrolador en función de condiciones determinadas. Es el único tipo de interrupción disponible en el sistema PICAXE.
El pin de interrupción se comprueba entre la ejecución de cada linea de código del programa y inclusive durante cualquier orden de pausa.
Si la condición particular de entrada es cierta, un gosub para la subrutina de interrupción se ejecuta inmediatamente. Cuando remata la ejecución de la subrutina de interrupción, el programa continúa en la línea siguiente desde donde se produjo la llamada a la interrupción del programa principal.
La condición de entrada de interrupción es cualquier patrón de “0” y “1” en el “Terminal de
entrada de interrupción”, enmascarado por el byte mask (máscara). Por consiguiente cualquier bit enmascarado por un “0” en la mascara será ignorado.
Ejemplos:
Para interrumpir con entrada input1 a nivel alto
Setint %00000010, % 00000010
Para interrumpir con entrada input1 a nivel bajo
Setint %00000000, % 00000010
Para interrumpir con entrada input0 a nivel alto, input1 a nivel alto e input2 a nivel bajo
Setint %00000011, % 00000111
Solo un patrón de entrada es admitido en cualquier momento. Para desactivar la interrupción
ejecutar una orden SETINT con el valor 0 como byte de máscara.
Notas:
1) Cada programa que usa la orden setint debe tener la correspondiente subrutina de
interrupción (termina con el correspondiente retorno al programa principal con
return) al final del programa principal.
2) Cuando ocurre una interrupción esta será atendida inmediatamente quedando
inhabilitada cualquier interrupción del programa principal. Si se desease ejecutar
nuevamente una interrupción , esta deberá programarse dentro de la subrutina de
interrupción en ejecución. Queda claro que después de ser atendida una interrupción
y ejecutar la subrutina asociada quedan habilitadas las peticiones de interrupción del
programa principal.
3) Si la condición de interrupción no es atendida dentro de la subrutina, una segunda
llamada de interrupción puede ocurrir inmediatamente.
4) Después de ser ejecutado el código de la subrutina de interrupción, la ejecución del
programa continúa en la siguiente línea del programa principal. Si la interrupción se
produce durante la ejecución de un comando pause, después de la ejecución de la
subrutina de interrupción y retorno al programa principal ignorará el tiempo que
restaba de la ejecución del comando pause y continuará en la línea siguiente.
Ejemplo:
setint %10000000,%10000000 ‘activa interrupción cuando el pin7 esta a nivel alto
principal:
low 1 ‘conmuta la salida 1 a nivel bajo
pause 2000 ‘espera 2 segundos
goto principal ‘repite bucle principal
interrupt:
high 1 ‘conmuta la salida 1 a nivel alto
if pin7 = 1 then interrupt ‘salta a la subrutina interrupt hasta que se
‘cumpla la condición indicada
pause 2000 ‘espera 2 segundos
setint %10000000,%10000000 ‘reactiva la interrupción
return ‘termina la subrutina de interrupción
‘y retorna al programa principal
En el ejemplo, la salida 1, conectada a un LED estará apagado y se pondrá a nivel alto
durante 2 segundos cuando se active la interrupción (pin 7 a nivel alto), reactivando de nuevo
la interrupción.
A continuación se muestra una variación del anterior ejemplo:
principal:
low 1 ‘conmuta la salida 1 a nivel bajo
pause 2000 ‘espera 2 segundos
if pin7 = 1 then sw_on
goto principal ‘repite bucle principal
sw_on:
high 1 ‘conmuta la salida 1 a nivel alto
if pin7 = 1 then sw_on ‘salta a la subrutina sw_on hasta que se
‘cumpla la condición indicada
pause 2000 ‘espera 2 segundos
return ‘termina la subrutina de interrupción
‘y retorna al programa principal
setfreq
SETFRQ freq Establece la frecuencia interna del reloj para el microprocesador PICAXE-18X para 4 MHz (por defecto) o 8 MHz.
freqt: es un keyword m4 o m8
Ejemplo:
setfreq m8 ‘frecuencia interna a 8 MHz
El cambio no ocurre hasta que el interruptor de arranque se active de nuevo, y el valor es
almacenado en memoria interna siendo, ahora, el cambio permanente.
sleep
SLEEP seconds Coloca al microcontrolador en modo de bajo consumo (duerme) por un periodo de tiempo indicado en seconds segundos. Los retardos pueden ser de hasta 65535 segundos (aprox. 18 horas).
seconds: variable/constante que especifica la duración del sleep (0-65535) SLEEP usa el WatchDog Timer, por lo que es independientemente de la frecuencia del oscilador utilizado. La resolución es de aproximadamente 2,3 s y la exactitud de aproximadamente un 99,9%, aunque puede variar de acuerdo al dispositivo y la temperatura.. El consumo se reduce en una relación 1/100.
Ejemplo:
inicio:
high 1 ‘salida 1 a nivel alto
sleep 10 ‘duerme durante 23 segundos aproximadamente
low 1 ‘salida 1 a nivel bajo
sleep 100 ‘duerme 230 segundos aproximadamente
goto inicio ‘repite programa indefinidamente
symbol
SYMBOL symbolname = value Asigna un symbolname (símbolo identificativo) con un valor value que lo identifica con
más claridad en la elaboración e interpretación del código del programa.
Symbolname: es una cadena de texto que debe comenzar con un carácter literal después se puede utilizar los caracteres numéricos (0..9)
Value: es una variable que dan valor al nuevo símbolo
Ejemplo:
symbol LED_ROJO = 7 ‘define una constante symbol
symbol CONTADOR = B0 ‘define una constante symbol
let CONTADOR = 200 ‘precarga CONTADOR con el valor 200
inicio:
high LED_ROJO ‘salida 7 a nivel alto
pause CONTADOR ‘pausa de 0,2 segundos
low LED_ROJO ‘salida 7 a nivel bajo
pause CONTADOR ‘pausa de 0,2 seguundos
goto inicio ‘repite programa indefinidamente