articulo torres picaxe4

34
DG-TAM Oil Work & Service Autor: Ing. Martin Torres Fortelli http://torreselectronico.com http://www.yoreparo.com http://www.canalplc.com http://automatismosmdq.com http://www.clubdediagramas.com http://www.ucontrol.com

Upload: pfir1

Post on 03-Aug-2015

139 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Articulo Torres PICAXE4

DG-TAM Oil Work & Service

Autor:

Ing. Martin Torres Fortelli

http://torreselectronico.com

http://www.yoreparo.com

http://www.canalplc.com

http://automatismosmdq.com

http://www.clubdediagramas.com

http://www.ucontrol.com

Page 2: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

2

Índice: Introducción El comando eeprom El comando i2cslave El comando readi2c El comando read El comando write El comando writei2c El comando readowsn El comando debug El comando sertxd El comando pulsin El comando pulsout El comando serin El comando serout El comando setint El comando branch El comando button El comando count El comando servo Ejemplos prácticos de programación: - Control de Display LCD - Ctrl. Servo mecanismo multipropósito - Sensor de Corriente multipropósito - Transmisor y Receptor Telemétrico - Transmisor y Receptor IR - Alarma GSM + Display LCD - Detector RFDI multipropósito - Detector de colores multipropósito - Ctrl. Domótico + IR / RF + Display LCD

Introducción: Bien en nuestros artículos anteriores vimos varios comandos básicos con sus respectivos ejemplos prácticos que por lo general los aplicamos a proyectos sencillos que no escapan de los ejemplos básicos que podemos encontrar en el manual de programación de estos microcontroladores. Luego dimos un breve paseo por el articulo de cómo podemos confeccionar un micro PLC e instrumentos con el sistema Picaxe. En este capitulo vamos a ver algunos comandos poco comunes que por lo general los obviamos por la poca explicación que encontramos en artículos y o manuales de Revolution Educations y por el problema de que algunos módulos educativos (hardware´s) que tienen a la venta esta empresa, o son caros o difíciles de adquirir; Una ves terminado este articulo, para terminar nuestro mini curso avanzado de micros Picaxe, pasaremos al ultimo articulo que es donde veremos como elaborar drum´s con programación de alto nivel (assembly). Ahora veamos en las siguientes páginas:

…“La solución de cómo mejorar nuestros proyectos y avanzar un paso mas en lo que respecta la programación

de esto micros”…

Page 3: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

3

eeprom EEPROM {position},(dato) El comando eeprom, nos guarda datos en la memoria no volátil de nuestro microcontrolador. Dado que la EEPROM es una memoria no volátil, los datos permanecerán intactos aún sin alimentación. Si se omite el valor opcional de la posición de memoria, 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 de posición, éste indica la dirección de comienzo para guardar los datos… Posición (Location): Es una constante numérica de 0 a 255 que específica donde empezar a almacenar los datos en la EEPROM. Como mencionamos anteriormente, 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. Dato (Data): Pueden ser constantes alfanuméricas de hasta 256 caracteres. Cada carácter del valor numérico o palabras son almacenados en las posiciones de la eeprom que van desde la posición “0” hasta la “255”. Este comando y esta diversidad en la estructura física del microcontrolador, solo lo podemos encontrarla en los microcontroladores PICAXE-18A, 28, 28A, 28X. Los datos que son guardados en la EEPROM , se guardan solo una vez, y esto es cuando el microcontrolador es programado, no cada vez que se ejecuta el programa. Para el caso de tener que armar una rutina donde necesitamos guardar en tiempo real determinados datos en la eeprom, se puede usar WRITE para colocar los valores en la EEPROM en el momento de la ejecución. De esta misma manera, logre armar una rutina con mas de 550 mensajes, pero sin ir mas lejos, veamos algunos ejemplos sencillos de cómo implementar este comando… Ejemplo: EEPROM 5, (10,20,30) ‘guarda 10, 20, 30 a partir de la dirección 5 EEPROM 0, (“Martin”) ‘guarda el valor ASCII a partir de 0

Nota: tomando el ejemplo de (“Martin”), Cuando guardamos una palabra en la dirección 0, no significa que la integridad de la palabra o frase esta guardada en ese espacio solamente. Como mencione anteriormente, el primer carácter o letra, se guarda en la dirección cero, y el resto de las letras o caracteres, son guardados en las direcciones que la continúan… (los espacios entre frases no cuentan)

Osea que el almacenamiento quedaría asi para el ejemplo EEPROM 0, (“Martin”)

EEPROM LETRA 0 M 1 a 2 r 3 t 4 i 5 n

En el caso de querer implementar el comando eeprom para guardar varios mensajes, tenemos que recordar que cada letra es almacenada en una dirección especifica que se continúan de la 1er dirección establecida… SI nosotros queremos guardar otro mensaje, tenemos que tratar de que no ocupemos un espacio ya ocupado por otra palabra. Un método sencillo, es ir anotando en una tabla como la superior, las letras y las distintas direcciones de la eeprom donde están guardadas, ya que luego, para poder tener esas palabras, ejecutaremos comandos tales como “for…next”, los cuales usan los registros estos… veamos un ejemplo mas claro, resumiendo una rutina que es empleada como método para que se puedan visualizar frases en un display de cuarzo liquido:

SYMBOL get = b11 SYMBOL bite = b12 EEPROM 6,("Martin Torres") ;guarda la 1er letra de la palabra en la posicion6 FOR get = 6 TO 18 ;cuenta hasta 18 por que son 12,osea 12+6=18 READ get,bite GOSUB SendDataBite ;salta e imprime la frase pause 100 NEXT (Recuerden que es un extracto de la rutina completa – después la veremos completa)

Page 4: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

4

i2cslave I2CSLAVE esclavo, velocidad, dirección El comando i2cslave se utiliza para configurar los pines del PICAXE y definir el tipo de i2c que se empleara como hardware funcional (sensores – conversores A/D- módulos conversores o digitalizadores con memoria propia) o bien, alguna memoria eeprom adicional. Si se utiliza únicamente un dispositivo i2c, entonces generalmente solo se necesita una orden i2cslave dentro del programa. Esclavo: Este registro, es la dirección del esclavo i2c. Velocidad: Este valor, marca la velocidad de transmisión. Dirección: Este valor, establece el i2cbyte o i2sword, indicando la dirección donde comenzara a 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. También se utilizan para poder comunicarse con otros dispositivos con interface i2c, como sensores de temperatura y convertidores A/D. Dirección esclavo: La dirección del esclavo cambia para dispositivos diferentes (ver tabla inferior) 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:

Dispositivo Capacidad Dirección esclavo Velocidad Tamaño dirección 24LC01B EE 128 %1010xxxx i2cfast i2cbyte 24LC02B EE 256 %1010xxxx i2cfast i2cbyte 24LC04B EE 512 %1010xxbx i2cfast i2cbyte 24LC08B EE 1k %1010xbbx i2cfast i2cbyte 24LC16B EE 2k %1010bbbx i2cfast i2cbyte 24LC32B EE 4k %1010dddx i2cfast i2cword 24LC64 EE 8k %1010dddx i2cfast i2cword DS1307 RTC %1101000x i2cslow i2cbyte MAX6953 5x7 LED %101ddddx i2cfast i2cbyte AD5245 Digital Pot %010110dx i2cfast i2cbyte SRF08 Sonar %1110000x i2cfast i2cbyte CMPS03 Compass %1100000x i2cfast i2cbyte SP03 Speech %1100010x i2cfast i2cbyte

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.

Page 5: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

5

readi2c READI2C dirección, (variable,…) Este comando, como mencionamos anteriormente, lee la dirección determinada en el dispositivo i2c y lo almacena en una variable establecida. Dirección (Location): Esta variable o constante, especifica la dirección mediante un byte del tipo Word la dirección del i2c. Variable(s): Este dato, establece donde se almacenan los byte(s) del dato leído. Este comando se usa para leer los datos almacenados de un dispositivo i2c. Dirección o 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). Dirección o 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 Tengan en cuenta, que estos datos almacenados en b0,b1,b2,b3,b4,b5,b6,b7, además de poderse visualizar en el depurador del software Programming Editor mediante el comando “debug”, podemos adicionar o cambiarlo por comando “sertxd” para poder visualizarlo en la pantalla de nuestro PC u algún programa que realicemos en Vb. El comando “sertxd”, lo explicaremos a detalles como implementarlo, este mismo articulo nº4

read READ Dirección, variable Lee la EEPROM incorporada en la dirección, y guarda el resultado en una variable dada (b1-b2 – w0 –w1 - etc). Dirección o location: variable/constante que especifica la dirección mediante un byte. Variable: Dato elemental, para establecer donde se almacena el byte leído. Al usar los módulos Stamp, la forma de almacenar los datos es desde la posición cero 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. Ejemplo1: Inicio1: readadc0, b1 ‘leer entrada analógica 0 y guardar dato en la variable b1 Inicio2: for b2= 0 to 63 ‘inicio el bucle read b2,b3 ‘lee el dato de la memoria en la posición de b0 y almacena su valor en b1

gosub comparador2 ‘en este sub programa, vamos a comparar los dos datos y el resultado lo ‘almacenamos en b5 serout 7,T2400,(b5) ‘transmite el valor del dato de b5 al LCD utilizando transmisión serie

next b2 goto Inicio1 Nota: En este ejemplo, podemos adquirir un dato de un sensor en tiempo real y compararlo con un registro para luego ser impreso el valor en un display LCD. Si bien, hay lecturas físicas que no varían en microsegundos, hay procesos que requieren tener una velocidad de lectura bastante importante para poder funcionar…. En este ejemplo, podemos ver como transmitir un dato a un modulo display de la empresa Revolution Educations. Tengan en cuenta que estos display, vienen con un micro que contiene un pequeño firmware de control; Osea, no funciona en cualquier display de LCD…

Page 6: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

6

write WRITE Dirección, valor Con este comando, podemos grabar valores en la EEPROM incorporada en el microcontrolador (eeprom interna), en una dirección especificada. El orden del registro guardado, es como explicamos anteriormente cuando ejemplificamos el comando eeprom, comienza en una dirección dada, y el resto de los caracteres son almacenados en los espacios que están a continuación, Con esto ultimo, hay que tener precaución si queremos borrar y refrescar un valor dado en determinada posición, ya que si nos equivocamos en la posición de inicio del registro u donde termina, podemos borrar pedazos de otros datos… Dirección: Es una variable o constante que especifica el byte de la dirección de memoria Valor: es una variable o constante que indica el valor del dato a escribir en la memoria Digamos a modo sintético, este comando podemos emplearlo para refrescar datos guardados en un registro de memoria. Tengan en cuenta que la duración de la grabación es de 10 ms aproximadamente, y esto nos genera un lag en el watchdog. Ejemplo: Inicio: for b0 = 0 to 63 ‘comienzo del bucle serin 6,T2400,b1 ‘recibe el dato via serie por pin 6 a 2400 baudios y almacena en variable b1

write b0,b1 ‘escribe el valor del dato en memoria next b0

writei2c WRITEI2C Dirección, (variable,…) Graba valores en un dispositivo externo con EEPROM, en una dirección especificada. Dirección: es una variable/constante que especifica el byte de la dirección de memoria Variable: es una variable que contiene el dato byte(s) para ser grabados. Esta orden se usa para escribir datos para el dispositivo i2c. El dato “dirección” define la dirección del inicio de los datos de escritura, cabe la posibilidad de escribir más de un byte secuencialmente (si el dispositivo del i2c soporta escritura secuencial – tener cuidado al usar EEPROM que a menudo disponen de limitaciones de escritura).

Se debe tener en cuenta que la mayoría de las EEPROM requieren unos 10ms para efectuar la escritura del dato, con lo cual se deberá tener en cuenta este retraso cuando se programe la ejecución del comando i2cwrite. Si no se tiene en cuenta este tiempo de retardo en la grabación los datos pueden corromperse. Antes de usar este comando se debe haber utilizado previamente el comando i2cslave. Si el hardware del i2c no esta correctamente configurado, o se han equivocado los datos del comando i2cslave, no se generará ningún error. Por ello se debe asegurarse que los datos han sido correctamente grabados por la orden readi2c. Ejemplo: ‘Ejemplo de como usar el timer (reloj en tiempo real) DS1307 ‘Los datos son enviados/recibidos en formato BCD Se deben definir los symbol: seconds, mins, etc… ‘ (p.e. symbol seconds = b0) ‘La dirección determinada del esclavo del DS1307 i2cslave %11010000, ‘i2cslow, i2cbyte ‘Escribir la hora y fecha con 11:59:00 y 25/12/05 Inicio: let seconds =$00 ’00 en formato BCD let mins =$59 ’59 en formato BCD let hour =$11 ’11 en formato BCD

let day =$03 ’03 en formato BCD let date =$25 ’25 en formato BCD let month =$12 ’12 en formato BCD let year =$03 ’03 en formato BCD let control = %00010000 ‘habilitar salida a 1 Hz writei2c 0,(seconds, mins, tour, day, dat, month, year,control) end Ejemplo2: Inicio1: readadc0, b1 ‘leer entrada analógica 0 y guardar dato en la variable b1

writei2c 0,(b1) ‘guardar dato en dispositivo externo readi2c 0, (b0,b1,b2,b3,b4,b5,b6,b7) ‘leer dato del dispositivo externo debug b1 pause 2000 goto inicio En este sencillo ejemplo, guardamos la lectura análoga en la eeprom externa, y luego la leemos y visualizamos en nuestro depurador…

Page 7: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

7

readowsn READOWSN pin Este comando nos permite tener una lectura serie con cualquier dispositivo Dallas 1-wire, que ete conectado a un pin de entrada epecificado. 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. Nunca deberá utilizar los registros b6 a b13 para otros propósitos durante la ejecución del comando readowsn. main: let b6 = 0 ' restablecer el código a cero loop: readowsn 2 ' leer el numero serie entrante por entrada 2 y lo guarda en b6

if b6 = 0 then loop 'cuando insertamos el dispositivo, comparamos la 'lectura y esta no debe ser igual a cero, si no, volverá a loop ' si el numero serie es correcto, sigue debug b1 ' e imprime los valores en el depurador pause 1000 goto main Este sencillo dispositivo, en cierta oportunidad estaba limpiando gran parte de rezago que tenia archivado y lo único que hacían en ese viejo rincón, eran estorbar. Para mi sorpresa, antes de tirar lo que tenia archivado, revisando unos equipos me tope con uno de ellos que tenia estos dispositivos, así que tuve la oportunidad de poder emplearlo y jugar un rato personalmente con este bichito. Dentro de las utilidades que le di en mis pruebas, logre varios proyectos de los cuales se destacan una cerradura electrónica – un code pass service – y por ultimo (con algunas falencias pero funciono un par de veces), un codificador de datos wireless.

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

Page 8: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

8

sertxd SERTXD ({#}data, {#}data …) Envía uno o más conjunto de datos al pin de programación, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1) a 4800 baudios.. Este comando nos puede servir para escriir mensajes en nuestro terminal de programación, sin la necesidad de un MAX232, lo cual nos reduce a un simple cuadro como el que vemos en la parte inferior de esta sección… 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 #, SERTXD convierte un valor decimal en ASCII y guarda el resultado en esa variable. Se puede enviar cadenas de texto, precedidas por comillas y encerradas dentro de paréntesis (“Hola”). Ejemplo: inicio: for b0 = 0 to 10 ‘comienzo bucle read b0,b1 ‘leer valor y cargar en b1 sertxd (“Hola Martin”) ‘transmite la palabra “Hola Martin” next b0 ‘siguiente ciclo

pulsin PULSIN pin, estado, variable Este comando, tiene como función observar el ancho de un pulso en un pin de entrada o salida determinado. Si la opción “estado” tiene el valor cero, se mide el ancho de un pulso bajo. Si la opción “estado” tiene el valor uno, se mide el ancho de un pulso alto. El ancho o duración medida del pulso así sea con lógica negativo o positiva, se guarda en la variable que queramos establecer (b1,b2, etc). Si el flanco del pulso nunca se efectúa, ó el ancho del pulso es demasiado grande para ser medido, el valor de esta variable será igual a cero. Si se usa una variable de 8 bits, solo se usan los bits menos significativos de la medición de 16 bits. Pin: Este dato en el comando pulsin, se define una variable o constante (0-7) que especifica el pin de entrada o salida que se usará. Estado: Como ya mencionamos anteriormente, este dato es una variable o constante con los valores 0 o 1. Estos valores, configura el tipo de pulso a medir en unidades de 10µs (para un cristal de 4MHz). Variable: Este dato en comando, define un registro especifico para almacenar el dato obtenido. Una nota muy importante a tener en cuenta, es que si el intervalo de espera ocurre (.65536s), el resultado obtenido será igual a cero. La resolución del comando PULSIN depende de la frecuencia de los osciladores, ya sea internos (RC) u externos. 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

En la sección “Ejemplos prácticos de programación” de este mismo articulo, veremos un empleo bastante didáctico de este comando el cual, una ve que nos familiaricemos con este, verán que es un comando muy útil que nos puede abrir las puertas a vario proyectos experimentales de comunicación.

Page 9: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

9

pulsout PULSOUT pin, tiempo (periodo) Genera un pulso en un pin determinado, con un tiempo o 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: Este dato, es el numero que especifica la salida que se implementara (0-7) con este comando. Tiempo o Período: Esta variable o constante, especifica el tiempo o período (0-65535) en unidades de 10µs (para un cristal de 4MHz) que tendrá el pulso de salida. La resolución de PULSOUT, al igual que PULSIN, 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, estos períodos tendrán 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. Tengan en cuenta que a mayor velocidad obtenida por el oscilador, mas trafico de datos podemos mover. 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 Al igual que lo mencionado con el comando anterior (PULSIN), estos dos comandos son ideales para comunicación entre micros ya sea por intermedio de infrarrojos, radio frecuencia, y también, nos dan la solución ideal para poder ampliar nuestras entradas digitales a un máximo ilimitado, y que podemos establecer en nuestra rutina que determinado pulso, significa un dato determinado, y otra cierta cantidad de pulsos, otro dato determinado… Anteriormente, los sensores que entrarían al Picaxe, tienen sus propios osciladores, y en serie a la entrada, un pequeño multiplexor para que no tengamos choque de datos…. En fin, hay millones de utilidades para estos dos comandos, y de seguro, a medida que vallan experimentando, van a ir encontrando varias utilidades mas

serin SERIN pin, baudmode, {#} variable, {#} variable… Este comando es implementado para recibir uno o más conjuntos de datos en un pin de entrada determinado en formato Standard asíncrono, usando 8bit de datos, sin paridad y un bit stop (8N1). Pin: Este dato, establece cual es el pin de entrada del PICAXE. Baudmode: Este dato, es una variable o constante que especifica el modo en el que se transferirá el o los datos:

BAUDMODE T2400 Dato de Entrada Original T1200 Dato de Entrada Original T600 Dato de Entrada Original T300/T4800 Dato de Entrada Original N2400 Dato de Entrada invertido N1200 Dato de Entrada invertido N600 Dato de Entrada invertido N300/N4800 Dato de Entrada invertido Variable/s: Este dato, establece que el comando SERIN comience a guardar datos en la variable asociada (w0 - w1 – b1 - b2 -etc). Si el nombre de variable es único, osea si hay un solo punto establecido para almacenar los datos entrantes, el valor del carácter ASCII recibido es guardado en esa variable. Si la variable es precedida por el signo #, el comando SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable. 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

Page 10: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

10

serout SEROUT pin, baudmode,({#}data, {#}data …) Envía uno o más conjuntos de datos en a un pin de salida, en formato Standard asíncrono, usando 8 bit de datos, sin paridad y un bit stop (8N1). Pin: En este dato, se establece el pin de salida del PICAXE . Baudmode: Este dato, es una variable o constante que especifica el modo en el que se transferirá el o los datos:

BAUDMODE T2400 Dato de Salida Original Siempre manejado T1200 Dato de Salida Original Siempre manejado T600 Dato de Salida Original Siempre manejado T300/T4800 Dato de Salida Original Siempre manejado N2400 Dato de Salida invertido Siempre manejado N1200 Dato de Salida invertido Siempre manejado N600 Dato de Salida invertido Siempre manejado N300/N4800 Dato de Salida invertido Siempre manejado OT2400 Dato de Salida Original Manejo libre o abierto OT1200 Dato de Salida Original Manejo libre o abierto OT600 Dato de Salida Original Manejo libre o abierto OT300/OT4800 Dato de Salida Original Manejo libre o abierto ON2400 Dato de Salida invertido Manejo libre o abierto ON1200 Dato de Salida invertido Manejo libre o abierto ON600 Dato de Salida invertido Manejo libre o abierto ON300/ON4800 Dato de Salida invertido Manejo libre o abierto Variable/s: Este dato, establece la variable o variables que contienen los datos a enviar. Si la variable es precedida por el signo #, el comando SEROUT convierte un valor decimal en ASCII y guarda el resultado en esa variable. Se puede enviar cadenas de texto, precedidas por comillas y encerradas en paréntesis..por ejemplo: (“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

setint SETINT input, mask Este útil comando, nos genera una interrupción en función de ciertas condiciones de entrada. 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 y nos puede ser ideal para rutinas que requieren un watchdog mas rápido y no incluimos un oscilador externo. Input: Es una variable o constante que establece las condiciones de entrada, osea, nos dice que entrada es la que va actuar en el efecto de interrupción. Mask: es una variable/constante (75-225) que especifica la máscara. La mascara es la función que se tiene que cumplir para ejecutar la interrupción. El pin de interrupción se comprueba entre la ejecución de cada línea 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:

Page 11: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

11

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

branch BRANCH offset,(dirección0, dirección1….dirección N) Causa que el programa salte a una posición diferente, basada en una variable indexada. La etiqueta que especifica la dirección, debe estar en la misma etiqueta de la subrutina que contiene la instrucción BRANCH (al igual que FOR…NEXT). 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.

Page 12: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

12

button BUTTON Pin, Down, Delay, Rate, Bvar, Action, Etiqueta Este comando, me dio la solución en varias oportunidades en las cuales la fuente me fallaba por ser muy sencilla y tener a su ves, una muy alta distorsión armónica en la línea de alimentación general por ser final de línea en mi barrio. Si bien uno puede suponer con la teoría que con una resistencia de 10k en la entrada o implementando optos podemos suprimir o acondicionar las señales entrantes, el tema esta en que cuando el problema raíz surge desde nuestra fuente, por mas que hagamos intentos, vamos a tener problemas de lectura. Veamos como podemos realizar una entrada con protección anti rebotes, sin el empleo de elementos pasivos y o activos… EL comando button, lee el in de entrada establecido y opcionalmente ejecuta un procedimiento interno de anti-rebote y autoprotección. Pin: EL valor de Pin, es la entrada elegida para implementar este comando. Down: Este valor, es para setear el estado del pin de entrada cuando se oprime el pulsador (0..1) Delay: este valor, otorga un contador de ciclos antes de que comience la auto-repetición (0..255). Si es 0, no se efectúa anti-rebote ni auto-repetición. Si es 255 se eliminan rebotes, pero no auto-repetición Rate: Valor de auto-repetición (0..255) Bvar: Es la variable con tamaño de byte, que se usa 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, ya que perderíamos los datos almacenados del conteo. Action: estado del pulsador al ser actuado… puede ser 1 o 0, recuerden que nosotros podemos invertir el estado de las entradas según nuestras necesidades…. 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: Este comando, me fue muy útil para la elaboración de un encoder, que implemente en un TACOMETRO digital de altas RPM que me regulaba el acelerador electrónico. Obviamente, no pasaba de ser tan solo un proyecto para mejorar la velocidad de una moto generadora. Obviamente, ustedes de seguro les encontraran mejores utilidades en sus proyectos…

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 125 KHz 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)

servo SERVO pin,pulse Envía un pulso por el pin de salida establecido para el control de un dispositivo de radio control tipo servo. Aclaremos que no necesariamente tiene que ser para un radio control. En mi caso, lo implemente alambricamente. 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 de salida a nivel alto durante un tiempo (x0.01 ms) cada 20ms indicado por el valor de “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.

Page 13: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

13

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

Ejemplos prácticos de programación: Bien, vamos a darle un toque más gustoso a nuestro artículo, y comenzaremos con la práctica, implementando la mayoría de los comandos que vimos anteriormente…. Para ello, reflotamos el 1er articulo de programación con sistemas PICAXE y vemos como podemos armar nuestro circuito de prueba básico de los micros de 18 pines, y de 8 tambien (implementen la opción “ZOOM” para verlos expandidos, o bien, pueden obtenerlos del software PCB Wizard)…

Page 14: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

14

1- Control de Display LCD A quien no le gustaría mejorar sus proyectos con un display? Creo que a la gran mayoría, por no decir todos, le gusta la idea; Pero como estan caros los módulos seriales de picaxe, hay que ver la manera de como implementar cualquier tipo de display, si la necesidad de gastos elevados... En este pequeño ejemplo, les muestro como controlar un display Hitachi y o un sharp de 16x2. la interface de circuito, tendría las siguientes conexiones:

El diseño del PCB, podría ser este:

Bien... Ahora vamos al control del LCD, con un ejemplo practico... Para poder entender el funcionamiento de la rutina, repasemos un poco el comando eeprom, y retornemos a las líneas de programación. Yo, trate de simplificarles un poco las cosas, y a medida que vallan leyendo la rutina, verán que les adiciones los comentarios correspondientes a las línea de mayor relevancia. Por i no recuerdan, los comentarios son las frases que están después de la línea de programación y preceden los símbolos “`” y o “;”. Recuerden que los comentarios, no cumplen ninguna función adicional en los programas…

Page 15: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

15

;****** http://electroescuelavirtual.blogspot.com/ ******* ;EN ESTA SECCION, CONFIGURAMOS LOS PINES DE SALIDA ;***************** Ing Martin Torres ************** ******* SYMBOL RS = 2 ; 0 = Command 1 = Data SYMBOL E = 3 ; 0 = Idle 1 = Active SYMBOL DB4 = 4 ; LCD Linea Dato 4 SYMBOL DB5 = 5 ; LCD Linea Dato 5 SYMBOL DB6 = 6 ; LCD Linea Dato 6 SYMBOL DB7 = 7 ; LCD Linea Dato 7 SYMBOL RSCMDmask = %00000000 ; Select Command register SYMBOL RSDATmask = %00000100 ; Select Data register SYMBOL get = b11 SYMBOL bite = b12 SYMBOL rsbit = b13 ;************************************************** ****** ;NO USAR B11-12-13 YA QUE SON DE USO INTERNO DEL PROGRAMA ;************************************************** ****** ctrl_LCD: GOSUB InitialiseLcd ; vamos a la rutina de inicialización del LCD if input 0 = 1 then mensaje_dos ; si la entrada 0 esta en bajo, ir al mensaje dos if input 0 = 0 then mensaje_uno ; si la entrada 0 esta en alto, ir al mensaje uno goto ctrl_LCD ;************************************************** ********** ;********* ahora vamos a predefinir los mensajes********************** ;************************************************** ********** mensaje_uno: EEPROM 6,("Articulo Ucontrol") ;guarda la palabra en la posicion6 y hasta llegar a la posicion 22 FOR get = 6 TO 22 ;cuenta hasta 22 por que son 16 letras,osea 6 + 16 =22 READ get,bite ;lee la variables que guardaron los registros del conteo GOSUB SendDataBite ;salta e imprime la frase pause 100 NEXT salto_2da_linea: bite = $C0 ; saltamos ala segunda linea GOSUB SendCmdBite Mensaje_2da_linea: EEPROM 208,("Por Ing Torres") ; guardamos la palabra en la posicion 24 hasta la 36 FOR get = 24 TO 36 ; cuenta hasta 36 por que es la ultima letra de esta frase READ get,bite GOSUB SendDataBite ;salta e imprime la frase pause 50 NEXT pause 100 goto ctrl_LCD mensaje_dos: EEPROM 38,("Caray! Funciona!") ;guarda la palabra en la posicion38 FOR get = 38 TO 52 ;y cuenta hasta la posicion 52

READ get,bite GOSUB SendDataBite ;salta e imprime la frase pause 100 NEXT salto_2da_linea: bite = $C0 ; saltamos ala segunda linea GOSUB SendCmdBite Mensaje_2da_linea: EEPROM 54,("seguimos Martin?") ; guardamos la palabra en la posicion 54 FOR get = 54 TO 68 ; y cuenta hasta 68 por que es la ultima letra de esta frase READ get,bite GOSUB SendDataBite ;salta e imprime la frase pause 50 NEXT pause 100 goto ctrl_LCD ;************************************************** ***************** ;*******estas son las rutinas de control del lcd N-O T-O-C-A-R ******************* ;************************************************** ***************** InitialiseLcd: FOR get = 0 TO 5 READ get,bite GOSUB SendInitCmdBite NEXT EEPROM 0,( $33 ) ; habilita lcd en 8-bit / 8-bit EEPROM 1,( $32 ) ; habilita lcd en 8-bit / 4-bit EEPROM 2,( $28 ) ; Formatea el Display EEPROM 3,( $0C ) ; Arranca el Display EEPROM 4,( $06 ) ; Mueve el cursor EEPROM 5,( $01 ) ; Limpia la pantalla RETURN SendInitCmdBite: PAUSE 15 ; retardo 15mS SendCmdBite: rsbit = RSCMDmask ; envia el comando de registro SendDataBite: pins = bite & %11110000 | rsbit ; Put MSB out first PULSOUT E,1 ; Give a 10uS pulse on E pins = bite * %00010000 | rsbit ; Put LSB out second PULSOUT E,1 ; Give a 10uS pulse on E rsbit = RSDATmask ; Send to Data register next RETURN ;************************************************** *************** ;************************* FIN PROGRAMA *********** *************

Page 16: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

16

Bien, hasta acá, si copiamos y pegamos en nuestro software Programing editor de picaxe; veran que funciona a la perfección, pero.... para poder jugar con etas bases, hayq ue tener en cuenta un par de cosa... veamos las detenidamente 1-Recuerden que tenemos un total de 255 letras para escribir (yo llegue a 560, pero mas adelante les cuento como) 2-Traten de contar bien la cantidad de letras, ya que un mal conteo, nos puede llegar a salir cortado el mensaje, o superponerse las posiciones de las letras y espacio de memoria... 3-Si algo no funciona, tengan fe en la rutina que les paso y chequen las conexiones del display... por lo general, la patilla uno (la que figura con un cuadradito en el diagrama), arranca de derecha a izquierda (viendolo de frente).... 4to y ultimo: se que algun mala leche se va atribuir el laburo, no importa, lo unico que les pido, es que no rompan las terlipe por correo electronico, preguntando por el tema, para despues publicarlos en sus paginas Saludos y a la brevedad, sigo subiendo

2- Transmisor y Receptor Telemétrico Bien, ante los reiterados post surgentes respecto a este tema en los distintos foros a los que soy por lo general bastante asiduo, creí que la mejor manera de colaborar era realizar una pequeña orientación al tema, y plantearles la base de un proyecto, para que ustedes la mejoren y o terminen. Este sencillo equipo telemétrico, consta tan solo de un mini transmisor de 93.3Mhz (en mi caso), y un microcontrolador PICAXE 18X (Puede ser cualquier micro tal como el PICAXE 08, 18, 18A, 18X). Por un lado tenemos la etapa transmisora, y por el otro lado, la etapa decodificadora y procesadora, la cual, pasare a detallar muy brevemente, para hacer de este mini artículo, un artículo mas practico, que teórico… Quiero aclarar por si le pasa en la cabeza de algún chanta (chapucero), que los presentes circuitos experimentales, no son ideales para desempeño profesional u comercial, pero bien se adaptan a empleos del ámbito casero. Veamos la Base del circuito de nuestro proyecto… Arranquemos por la etapa transmisora…

Como podrán ver en el siguiente diagrama, esta etapa esta compuesta por un sencillo oscilador en base a un solo transistor configurado en base común, que produce la alta frecuencia. La bobina L1 y el capacitor variable (trimmer) C6 de 100pf, determinan la frecuencia de operación; El diámetro de esta bobina, debe de ser de 1cm y el hilo de esta, puede ser cualquiera que este dentro del rango de los 0,600mm a 1,1mm y para emplear las bandas entre 80Mhz / 110Mhz se constituirá nuestro inductor con 4 Espiras nada mas. La selección del transistor, fue la pieza clave de este proyecto, ya que jugué con varios de RF y los que mas se adaptan a este proyecto, son el BF255 o el BF494. No obtuve buenos resultados con el 2N2218 o el TRF123, así que traten de no emplear reemplazos e implementar los transistores que les recomiendo. El condensador C5, tiene como propósito realimentar la señal entre el colector y el emisor, mientras que el capacitor C4, se encarga del desacoplamiento de la base. Las resistencias R3 y R4, son las resistencias de polarización de la base de nuestro transistor.

Para la etapa moduladora, implemente un microcontrolador Picaxe, que a su ves, es también la etapa procesadora de nuestro sistema telemétrico. A continuación, veremos el diagrama de nuestra etapa decodificadora – procesadora y moduladora…

Page 17: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

17

Bien, este es el diagrama de circuito base para un microcontrolador PICAXE 18, 18A o bien, puede ser para un micro Picaxe 18X. En nuestro caso, solo emplearemos una entrada y una salida, pero de seguro, ustedes lo sabrán adaptar según sus necesidades, ya que este desarrollo experimental, no esta, limitado en cuanto a hardware, ya que como sabemos, el micro Picaxe de 18 pines, tiene 5 entradas (2 analógicas y 3 digitales) y 8 salidas digitales que pueden ser transformadas a una salida analógica de 4 bits si implementamos un 4066 a la salida (ya describí esto mismo en el articulo de “Como construir un PLC e instrumento con microcontroladores PICAXE”). Volviendo a tema, veamos ahora, nuestra etapa procesadora compuesta en el micro…

Bien, como dije anteriormente, nuestro proyecto no esta limitado en cuento a hardware, por tanto, podemos tener las variantes de entrada analógica, o entrada digital. Hace un par de años, me encontraba en la búsqueda y desarrollo de un sistema de codificación de datos, el cual fuera sencillo a la hora de emplear estos micros. Si bien, la base del circuito inicial rondaba en base a un MC145026 (codificador) y un MC145027 (decodificador), no estaba conforme con la complejidad del circuito, por tanto, me aboque en la búsqueda de un sistema más sencillo aun, que eliminara etapas y simplifique el circuito general. Para todas las propuestas que me di, en todas tenia el mismo problema… como codificar una señal, ya sea análoga, o digital. Si bien, la base que me despertó de cómo atacar este tema me la dio mi amigo Stan Swan, tengo que aclarar, que después de esto, me profundice aun mas en el tema, y logre desarrollar en conjunto con mi estimado amigo Stanley, el sistema de codificación de datos, el cual, compartimos como miembros destacados en PicaxeForum, que es el foro oficial que puso en marcha la empresa que fabrica estos microcontroladores para compartir datos, proyectos y cursos. La idea inicial, era la de transformar los datos en sonidos. Como ya sabemos, este micro tiene el comando especial “sound” , que tiene como función, generar tonos que pueden ser implementados para generar melodías, u bien, en este caso, como propone Swan, implementarlos como datos específicos… Veamos las diferentes maneras de codificación de datos, según entrada digital o análoga…

Para el empleo de Señales entrantes digitales Para el caso de transmitir como dato, una señal entrante digital, es mas que sencillo, ya que lo único que haremos, será traducir un uno lógico en un procedimiento, y un estado lógico cero, en otro procedimiento. Estos procedimientos, definen y codifican a la señal entrante con un tono largo, para el caso de los estados lógicos altos (uno); y un tono corto, para los estados lógicos bajos (cero). Como la transmisión de un sonido generado por el comando “sound” del micro, no tenia manera de ser decodificada en el micro receptor, se emplea como solución a este tema, se envían pulsos de velocidad variable con el comando “serout” / “serin” (en el caso del receptor). Si bien, con DTMF en el receptor podemos decodificar los tonos que genera el comando “sound”, el proyecto de simplificar nuestro circuito, se alejaba mucho Veamos ahora la rutina de programación de nuestro microcontrolador para comprender aun más como funciona nuestra etapa procesadora – codificadora y moduladora:

Page 18: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

18

;****************************************** *************** ;********* DISEÑO TX DIGITAL TELEMETRICO ** ** ********* ;************** Desarrollado por Ing Martin Torres ************** ;****************************************** *************** estado: serout 4,n2400,(b0) if pin1=1 then tono_rapidoTX tono_lentoTX: b0=0 pulsout 2, 5000 pause 2000 goto estado tono_rapidoTX: b0=1 pulsout 2,5000 pause 500 goto estado ;********************************************** ******************* ;************************* FIN PROGRAMA ******* ***************** ;********************************************** ******************* Para el microcontrolador del equipo receptor, se implementa la siguiente rutina, la cual puede ser reformada a otras variables en ves de traducirlo como en este caso en un sonido que es captado en la salida del micro con un piezoeléctrico. Por ejemplo, si sustituimos los comando sound, por los comando High y o Low, podemos controlar los puertos de salida del microcontrolador, y así traducir el fenómeno de decodificación, por intermedio de una acción… ;************************************************* ********* ;********* DISEÑO RX DIGITAL TELEMETRICO * ************ ;************** Desarrollado por Ing Martin Torres ************** ;****************************************** **************** estado: serin 4,n2400,b0 if b0 =1 then tono_rapidoRX tono_lentoRX: sound 0,(80,20) pause 1000 goto estado

tono_rapidoRX: sound 0,(100,10) pause 250 goto estado ;********************************************** ******************* ;************************* FIN PROGRAMA ******* ***************** ;********************************************** *******************

Para el empleo de Señales entrantes analógicas: Para el caso de transmitir como dato, una señal entrante análoga, cambia un poco nuestro hardware de circuito, ya que hay que anexar unos cambios ligeros para mejorar nuestra modulación. Como eje principal de procesamiento y codificación, veamos lo mencionado anteriormente cuando dijimos que traduciríamos literalmente los estados lógicos altos con tonos largos, y los estados lógicos bajos, con tono cortos… Si empleamos esta base, podemos desarrollar nuestro propio sistema binario (dicho literalmente) para traducir los datos. Para ello, lo que haremos será convertir a una simple secuencia de tonos la variable leida en el puerto analógico de entrada; Donde los tonos largos significan decenas, y los tonos cortos unidades. Por ejemplo, si quisiéramos traducir el número “42”, el equipo generaría el tono modulador:

“Tono Largo – Tono Largo – Tono Largo – Tono Largo – Tono Corto – Tono Corto” Veamos ahora, la base de mi rutina, en la cual, mi amigo Stanley luego mejoro y le dio una función aun mas importante, como la de transmitir los datos obtenidos de un sensor de temperatura… En mi caso, la rutina de mi transmisor, es para visualizar el estado de llenado de un tanque por intermedio de transmisión de radiofrecuencia y a su ves, para poder ver en el mismo transmisor, el estado actual del nivel mediante un par de led que están colocados como escala lineal.

Page 19: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

19

;******************************************* **************** ; * DISEÑO TX Monitor Telemétrico Análogo para nivel en tanque con * ; ***** Visualización de estado mediante led en la misma placa TX ***** ;************** Desarrollado por Ing Martin Torres **************** ;****************************************** ***************** estado: wait 2 readadc 1,b0 goto nivel_tanque estado2: let pins = 0 sleep 1 let pins = 144 pause 500 b1= b0/10 b2= b0//10 if b0<10 then unidades if b0=0 then alerta_nivel_bajo decenas: for b3=1 to b1 sound 0,(100,50,0,50) next b3 unidades: if b2=0 then estado for b4=1 to b2 sound 0,(100,5,0,50) next b4 goto estado alerta_nivel_bajo: sound 0,(100,500) goto estado nivel_tanque: if b0 > 100 then nivel5 if b0 > 75 then nivel4 if b0 > 50 then nivel3 if b0 > 25 then nivel2 if b0 > 5 then nivel1 if b0 > 0 then nivel_bajo nivel_bajo: let pins = %0000 pause 500 let pins = %0001 pause 500 goto alerta_nivel_bajo nivel1:

let pins = 2 goto estado2 nivel2: let pins = 6 goto estado2 nivel3: let pins = 14 goto estado2 nivel4: let pins = 46 goto estado2 nivel5: let pins = 110 goto estado2 ;********************************************** ******************* ;************************* FIN PROGRAMA ******* ***************** ;********************************************** ******************* ;************ Desarrollado por Ing Martin Torre s *********************** ;********************************************** *******************

Como podrán ver, la simplicidad del programa no da mucho para hablar, ya que lo único que hacemos es leer la señal del puerto de entrada analogico1, guardamos ese dato dentro de la memoria b0 y luego, el programa interactúa mediante la comparación de esos datos almacenados, con los set y operaciones matemáticas. Dentro del mismo programa, podemos notar 3 sub rutinas importantes: 1_“nivel_tanque”, que es el encargado de comparar b0 con un set y dependiendo la respuesta, lo representa como resultado en los led indicadores de nivel. 2_“decenas” y “unidades”, que son los encargados de codificar el valor leído y almacenado en b0 y transformarlo en sonido. 3_ “estado” y “estado2”, son la columna vertebral del sistema, ya que además de tener todos los set y pre-set para la variable a tratar, también se encarga de controlar la modulación en el momento indicado. Ahora veamos la rutina de programación que diseño Stanley, que en si, es para un sistema mucho mas interesante que el propuesto anteriormente por mi persona. La rutina que a continuación van a ver, es la lógica para la transmisión de datos generados a raíz de la lectura de temperatura. Si bien, su diseño original fue realizado para que trabaje con un micro Picaxe 08, este funciona a la perfección en un micro de 18 pines.

Page 20: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

20

La idea de Stanley fue la de adquirir una medición de temperatura, mediante un sensor DS18B20. Este sensor tiene la característica de poder medir temperatura dentro de un rango de los -20ºC hasta 110ºC con una exactitud de 0,5ºC. Lo valores obtenidos por el sensor, son insertados en el puerto analógico del micro y por intermedio del comando “readtemp” transformamos esta variable en datos que e almacenaran en las distintas memorias del micro, para luego ser implementada por la lógica misma de la rutina del TX de Stan. Observen que tienen similitudes ambas rutinas, pero a diferencia, que la codificación de Stan, es mucho mejor, ya que sumo también la lectura de valores negativos, los cuales, además de traducirlos en sonido, también los transmite… ' -------------------------------------------------------------------------------------- 'b0 = direct Celsius temp value read from 3 lead DS18B20 temperature IC 'b1 = 10s values (heard as longer pulses ) obtained by integer division 'b2 = units value (shorter beeps up to 9 in value) by isolating remainder 'b3 = loop multiplier for 10s- thus 20 C will have 2 longer beeps 'b4 = loop multipier for units- so 17 C will have 1 long & 7 short beeps 'b5 = -ve temps subzero correcting factor 'b6 = -ve temps subzero loop multiplier to give "urgent" beeps '--------------------------------------------------------------------------------------- tempds: wait 2 'transmitter "tail" hold on to avoid click confusion with beeps low 2:low 4 'ensure ch.2 LED & ch.4 supply (to DS18B20) are both off sleep 2 'master delay -alter to suit (units 2.3 sec)for other intervals high 2: high 4 'turn on LED/LDR combo & also DS18B20 wait 1 'transmitter & DS18B20 settling time before reading sound 0,(95,3,0,3,100,3,0,3,105,3,0,3,110,3) ' warble alert pre data arrival wait 1 '1 sec pause to allow listener attention for data readtemp 1,b0 'Picaxe 08M (or perhaps 18X) command to read ch.1 DS18B20 if b0=0 then zero 'test if DS18B20 at zero Celsius (water freezing point) if b0>128 then subzero 'test for DS18B20 sensor subzero correction as b0 values >128 b1= b0/10 'divide original b0 temp to get 10s value b2= b0//10 'divide original b0 temp so remainder yields units value if b0<10 then units 'bypass tens sounds if temps below 10 Celsius 'debug 'suitable spot to note b0 etc variable values when fine tuning? tens: for b3=1 to b1 sound 0,(100,50,0,50) ' longer beeps for 10s. Thus 20 Celsius = 2 long beeps next b3 units: if b2=0 then tempds 'units nulling factor if temps are exact multiples of 10C for b4=1 to b2

sound 0,(100,5,0,50) 'shorter beeps for units, so 9 C = 9 short beeps next b4 goto tempds 'read sensor again zero: sound 0,(100,500) 'prolonged tone to indicate zero Celsius goto tempds 'read sensor again subzero: b5=b0-128 'correcting factor for DS18B20 when reading subzero for b6=1 to b5 sound 0,(120,5,0,50) 'more alarming 'frosty' beeps,since now below freezing ! next b6 goto tempds 'read sensor again

Imágenes de los dos prototipos: En mi caso, arme dos prototipos distintos. Uno donde la etapa transmisora esta en una placa totalmente independiente al resto de la otras etapas; y otro donde todas las etapas de nuestro equipo, están dentro de una misma placa. Tanto uno como el otro, me dieron las mismas conclusiones…funciona!!! … Para ambos prototipos, observen como esta conformada la antena y obviamente, la ubicación misma de esta. Les menciono esto, ya que las distancias entre estos componentes debe de ser mínima y lo mas lejos posible del microcontrolador y fuentes de ruido que puedan perjudicar el correcto funcionamiento de nuestro sistema.

Vistas varias del 1er TX (perdón por la desprolijidad):

Etapa transmisora en placa independiente y vista de la antena + Placa base de micro Picaxe 18 pines y

proyecto general terminado

NOTAS Finales para el proyecto TX-RX Telemetrico: Todos los

circuitos experimentales, están comprobados, y los resultados son satisfactorios. Como mencione al comienzo de este articulo; “No es un desarrollo con características comerciales”, pero que bien se adapta a propósitos hogareños.

La fuente de alimentación que implementaran, debe de ser perfecta obviando esos trafos de celulares u Family Games que suelen emplear para otros proyectos, ya que

Page 21: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

21

como verán, este es un equipo altamente delicado en cuanto a interferencias electromagnéticas y fuentes inestables Para el caso, si carecen de una fuente de alimentación segura, es preferible implementar una batería de 9V. La antena, si bien yo me arme una colita de chancho que no supera los 15cm., mi consejo es que implementen un alambre con un tamaño de 25cm, para tener mas alcance. El equipo receptor puede ser como en mi caso, un pequeño reproductor de mp3 con radio FM. Seleccione este ultimo, ya que mi reproductor además de estar tirado en un cajón son ser utilizado, tiene una función adicional que me suministra la banda de FM Japonesa (76Mhz – 90Mhz), que me vino como anillo al dedo. Las reformas del reproductor, es tan solo aplicarle un amplificador operacional 741, y una etapa de desacople y acondicionamiento para luego poder ser introducido en el microcontrolador que esta en el circuito del receptor. Aprovecho la ocasión para aclararle al Ing Lisofky (“Ing”), que si desea lucrar publicando material ajeno, debe de consultar primero a los autores del tema citando no solo los nombres de los comprometidos, si no que también, el correo electrónico. Por estas mismas avivadas, uno omite últimamente subir toda la info completa, ya que varios piolas no solo lucran con el tiempo de los demás, si no que también nos toman el pelo escondiéndose detrás de un magazine berreta. Por esta misma razón, en el ultimo ejemplo si bien les mencione que para el circuito debíamos realizar unas reformas del circuito original, solo cite la rutina del TX para el microcontrolador, omitiendo la rutina del RX y el diseño del circuito mas PCB del proyecto en general, ya que varios mal intencionados, son capaces de mandarse la parte y lucrar con el proyecto... Por tanto, para todos esos malintencionados, les dejo el trabajito de que se quemen las pestañas un poco si quieren lucrar con este proyecto y ver si usan la materia gris de ves en cuando para algo útil.

3- Transmisor y Receptor IR

Bien, hoy veremos como realizar un Control Infrarojo multiproposito... Como ya sabemos, los microcontroladores picaxe, tienen una función para emisión y recepción de datos por infrarrojos bajo el protocolo que trae el codigo IR de Sony. Lamentablemente, solo el micro picaxe 08 es el único que puede trabajar como emisor y receptor a la ves; y el resto de los micros, pueden trabajar solo como receptores... En esta ocasión, vamos a ver como podemos armar un control remoto de 10 teclas en base a un micro picaxe 08, y a su ves, como realizar otro proyecto de emisor y receptor IR con un micro picaxe 18A o X sin implementar el protocolo de Sony que solo tienen los 08... Arrancamos con el Emisor y receptor de IR, con micro Picaxe 08 Como podemos ver en el siguiente diagrama de circuito, nuestro pequeño hardware, es mas que sencillo, ya que en la entrada analogica del picaxe08, tenemos una seguidilla de resistencias que trabajan como divisores. Esto esta dispuesto asi, para poder darle un valor dado a cada pulsador en la entrada analógica...

Sin ir mas lejos, vamos a ver directamente la simplicidad de la rutina del micro

Page 22: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

22

;************* Ctrl IR 10 canales – Ing Martin Torr es ************* ;************************* TX-IR ****************** ******* Inicio: b1=0 low 1 readadc 4,b4 if b4 < 10 then bt0 if b4 < 126 then bt9 if b4 < 168 then bt8 if b4 < 190 then bt7 if b4 < 202 then bt6 if b4 < 211 then bt5 if b4 < 217 then bt4 if b4 < 222 then bt3 if b4 < 225 then bt2 if b4 < 228 then bt1 goto Inicio bt1: high 1 for b1 = 1 to 10 infraout 1,0 pause 45 next b1 goto Inicio bt2: high 1 for b1 = 1 to 10 infraout 1,1 pause 45 next b1 goto Inicio bt3: high 1 for b1 = 1 to 10 infraout 1,2 pause 45 next b1 goto Inicio bt4: high 1 for b1 = 1 to 10 infraout 1,3 pause 45 next b1 goto Inicio

bt5: high 1 for b1 = 1 to 10 infraout 1,4 pause 45 next b1 goto Inicio bt6: high 1 for b1 = 1 to 10 infraout 1,5 pause 45 next b1 goto Inicio bt7: high 1 for b5 = 1 to 200 infraout 1,6 pause 45 next b5 goto Inicio bt8: high 1 for b1 = 1 to 10 infraout 1,7 pause 45 next b1 goto Inicio bt9: high 1 for b1 = 1 to 10 infraout 1,8 pause 45 next b1 goto Inicio bt0: high 1 for b1 = 1 to 10 infraout 1,9 pause 45 next b1 goto Inicio '**********http://electroescuelavirtual.blogspot.com/******* '**********FIN DEL PROGRAMA***************

Page 23: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

23

La rutina para el receptor infrarrojo, seria esta: ;************* Ctrl IR 10 canales – Ing Martin Torr es ************* ;************************* RX - IR***************** ******* Inicio: low 0 low 1 low 2 low 4 low 5 low 6 low 7 low 8 infrain2 if infra = 0 then relay0 if infra = 1 then relay1 if infra = 2 then relay3 if infra = 3 then relay3 if infra = 4 then relay4 if infra = 5 then relay5 if infra = 6 then relay6 if infra = 7 then relay7 if infra = 8 then relay8 if infra = 9 then relay9 goto Inicio relay0: high 0 pause 20 goto Inicio relay1: high 1 pause 20 goto Inicio relay2: high 2 pause 20 goto Inicio relay3: high 3 pause 20 goto Inicio relay4: high 4 pause 20 goto Inicio

relay5: high 5 pause 20 goto Inicio relay6: high 6 pause 20 goto Inicio relay7: high 7 pause 20 goto Inicio relay8: high 8 pause 20 goto Inicio '**********http://electroescuelavirtual.blogspot.com/******* '**********FIN DEL PROGRAMA*************** '*************************************** Caramba...me faltan dos salidas para poder tener 10 canales... bueno, todo en la vida no se puede tener, asi que podemos darnos un poco de maña empleando una sola salida y un contador, o bien, emplear otro micro picaxe.... Bien, al inicio de este post, les comente que teniamos el problema de que solo los micros picaxe 08 podian trabajar como emisores. Como se que no es tan facil conseguir esto micros, u bien, quizaz no tengan ganas de comprar precisamente un micro de estos solo para armar un sencillo emisor IR; me sente a pensar de que otra manera podiamos armar un control IR sin el tedioso picaxe08... Un profesor en la universidad una ves me dijo: "para todo, hay tres formas de hacerlo... una es la sencilla, la otra la recomendada, y la ultima la mia"... es hasta el dia de hoy que me pregunto, si lo que quiso decirme es que hay que hacer las cosas con maña... en fin, dentro de la solución de como confeccionar este circuito sin el empleo del mini picaxe, se me ocurrió usar parte del proyecto que vimos anteriormente (el del transmisor de datos inalambrico).... Respetando las conexiones del teclado que les mostre anteriormente en un picaxe08, lo vamos a conectar en el puerto analogico del micro picaxe 18X y la rutina va a ser muy similar, pero lo que vamos a cambiar, son los comandos INFRAOUT, por el comando pulsout....

Page 24: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

24

4- Alarma GSM + Display LCD

Este sencillo proyecto experimental, tiene sus dos versiones, y nos muestra como realizar una sencilla alarma que monitoriza nuestros hogares y en caso de disparo, nos llama por teléfono. Como novedad, incluí un display LCD para poder ver el estado de la alarma con mensajes tales como: “Alarma Desactivada” “Alarma Activada” – “Monitoreando” “Disparo de Alarma” – “Call Police” Como podemos ver en la siguiente imagen, implemente los dos reglones y para darle un aspecto mas funcional, les incluí un scrolling entre mensaje y mensaje del 2do renglón…

Obviamente nuestro sistema no llama a la policía; Puse este mensaje en el display, para que cuando lo vea el intruso, se intimide un poco…. En si, como mencione anteriormente, el sistema nos llama a nuestro propio teléfono celular, donde configuramos previamente el número del sistema con el nombre de “ALARMA CASA”

Page 25: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

25

Veamos ahora la rutina de mi alarma:

;************************************************** ******* ;******* DISEÑO ALARMA GSM CON DISPLAY LCD ******** ;********** Desarrollado por Ing Martin Torres **** *********** ;************************************************** ******* ;* Notas: La siguiente rutina, presenta el control de un * ;* sistema de alarma GSM, que como novedad, tiene un LCD * ;* para ver y monitorear el estado de la alarma.Sumado a * ;* esto, tenemos la funcion de llamada telefonica cuando * ;* el unico sensor del sist. detecta y dispara la alarma * ;************************************************** ******* ;*******Veamos paso a paso la rutina de la alarma ******** ;************************************************** ******* ;EN ESTA SECCION CONFIGURAMOS LOS PINES DE ENTRADA Y SALIDA ;NO USAR B11-12-13 YA QUE SON DE USO INTERNO DEL PROGRAMA ;************************************************** ******* SYMBOL RS = 2 ; 0 = Command 1 = Data SYMBOL E = 3 ; 0 = Idle 1 = Active SYMBOL DB4 = 4 ; LCD Linea Dato 4 SYMBOL DB5 = 5 ; LCD Linea Dato 5 SYMBOL DB6 = 6 ; LCD Linea Dato 6 SYMBOL DB7 = 7 ; LCD Linea Dato 7 SYMBOL RSCMDmask = %00000000 ; Select Command register SYMBOL RSDATmask = %00000100 ; Select Data register SYMBOL get = b11 SYMBOL bite = b12 SYMBOL rsbit = b13 SYMBOL boton_activar = input7 ; renombramos entrada 7 como boton_activar SYMBOL z_1 = input1 ; renombramos entrada 1 como z_1 ;************************************************** ****** ;EN ESTA SECCION, ARMAMOS EL CUERPO PRINCIPAL DEL PROGRAMA ;************************************************** ****** GOSUB InitialiseLcd ;Mensaje de Inicio EEPROM 242,("Inicio Sistema") ;guarda la palabra en la posicion242 FOR get = 242 TO 255 ;cuenta letra por letra hasta llegar a 255 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 100 NEXT pause 1000 ctrl_LCD: GOSUB InitialiseLcd if boton_activar = 1 then msj_Alarma_Armada ;si esta en alto se activa

Page 26: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

26

if boton_activar = 0 then msj_Alarma_Desarmada ;si eta bajo esta desactivado goto ctrl_LCD zona_1: ;rutina para sensar if boton_activar =1 and z_1 =1 then msj_Disparo_Alarma ;activada+señal sensor se dispara return call_police: ;rutina para activar la accion llamada por telefono high 0 pause 1000 low 0 pause 1000 high 0 pause 1000 low 0 pause 7000 high 1 pause 1000 low 1 pause 2000 return ;************************************************** ********** ;********** Mensajes LCD para alarma desarmada ************** ;************************************************** ********** msj_Alarma_Desarmada: EEPROM 6,("Alarma Desarmada") ;guarda la palabra en la posicion6 FOR get = 6 TO 21 ;cuenta letra por letra hasta llegar a 21 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 NEXT Mensaje_2da_lineaA: bite = $C0 ;limpia y mueve el cursor a 2da linea GOSUB SendCmdBite MensajeA: EEPROM 208,("****************") ;guarda la palabra en la posicion 208 FOR get = 208 TO 223 ;cuenta letra por letra hasta llegar a 223 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 ;damos un pequeño delay para tener efecto scrolling NEXT pause 50 Mover_cursor_2da_lineaA: ;rutina para mover el cursor a la segunda linea bite = $C0

GOSUB SendCmdBite Mensaje_2da_lineaB: EEPROM 91,("Sistema Domotico") ;guarda la palabra en la posicion91 FOR get = 91 TO 106 ;cuenta letra por letra hasta llegar a 106 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 ;damos un pequeño delay para tener efecto scrolling NEXT Mover_cursor_2da_lineaB: ;rutina para mover el cursor a la segunda linea bite = $C0 GOSUB SendCmdBite Mensaje_2da_lineaC: EEPROM 225,("Desarrollado por") ;guarda la palabra en la posicion 225 FOR get = 225 TO 240 ;cuenta letra por letra hasta llegar a 240 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 ;damos un pequeño delay para tener efecto scrolling NEXT pause 50 Mover_cursor_2da_lineaC: ;rutina para mover el cursor a la segunda linea bite = $C0 GOSUB SendCmdBite Mensaje_2da_lineaD: EEPROM 107,("Martin A. Torres ") ;guarda la palabra en la posicion 107 FOR get = 107 TO 122 ;cuenta letra por letra hasta llegar a 122 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 150 ;damos un pequeño delay para tener efecto scrolling NEXT Mover_cursor_2da_lineaD: ;rutina para mover el cursor a la segunda linea bite = $C0 GOSUB SendCmdBite Mensaje_2da_lineaE: EEPROM 190,("****************") ;guarda la palabra en la posicion 190 FOR get = 190 TO 206 ;cuenta letra por letra hasta llegar a 206 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 ;damos un pequeño delay para tener efecto scrolling NEXT pause 50 goto ctrl_LCD

Page 27: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

27

;************************************************** ********** ;************* Mensajes LCD para alarma activada ************ ;************************************************** ********** msj_Alarma_Armada: gosub zona_1 ;ir a la rutina de sensado EEPROM 23,("Alarma Armada") ;guarda la palabra en la posicion 23 FOR get = 23 TO 35 ;cuenta letra por letra hasta llegar a 35 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 100 ;damos un pequeño delay para tener efecto scrolling NEXT Mover_cursor_2da_linea1: ;rutina para mover el cursor a la segunda linea bite = $C0 GOSUB SendCmdBite Mensaje_2da_linea2: EEPROM 125,("Monitoreando") ;guarda la palabra en la posicion 125 FOR get = 125 TO 136 ;cuenta letra por letra hasta llegar a 137 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 250 ;damos un pequeño delay para tener efecto scrolling NEXT pause 50 gosub zona_1 ;ir a la rutina de sensado goto ctrl_LCD ;************************************************** ********** ;********** Mensajes LCD para disparo de alarma ************* ;************************************************** ********** msj_Disparo_Alarma: EEPROM 37,("ATENCION DISPARO") ;guarda la palabra en la posicion 37 FOR get = 37 TO 51 ;cuenta letra por letra hasta llegar a 51 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase NEXT Mover_cursor_2da_linea3: ;rutina para mover el cursor a la segunda linea bite = $C0 GOSUB SendCmdBite Mensaje_2da_linea3: EEPROM 139,("Call Police") ;guarda la palabra en la posicion 139 FOR get = 139 TO 149 ;cuenta letra por letra hasta llegar a 149 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 250

NEXT pause 100 gosub call_police ;ir a rutina de llamada por telefono goto ctrl_LCD ;************************************************** ************** ;**** Rutina de control estandar del LCD - No Tocar ************* ;************************************************** ************** InitialiseLcd: FOR get = 0 TO 5 READ get,bite GOSUB SendInitCmdBite NEXT EEPROM 0,( $33 ) ; habilita lcd en 8-bit / 8-bit EEPROM 1,( $32 ) ; habilita lcd en 8-bit / 4-bit EEPROM 2,( $28 ) ; Formatea el Display EEPROM 3,( $0C ) ; Arranca el Display EEPROM 4,( $06 ) ; Mueve el cursor EEPROM 5,( $01 ) ; Limpia la pantalla RETURN SendInitCmdBite: PAUSE 15 ; retardo 15mS SendCmdBite: rsbit = RSCMDmask ; envia el comando de registro SendDataBite: pins = bite & %11110000 | rsbit ; Put MSB out first PULSOUT E,1 ; Give a 10uS pulse on E pins = bite * %00010000 | rsbit ; Put LSB out second PULSOUT E,1 ; Give a 10uS pulse on E rsbit = RSDATmask ; Send to Data register next RETURN ;************************************************** ******** ;************************* FIN PROGRAMA *********** ****** ;************ Desarrollado por Ing Martin Torres ** *************** ;************************************************** ********

Page 28: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

28

Vista de la modificación de mi teléfono celular Motorola C115 y Vista del BOX donde aloje el sistema Alarma GSM+LCD V1

Como sensor único (igualmente podemos anexar mas ya sea en serie, como en paralelo usando las entradas libres de nuestro Picaxe), implemente el detector de movimiento que adquirí en el desguace de una lámpara externa que tenia archivada… Como verán, con un poco de maña, pude optar por la opción de reciclar lo que ya tenía archivado y en desuso, sin la necesidad de tener que comprar mucho… Yo tengo fe que ustedes de seguro tendrán mejores ideas para implementar con este proyecto…

Las modificaciones del sistema, las dejo plenamente abierta a sus criterios y necesidades….

5- Detector RFDI multipropósito

Este proyecto experimental, no es un sistema que trabaje en un 100% con el protocolo de RFDI; En si, este proyecto implementa la base de ese sistema, para poder desarrollar nuestro propio sistema codificado de señales de radio frecuencia. En este caso, como es un sistema un tanto comercial y se que van a lucrar con el trabajo mío que a su ves, actualmente tengo un sistema muy similar patentado que corre bajo un micro ATMEL, solo me remito a darles los detalles del diagrama para armar el hardware y la explicación de cómo funciona mi sistema… el resto, corre por cuenta propia… Como transmisor, implemente tres pequeñas etiquetas recuperadas de los envases de Shampoo… Estas etiquetas, tienen un pequeño formato de bobina impresa, por lo tanto, no hay manera de confundirse. En la rutina de nuestro PICAXE18, implementamos los comandos serin y pulsout. Creamos un sub procedimiento para comparar los registros guardados por el comando serin, y los comparamos con unos valores pre-establecidos… Si la comparación es similar a un dato almacenado, en este caso en particular, se despliega un mensaje en el display LCD guardado en la eeprom… Si nos damos maña, agregando un Picaxe mas a este proyecto, ampliamos las salidas y agregamos un par de relay para manejar puertas u hacer cualquier otra acción, al detectar un código similar al que tengamos almacenados. La base de este desarrollo, lo encare en un principio de otra manera. Mi idea era crear un sistema de lectura de campos magnéticos, y según la medición, actuaba con su mensaje correspondiente en el display, y daba otras funciones mas, tales como aperturas de puertas, etc…. Si bien, en los principios de este desarrollo implementaba como transmisores de campos las pegatinas que nos dan en las pizzerías para colocar en nuestros refrigeradores; Tuve el problema que cortar estas en varios tamaños, no era muy cómodo, por tanto desistí esta idea que me había resultado extraordinaria por que funcionaba y su sencillez de hardware. Me senté a pensar un poco, y me dije: “por que no usar concretamente la base del sistema RFDI, pero con otra codificación y funcionalidad”… Tarde 6 meses, pero logre guardar en una sencilla bobina, datos tales como números de serie, nombre de la persona, edad, y otros datos adicionales… Obviamente, este sistema lo arme 1ero con un micro PICAXE28, luego lo propuse en un 18X, y finalmente, para poder patentar el sistema, lo arme con un micro ATMEL….

Page 29: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

29

El sistema en si, emite un serial de varios 1´s y 0´s, que son codificados por el micro. Esta información, es introducida en un PC con un software especialmente diseñado para este sistema, y guarda en los registros donde estuvo la persona con esta tarjeta de acceso, a que hora salió, donde entro, donde intento entrar y no tenia permisos, y en modo tiempo real, no dice donde se encuentra ubicado dentro del edificio. En paralelo a nuestro software, tenemos un 2do micro por cada puerta, donde lee la tarjeta que pide permiso para abrir la puerta; esta más que claro, que un 3er micro, se encarga de multiplexar toda esta información y mandarla al software… Este mismo sistema, lo fui modificando a otras necesidades y lo lleve a un sistema que aun esta en tramite de mejora de la 1era patente. Esta mejora, consiste en un check point de tránsito. Haciendo unos arreglos en nuestra bobina receptora, mas bien una gran modificación, podemos crear un visor de sucesos en un control policial que están por lo general en las rutas. Se preguntaran ¿Para que sirve esto?... Sencillo estimados amigos. En paralelo a este sistema, se tiene un software con una base de datos del registro nacional del automotor la cual es comparada con el ID del vehículo que pasa por el check point. En esa base de dato, están todos los datos del automotor y su propietario (pedido de captura – robado – multas – impuestos pagos - etc)… Si bien, el software esta en vía de proceso, con una pequeña base creada actualmente de 20 vehículos, esta funcionando a la perfección… Todo esto último se los menciono, para que vean que con estas bases e ideas y un poco de maña, pueden crear sus propios sistemas de control.

6- Ctrl. Servo mecanismo multipropósito Bien, este proyecto no tenia forma alguna, y principalmente, tenia ganas de sacarme la duda que eficiencia tenia el comando servo, ante un mecanismo de tal característica. Como 1er resultado en las pruebas montadas en un banco de calibración de instrumentos que tengo armado, no tuve buenos resultados con servo mecanismos industriales… Tenía un par de válvulas que trabajaban con estos protocolos, y lamentablemente no quiso dar brazo a torcer… Como mi duda seguía vigente, opte por ver que tenia tirado en el famoso rincón de los cacharros (ya no existe por que limpie todo) y me encontré con un pequeño servo en un viejo juguete que tenía tirado ahí hace rato... Como no tengo hijos, nadie va a extrañar la pequeña camioneta a radio control…

Tomando como ejemplo, las líneas de programación citadas anteriormente para este comando, note que tenía un pequeño bugs de grados, y esto se corrige sobre la marcha, osea cuando estamos realizando las pruebas 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 Como note que no era un comando el 100% eficiente, del cual no requiere de calibración; opte por hacer algo un poco mas elaborado para que nuestro sistema detecte si el servo no llega al final del recorrido… Actualmente, en los momentos

Page 30: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

30

libres, estoy en la plena creación de un algoritmo de control, que me de una auto regulación. Para ello, en ves de optar por usar un potenciómetro adherido en su eje de rotación, opte por implementar dos micro switch… un en cada extremo. La función de la rutina, es que cuando inicia, mueve el servo en ambas direcciones y los micro switch, detectan estos movimientos. En caso de no detectarlo, automáticamente salta a un sub procedimiento que tiene configurada la salida 7 para implementar un led o un Buzzer de error… Las conexiones del servo, son similares a las que plantea el manual oficial de Revolution Educations, pero a diferencia, que la fuente varia dependiendo el sistema. En mi caso, 9Vcc…

;************* Ctrl IR 10 canales – Ing Martin Torr es ************* ;************************* RX - IR***************** ******* Inicio_check: Pause1000 servo 4,75 ‘mueve el servo a la posición inicial 0 grados pause 1000 gosub check_0 pause 1000 servo 4,225 ‘mueve el servo a la posición final 180 grados gosub check_180 servo 4,75 ‘mueve el servo a la posición inicial 0 grados pause 1000 goto Inicio_trabajo Inicio_trabajo: readadc0, b1 if b1= 0 then cero_grados if b1 = 125 then noventa_grados if b1 = 255 then cientoochenta_grados goto Inicio_trabajo

cero_grados: servo 4,75 ‘mueve el servo a la posición inicial 0 grados pause 1500 ‘espera 1,5 segundos goto Inicio_trabajo servo 4,150 ‘mueve el servo a la posición central pause 1500 ‘espera 1,5 segundos goto Inicio_trabajo servo 4,225 ‘mueve el servo a la posición final 180 grados pause 1500 ‘espera 1,5 segundos goto Inicio_trabajo check_0: if input6 = 0 then error ‘si el micro switch no detecta el servo, salta a error return check_180: if input7 = 0 then error ‘si el micro switch no detecta el servo, salta a error return error: high 7 pause 1000 low 7 pause 1000 high 7 pause 1000 low 7 pause 1000 high 7 pause 1000 low 7 pause 1000 END '**********http://electroescuelavirtual.blogspot.com/******* '**********FIN DEL PROGRAMA********************* '************************************************** *

Page 31: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

31

7- Sensor de A-V multipropósito Bien, este proyecto, lo tenía a mal traer hacia ya bastante tiempo y no daba pie con tecla en cuanto al método de sensado, y sensor a emplear…. Como primer herramienta de sensado, implemente algunas partes de una pinza amperimétrica y anexe un TL082 (Amp. Op.)

Si bien, obtenía algunos valores raros, nunca llegaban a ser reales con las comparaciones efectuadas con un amperímetro en paralelo. Un día, ojeando la página de un conocido, a quien le atribuyo en un 100% este proyecto, vi que empleó en su desarrollo un pequeño sensor de efecto hall y un pequeño toroide… Opa, me dije… si eso fue lo primero que emplee y no me funciono…Donde esta el truco?... Acto seguido. Comencé a chequear la rutina que empleo en su proyecto, y prácticamente, descubrí en donde estaba mi error…El error estaba en el método en que yo había adoptado el toro con el sensor (Tienen que estar pegados, y no aproximados como yo lo hacia); ya que el resto de la base del programa, eran muy similares… Como no tenia ningún toroide a mano, buscando entre los cacharros tirados, me tope con uno que me estaba mirando de los lejos…

No dude en ningún momento en extraerlo, y artesanalmente cortar la parte inferior para pegarle el sensor de efecto hall. Este sensor, tiene que tener por característica, darnos una señal analógica proporcional al flujo del imán. Como cambios importantes en mi 1er hardware experimental, opte cambiar el TL082, por un 741 y este debe de estar lo más cercano al sensor y el conductor que alimenta y el conductor de datos de este sensor, debe de ser mallado para evitar interferencias que nos den lecturas erróneas. El sensor empleado, provee un voltaje aproximado de 2,5 – 2,7 voltios. Esto se amplifica en el Amp. Op hasta llegar a 3 voltios y ya tenemos nuestra señal acondicionada para introducirla en nuestro microcontrolador… El picaxe convierte este valor de lectura a un rango variable de 0 a 255, el cual, podemos acomodar a nuestro gusto, y configurar la ganancia para tener márgenes de lectura que nos faciliten la interpretación de mediciones.

SI miramos el diseño del circuito, es mas que sencillo y de fácil interpretación…

La rutina básica de control seria esta….

Page 32: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

32

;***** Sensor de corriente y tension multiproposito ****** ;****** http://electroescuelavirtual.blogspot.com/ ******* ;*** EN ESTA SECCION, CONFIGURAMOS LOS PINES DE SALIDA *** ;***************** Ing Martin Torres ************** ******* SYMBOL RS = 2 ; 0 = Command 1 = Data SYMBOL E = 3 ; 0 = Idle 1 = Active SYMBOL DB4 = 4 ; LCD Linea Dato 4 SYMBOL DB5 = 5 ; LCD Linea Dato 5 SYMBOL DB6 = 6 ; LCD Linea Dato 6 SYMBOL DB7 = 7 ; LCD Linea Dato 7 SYMBOL RSCMDmask = %00000000 ; Select Command register SYMBOL RSDATmask = %00000100 ; Select Data register SYMBOL get = b11 SYMBOL bite = b12 SYMBOL rsbit = b13 SYMBOL Amp = b4 ; lectura del sensor de Amperometrico SYMBOL Volt = b6 ; Lectura del sensor de Tension EEPROM 6,("V ") EEPROM 9,("A ") ;************************************************** ****** ;NO USAR B11-12-13 YA QUE SON DE USO INTERNO DEL PROGRAMA ;************************************************** ****** Menu_sensor: pause 500 gosub obtener_lecturas sertxd("<V=", #volt, ",A=", #Amp, ">") ' Visualizar en forma serial el dato en la PC b5 = Volt b4 = Amp b12 = 2 Gosub SendCmdBite gosub DisplayVolt FOR b11 = 6 TO 8 ' Display LCD "V" READ b11,b12 GOSUB SendDataBite NEXT gosub DisplayAmp FOR b11 = 9 TO 11 ' Display LCD "A" READ b11,b12 GOSUB SendDataBite next goto Menu_sensor

obtener_lecturas: readadc10 0,w0 let w0=w0 min 100 let w0=w0 max 355 Volt = w0 - 100 readadc10 1, w0 let w0=w0 min 300 let w0=w0 max 555 Amp = w0-300 return DisplayAmp: if Amp>128 then pos_amp if Amp<128 then neg_amp if Amp=128 then oamp goto d1 pos_amp: Amp=Amp-128 goto d1 neg_amp: b12=45 GOSUB SendDataBite Amp=128-Amp goto d1 oamp: Amp=0 goto d1 d1: b5=amp b10=b5/100 b12=b10+48 GOSUB SendDataBite b10=b10*100 b5=b5-b10 b10=b5/10 b12=b10+48 GOSUB SendDataBite b12 = 46 Gosub SendDataBite b10=b10*10 b5=b5-b10 b10=b5

Page 33: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

33

b12=b10+48 GOSUB SendDataBite Return DisplayVolt: b10=b5/100 b12=b10+49 GOSUB SendDataBite b10=b10*100 b5=b5-b10 b10=b5/10 b12=b10+48 GOSUB SendDataBite b12 = 46 Gosub SendDataBite b10=b10*10 b5=b5-b10 b10=b5 b12=b10+48 GOSUB SendDataBite Return ;************************************************** ***************** ;*******estas son las rutinas de control del lcd N-O T-O-C-A-R ******************* ;************************************************** ***************** InitialiseLcd: FOR get = 0 TO 5 READ get,bite GOSUB SendInitCmdBite NEXT EEPROM 0,( $33 ) ; habilita lcd en 8-bit / 8-bit EEPROM 1,( $32 ) ; habilita lcd en 8-bit / 4-bit EEPROM 2,( $28 ) ; Formatea el Display EEPROM 3,( $0C ) ; Arranca el Display EEPROM 4,( $06 ) ; Mueve el cursor EEPROM 5,( $01 ) ; Limpia la pantalla RETURN SendInitCmdBite: PAUSE 15 ; retardo 15mS SendCmdBite: rsbit = RSCMDmask ; envia el comando de registro SendDataBite: pins = bite & %11110000 | rsbit ; Put MSB out first PULSOUT E,1 ; Give a 10uS pulse on E

pins = bite * %00010000 | rsbit ; Put LSB out second PULSOUT E,1 ; Give a 10uS pulse on E rsbit = RSDATmask ; Send to Data register next RETURN ;************************************************** *************** ;************************* FIN PROGRAMA *********** ************* Bueno, anteriormente vimos la rutina básica de cómo manejar el sensor y luego manipular ese dato para verlo en nuestro display LCD… Ahora, lo que son las instrucciones mejoradas para el microcontrolador, ya sea para ete proyecto, como para los proyectos del “Detector de colores multipropósito”, y el “Ctrl. Domótico + IR / RF + Display LCD” me las reservo para compartir vía correo electrónico a quien este interesado verla; De paso, ya voy guardando sus correos para actualizarlos con nuevos artículos. Con este proyecto, mejore el aspecto de una pequeña fuente de laboratorio que tenia… Hasta nuestro próximo articulo…

Page 34: Articulo Torres PICAXE4

Microcontroladores Picaxe – Articulo Técnico nº 3 de 4 Autor: Ing. Martin A. Torres

34

Nota: El presente Artículo, solo tiene los permisos por mi personas para la publicación del contenido en el formato en que se encuentra (pdf), las siguientes paginas:

http://torreselectronico.com http://electroescuelavirtual.blogspot.com/

http://www.yoreparo.com http://www.canalplc.com

http://automatismosmdq.com http://www.clubdediagramas.com

http://www.ucontrol.com

La copia total o parcial y las modificaciones de tal documento, se las tomara como violación a los derechos del autor, y se tomaran las acciones legales correspondientes según lo establece las normas y leyes de cada país de residencia del autor del delito. Autor: Ing. Martin A. Torres Pida los permisos para publicar el artículo en su web al email: [email protected] Dedicado a estas personas por su grado y calidad de personas… Señor J.L. Villanueva M. Palazzesi Ariel Treser Lucas M. Lenin J. Vásquez Amd56 Ing. Duplá Héctor A. El profe “corriente continua” (Inda) Victor (Vicross) Jorge (Pato) Pinki y Cerebro (Silvio y Pablito) David (Pata) Pablo (Noxa) Señores directivos del Consejo de Educación Técnica Prov. Chubut – WebMaster, Moderadores y staff en gral de YoReparo.com /– WebMaster y staff en gral. infoPLC.com – a las paginas amigas CanalPlc.com / Carcasweb.com / AutomatismosMDQ.com / DTFM.com / Ucontrol.com / ElectronicaUnicrom.com / ComunidadElectronicos.com , Ayudaelectronica.com, solopicaxe.com y a mi familia por el esfuerzo y comprensión que me brindan ante mis proyectos y trabajos pese a todo malestar de salud y que me caiga del cielo como traba o prueba de vida.