Vous êtes sur la page 1sur 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

ndice:
Introduccin 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 prcticos de programacin: - Control de Display LCD - Ctrl. Servo mecanismo multipropsito - Sensor de Corriente multipropsito - Transmisor y Receptor Telemtrico - Transmisor y Receptor IR - Alarma GSM + Display LCD - Detector RFDI multipropsito - Detector de colores multipropsito - Ctrl. Domtico + IR / RF + Display LCD

Introduccin:
Bien en nuestros artculos anteriores vimos varios comandos bsicos 2 con sus respectivos ejemplos prcticos que por lo general los aplicamos a proyectos sencillos que no escapan de los ejemplos bsicos que podemos encontrar en el manual de programacin de estos microcontroladores. Luego dimos un breve paseo por el articulo de cmo 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 explicacin que encontramos en artculos y o manuales de Revolution Educations y por el problema de que algunos mdulos educativos (hardwares) que tienen a la venta esta empresa, o son caros o difciles 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 drums con programacin de alto nivel (assembly). Ahora veamos en las siguientes pginas:

La solucin de cmo mejorar nuestros proyectos y avanzar un paso mas en lo que respecta la programacin de esto micros
Autor: Ing. Martin A. Torres

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

eeprom
EEPROM {position},(dato) El comando eeprom, nos guarda datos en la memoria no voltil de nuestro microcontrolador. Dado que la EEPROM es una memoria no voltil, los datos permanecern intactos an sin alimentacin. Si se omite el valor opcional de la posicin de memoria, la primera declaracin se guarda en la direccin 0 de la EEPROM y las subsiguientes en las siguientes direcciones del mismo. Si se indica un valor de posicin, ste indica la direccin de comienzo para guardar los datos Posicin (Location): Es una constante numrica de 0 a 255 que especfica donde empezar a almacenar los datos en la EEPROM. Como mencionamos anteriormente, si no existe una posicin indicada, el almacenamiento contina a partir del ltimo dato introducido. Si inicialmente no se especific ninguna posicin el almacenamiento comienza en la 0. Dato (Data): Pueden ser constantes alfanumricas de hasta 256 caracteres. Cada carcter del valor numrico o palabras son almacenados en las posiciones de la eeprom que van desde la posicin 0 hasta la 255. Este comando y esta diversidad en la estructura fsica 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 ejecucin. De esta misma manera, logre armar una rutina con mas de 550 mensajes, pero sin ir mas lejos, veamos algunos ejemplos sencillos de cmo implementar este comando
Ejemplo: EEPROM 5, (10,20,30) guarda 10, 20, 30 a partir de la direccin 5 EEPROM 0, (Martin) guarda el valor ASCII a partir de 0

Osea que el almacenamiento quedara asi para el ejemplo EEPROM 0, (Martin) EEPROM 0 1 2 3 4 5 LETRA M a r t i n

En el caso de querer implementar el comando eeprom para guardar varios mensajes, 3 tenemos que recordar que cada letra es almacenada en una direccin especifica que se continan de la 1er direccin establecida SI nosotros queremos guardar otro mensaje, tenemos que tratar de que no ocupemos un espacio ya ocupado por otra palabra. Un mtodo sencillo, es ir anotando en una tabla como la superior, las letras y las distintas direcciones de la eeprom donde estn guardadas, ya que luego, para poder tener esas palabras, ejecutaremos comandos tales como fornext, los cuales usan los registros estos veamos un ejemplo mas claro, resumiendo una rutina que es empleada como mtodo 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

Nota: tomando el ejemplo de (Martin), Cuando guardamos una palabra en la direccin 0, no significa que la integridad de la palabra o frase esta guardada en ese espacio solamente. Como mencione anteriormente, el primer carcter o letra, se guarda en la direccin cero, y el resto de las letras o caracteres, son guardados en las direcciones que la continan (los espacios entre frases no cuentan)

(Recuerden que es un extracto de la rutina completa despus la veremos completa)

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

i2cslave
I2CSLAVE esclavo, velocidad, direccin 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/Dmdulos 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 direccin del esclavo i2c. Velocidad: Este valor, marca la velocidad de transmisin. Direccin: Este valor, establece el i2cbyte o i2sword, indicando la direccin donde comenzara a guardar la informacin. Despus 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 voltil, para que sean mantenidos an sin conexin de alimentacin. Tambin se utilizan para poder comunicarse con otros dispositivos con interface i2c, como sensores de temperatura y convertidores A/D. Direccin esclavo: La direccin del esclavo cambia para dispositivos diferentes (ver tabla inferior) del i2c. Para las EEPROM del tipo 24LCxx la direccin es %1010xxxx. Velocidad: La velocidad del bus i2c se selecciona a travs de los comandos i2cfast para velocidad de 400KHz y i2cslow para 100 KHz. Direccin control: Los 7 bits superiores del byte de control contienen el cdigo de control junto con la seleccin del chip e informacin adicional de direccin, 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 cdigo de control es %1010 y no se usa la seleccin de chip, por lo que el byte de control ser %10100000 $A0. Algunos formatos de control se pueden ver en la siguiente tabla:

Dispositivo
24LC01B 24LC02B 24LC04B 24LC08B 24LC16B 24LC32B 24LC64 DS1307 MAX6953 AD5245 SRF08 CMPS03 SP03

Capacidad
EE 128 EE 256 EE 512 EE 1k EE 2k EE 4k EE 8k RTC 5x7 LED Digital Pot Sonar Compass Speech

Direccin esclavo
%1010xxxx %1010xxxx %1010xxbx %1010xbbx %1010bbbx %1010dddx %1010dddx %1101000x %101ddddx %010110dx %1110000x %1100000x %1100010x

Velocidad
i2cfast i2cfast i2cfast i2cfast i2cfast i2cfast i2cfast i2cslow i2cfast i2cfast i2cfast i2cfast i2cfast

Tamao direccin
i2cbyte i2cbyte i2cbyte i2cbyte i2cbyte i2cword i2cword i2cbyte i2cbyte i2cbyte i2cbyte i2cbyte i2cbyte

4
El tamao de direccin enviado (byte o Word) viene determinado por el tamao de la variable usada. Si se usa una variable con tamao byte se enva una direccin de 8 bits. Si se enva una variable de tamao Word, se enva una direccin de 16 bits. Asegurarse de utilizar una variable apropiada al dispositivo a comunicar.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

readi2c
READI2C direccin, (variable,) Este comando, como mencionamos anteriormente, lee la direccin determinada en el dispositivo i2c y lo almacena en una variable establecida. Direccin (Location): Esta variable o constante, especifica la direccin mediante un byte del tipo Word la direccin del i2c. Variable(s): Este dato, establece donde se almacenan los byte(s) del dato ledo. Este comando se usa para leer los datos almacenados de un dispositivo i2c. Direccin o Location, define la direccin de inicio de la lectura de datos, aunque se logra tambin leer ms de un byte secuencialmente (si el dispositivo i2c da soporte a lecturas secuenciales). Direccin o Location debe ser un byte que defina al 12cslave. Un comando del 12cslave tiene que haberse ejecutado con anterioridad de la ejecucin del readi2c. Si el hardware del i2c no fue configurado de forma correcta o el byte de localizacin no es el adecuado el valor almacenado en la variable ser 255 ($FF) indicndonos un error. Ejemplo: Un ejemplo de cmo usar el time clock DS1307 los datos son enviados/recibidos en cdigo BCD coloca la direccin 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, adems 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 algn programa que realicemos en Vb. El comando sertxd, lo explicaremos a detalles como implementarlo, este mismo articulo n4

read
READ Direccin, variable Lee la EEPROM incorporada en la direccin, y guarda el resultado en una variable dada (b1-b2 w0 w1 - etc). Direccin o location: variable/constante que especifica la direccin mediante un byte. Variable: Dato elemental, para establecer donde se almacena el byte ledo. Al usar los mdulos Stamp, la forma de almacenar los datos es desde la posicin cero hacia arriba mientras que el almacenamiento de programa se construye hacia abajo desde la posicin 255. Al usar el PICAXE-08 y 18el almacenamiento de datos se construye hacia arriba desde la posicin 0y el almacenamiento de programa es hacia abajo desde la posicin 127. Ejemplo1: 5 Inicio1: readadc0, b1 Inicio2: for b2= 0 to 63 read b2,b3 gosub comparador2 serout 7,T2400,(b5) next b2 goto Inicio1

leer entrada analgica 0 y guardar dato en la variable b1 inicio el bucle lee el dato de la memoria en la posicin de b0 y almacena su valor en b1 en este sub programa, vamos a comparar los dos datos y el resultado lo almacenamos en b5 transmite el valor del dato de b5 al LCD utilizando transmisin serie

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 fsicas que no varan 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 pequeo firmware de control; Osea, no funciona en cualquier display de LCD

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

write
WRITE Direccin, valor Con este comando, podemos grabar valores en la EEPROM incorporada en el microcontrolador (eeprom interna), en una direccin especificada. El orden del registro guardado, es como explicamos anteriormente cuando ejemplificamos el comando eeprom, comienza en una direccin dada, y el resto de los caracteres son almacenados en los espacios que estn a continuacin, Con esto ultimo, hay que tener precaucin si queremos borrar y refrescar un valor dado en determinada posicin, ya que si nos equivocamos en la posicin de inicio del registro u donde termina, podemos borrar pedazos de otros datos Direccin: Es una variable o constante que especifica el byte de la direccin de memoria Valor: es una variable o constante que indica el valor del dato a escribir en la memoria Digamos a modo sinttico, este comando podemos emplearlo para refrescar datos guardados en un registro de memoria. Tengan en cuenta que la duracin de la grabacin 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

Se debe tener en cuenta que la mayora 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 ejecucin del comando i2cwrite. Si no se tiene en cuenta este tiempo de retardo en la grabacin 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 ningn 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 direccin 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 11 en formato BCD let hour =$11 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 habilitar salida a 1 Hz let control = %00010000 writei2c 0,(seconds, mins, tour, day, dat, month, year,control) end Ejemplo2: Inicio1: readadc0, b1 leer entrada analgica 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 anloga en la eeprom externa, y luego la leemos y visualizamos en nuestro depurador

writei2c
WRITEI2C Direccin, (variable,) Graba valores en un dispositivo externo con EEPROM, en una direccin especificada. Direccin: es una variable/constante que especifica el byte de la direccin 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 direccin define la direccin del inicio de los datos de escritura, cabe la posibilidad de escribir ms 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).

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

readowsn
READOWSN pin Este comando nos permite tener una lectura serie con cualquier dispositivo Dallas 1wire, 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 comunicacin (1-wire) que est conectado al PICAXE en una de sus pines (especificado por pin), por ejemplo, sensor digital de temperatura: DS18B20, reloj de precisin: DS2415, iButton: DS1990A (http://www.esicomsa.com/product_1.html). Al usar un dispositivo iButton cuyo nmero serie est grabado en el chip que contiene la envoltura del iButton y ejecutar el comando readowsn se realizar la lectura del nmero seie y guardar el cdigo indicador de la familia en b6, el nmero de serie en b7..b12 y la suma de verificacin en b13. Nunca deber utilizar los registros b6 a b13 para otros propsitos durante la ejecucin del comando readowsn. main: let b6 = 0 loop: readowsn 2 if b6 = 0 then loop debug b1 pause 1000 goto main

' restablecer el cdigo a cero ' leer el numero serie entrante por entrada 2 y lo guarda en b6 '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 ' e imprime los valores en el depurador

debug
DEBUG Var Visualiza la informacin contenida en la variable Var en la ventana del depurador durante la ejecucin. Var: variable con un valor previamente cargado Ejemplo: Inicio: debug b1 let b1 = b1+1 pause 500

Este sencillo dispositivo, en cierta oportunidad estaba limpiando gran parte de rezago que tenia archivado y lo nico que hacan en ese viejo rincn, 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 electrnica un code pass service y por ultimo (con algunas falencias pero funciono un par de veces), un codificador de datos wireless.

visualiza el valor de b1 incrementa el valor de b1 en una unidad espera de 0,5 segundos

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

sertxd
SERTXD ({#}data, {#}data ) Enva uno o ms conjunto de datos al pin de programacin, en formato Standard asncrono, 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 programacin, sin la necesidad de un MAX232, lo cual nos reduce a un simple cuadro como el que vemos en la parte inferior de esta seccin 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 parntesis (Hola). Ejemplo: inicio: for b0 = 0 to 10 read b0,b1 sertxd (Hola Martin) next b0 siguiente ciclo

pulsin
PULSIN pin, estado, variable Este comando, tiene como funcin observar el ancho de un pulso en un pin de entrada o salida determinado. Si la opcin estado tiene el valor cero, se mide el ancho de un pulso bajo. Si la opcin estado tiene el valor uno, se mide el ancho de un pulso alto. El ancho o duracin medida del pulso as sea con lgica negativo o positiva, se guarda en la variable que queramos establecer (b1,b2, etc). Si el flanco del pulso nunca se efecta, 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 medicin 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. 8 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 10s (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 resolucin 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 10s. Si se usa un oscilador de 20 MHz, el ancho de pulso tendr una resolucin de 2s. Definir un valor de OSC no tiene efectos sobre PULSIN. La resolucin 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

comienzo bucle leer valor y cargar en b1 transmite la palabra Hola Martin

En la seccin Ejemplos prcticos de programacin de este mismo articulo, veremos un empleo bastante didctico de este comando el cual, una ve que nos familiaricemos con este, vern que es un comando muy til que nos puede abrir las puertas a vario proyectos experimentales de comunicacin.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

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 Perodo: Esta variable o constante, especifica el tiempo o perodo (0-65535) en unidades de 10s (para un cristal de 4MHz) que tendr el pulso de salida. La resolucin de PULSOUT, al igual que PULSIN, depende de la frecuencia del oscilador. Si se usa un oscilador de 4 MHz, el perodo del pulso generado estar en incrementos de 10s. Si se usa un oscilador de 20 MHz, estos perodos tendrn una duracin de 2s. Definir un valor de OSC no tiene efectos sobre PULSOT. La resolucin 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 pause 20 goto inicio

serin
SERIN pin, baudmode, {#} variable, {#} variable Este comando es implementado para recibir uno o ms conjuntos de datos en un pin de entrada determinado en formato Standard asncrono, 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 Dato de Entrada Original Dato de Entrada Original Dato de Entrada Original Dato de Entrada Original Dato de Entrada invertido Dato de Entrada invertido Dato de Entrada invertido Dato de Entrada invertido

T2400 T1200 T600 T300/T4800 N2400 N1200 N600 N300/N4800

enva un pulso por el pin 4 de 1,5 ms de duracin pausa de 20 mS salta a inicio y repite formando un bucle

Al igual que lo mencionado con el comando anterior (PULSIN), estos dos comandos son ideales para comunicacin entre micros ya sea por intermedio de infrarrojos, radio frecuencia, y tambin, nos dan la solucin ideal para poder ampliar nuestras entradas digitales a un mximo 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 entraran al Picaxe, tienen sus propios osciladores, y en serie a la entrada, un pequeo 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

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 carcter 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 serin 6,T2400,b1 write b0,b1 next b0

comienzo bucle recibe serie de datos guarda valor en b1 siguiente ciclo

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

serout
SEROUT pin, baudmode,({#}data, {#}data ) Enva uno o ms conjuntos de datos en a un pin de salida, en formato Standard asncrono, 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:
T2400 T1200 T600 T300/T4800 N2400 N1200 N600 N300/N4800 OT2400 OT1200 OT600 OT300/OT4800 ON2400 ON1200 ON600 ON300/ON4800 BAUDMODE Dato de Salida Original Dato de Salida Original Dato de Salida Original Dato de Salida Original Dato de Salida invertido Dato de Salida invertido Dato de Salida invertido Dato de Salida invertido Dato de Salida Original Dato de Salida Original Dato de Salida Original Dato de Salida Original Dato de Salida invertido Dato de Salida invertido Dato de Salida invertido Dato de Salida invertido Siempre manejado Siempre manejado Siempre manejado Siempre manejado Siempre manejado Siempre manejado Siempre manejado Siempre manejado Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto Manejo libre o abierto

setint
SETINT input, mask Este til comando, nos genera una interrupcin en funcin de ciertas condiciones de entrada. La interrupcin es el mtodo ms rpido de atender a una peticin de paro del microcontrolador en funcin de condiciones determinadas. Es el nico tipo de interrupcin disponible en el sistema PICAXE y nos puede ser ideal para rutinas que requieren un watchdog mas rpido 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 interrupcin. Mask: es una variable/constante (75-225) que especifica la mscara. La mascara es la funcin que se tiene que cumplir para ejecutar la interrupcin. 10 El pin de interrupcin se comprueba entre la ejecucin de cada lnea de cdigo del programa y inclusive, durante cualquier orden de pausa. Si la condicin particular de entrada es cierta, un gosub para la subrutina de interrupcin se ejecuta inmediatamente. Cuando remata la ejecucin de la subrutina de interrupcin, el programa contina en la lnea siguiente desde donde se produjo la llamada a la interrupcin del programa principal. La condicin de entrada de interrupcin es cualquier patrn de 0 y 1 en el Terminal de entrada de interrupcin, enmascarado por el byte mask (mscara). 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 patrn de entrada es admitido en cualquier momento. Para desactivar la interrupcin ejecutar una orden SETINT con el valor 0 como byte de mscara. Notas:

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 parntesis..por ejemplo: (Hola). Ejemplo:
inicio: for b0 = 0 to 63 read b0,b1 serout 7,T2400,(b1) next b0 comienzo bucle leer valor y cargar en b1 transmite valor de b1 siguiente ciclo

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

1) Cada programa que usa la orden setint debe tener la correspondiente subrutina de interrupcin (termina con el correspondiente retorno al programa principal con return) al final del programa principal. 2) Cuando ocurre una interrupcin esta ser atendida inmediatamente quedando inhabilitada cualquier interrupcin del programa principal. Si se desease ejecutar nuevamente una interrupcin , esta deber programarse dentro de la subrutina de interrupcin en ejecucin. Queda claro que despus de ser atendida una interrupcin y ejecutar la subrutina asociada quedan habilitadas las peticiones de interrupcin del programa principal. 3) Si la condicin de interrupcin no es atendida dentro de la subrutina, una segunda llamada de interrupcin puede ocurrir inmediatamente. 4) Despus de ser ejecutado el cdigo de la subrutina de interrupcin, la ejecucin del programa contina en la siguiente lnea del programa principal. Si la interrupcin se produce durante la ejecucin de un comando pause, despus de la ejecucin de la subrutina de interrupcin y retorno al programa principal ignorar el tiempo que restaba de la ejecucin del comando pause y continuar en la lnea siguiente. Ejemplo: setint %10000000,%10000000 activa interrupcin 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 condicin indicada pause 2000 espera 2 segundos setint %10000000,%10000000 reactiva la interrupcin return termina la subrutina de interrupcin 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 interrupcin (pin 7 a nivel alto), reactivando de nuevo la interrupcin. A continuacin se muestra una variacin del anterior ejemplo: principal:

low 1 pause 2000 if pin7 = 1 then sw_on goto principal sw_on: high 1 if pin7 = 1 then sw_on pause 2000 return

conmuta la salida 1 a nivel bajo espera 2 segundos repite bucle principal conmuta la salida 1 a nivel alto salta a la subrutina sw_on hasta que se cumpla la condicin indicada espera 2 segundos termina la subrutina de interrupcin y retorna al programa principal

branch
BRANCH offset,(direccin0, direccin1.direccin N) 11 Causa que el programa salte a una posicin diferente, basada en una variable indexada. La etiqueta que especifica la direccin, debe estar en la misma etiqueta de la subrutina que contiene la instruccin BRANCH (al igual que FORNEXT). offset: es una variable/constante que especifica que direccin usar (0, 1n) 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.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

button
BUTTON Pin, Down, Delay, Rate, Bvar, Action, Etiqueta Este comando, me dio la solucin en varias oportunidades en las cuales la fuente me fallaba por ser muy sencilla y tener a su ves, una muy alta distorsin armnica en la lnea de alimentacin general por ser final de lnea en mi barrio. Si bien uno puede suponer con la teora que con una resistencia de 10k en la entrada o implementando optos podemos suprimir o acondicionar las seales entrantes, el tema esta en que cuando el problema raz surge desde nuestra fuente, por mas que hagamos intentos, vamos a tener problemas de lectura. Veamos como podemos realizar una entrada con proteccin 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 autoproteccin. 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 autorepeticin (0..255). Si es 0, no se efecta anti-rebote ni auto-repeticin. Si es 255 se eliminan rebotes, pero no auto-repeticin Rate: Valor de auto-repeticin (0..255) Bvar: Es la variable con tamao 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 perderamos 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 segn nuestras necesidades. Etiqueta: la ejecucin 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 elaboracin de un encoder, que implemente en un TACOMETRO digital de altas RPM que me regulaba el acelerador electrnico. 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 nmero de pulsos en un Pin, durante un perodo Period, y guada el resultado en Var. Pin Pin: debe ser una constante (0..7) una variable que contenga un nmero de 0 a 15 (p.ej. B0) un numero de pin Period: valor numrico (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 12 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 Enva 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 posicin 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 duracin) cada 20ms; Por consiguiente el comando servo 1,75 mover el servo a la posicin 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 posicin central. El comando servo no se puede usar al mismo tiempo que pwmout dado que comparten un contador comn.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

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 fabricacin de los servos todos los valores son aproximados y requieren un ajuste fino por experimentacin. Ejemplo: Inicio: servo 4,75 mueve el servo a la posicin inicial 0 grados pause 2000 espera 2 segundos servo 4,150 mueve el servo a la posicin central pause 2000 espera 2 segundos servo 4,225 mueve el servo a la posicin final 180 grados pause 2000 espera 2 segundos goto inicio salta a inicio y repite ciclo

13

Ejemplos prcticos de programacin:


Bien, vamos a darle un toque ms gustoso a nuestro artculo, y comenzaremos con la prctica, implementando la mayora de los comandos que vimos anteriormente. Para ello, reflotamos el 1er articulo de programacin con sistemas PICAXE y vemos como podemos armar nuestro circuito de prueba bsico de los micros de 18 pines, y de 8 tambien (implementen la opcin ZOOM para verlos expandidos, o bien, pueden obtenerlos del software PCB Wizard)

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

1- Control de Display LCD


A quien no le gustara mejorar sus proyectos con un display? Creo que a la gran mayora, por no decir todos, le gusta la idea; Pero como estan caros los mdulos seriales de picaxe, hay que ver la manera de como implementar cualquier tipo de display, si la necesidad de gastos elevados... En este pequeo ejemplo, les muestro como controlar un display Hitachi y o un sharp de 16x2. la interface de circuito, tendra las siguientes conexiones:

14

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 lneas de programacin. Yo, trate de simplificarles un poco las cosas, y a medida que vallan leyendo la rutina, vern que les adiciones los comentarios correspondientes a las lnea de mayor relevancia. Por i no recuerdan, los comentarios son las frases que estn despus de la lnea de programacin y preceden los smbolos ` y o ;. Recuerden que los comentarios, no cumplen ninguna funcin adicional en los programas

El diseo del PCB, podra ser este:

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;****** http://electroescuelavirtual.blogspot.com/ ******* ;EN ESTA SECCION, CONFIGURAMOS LOS PINES DE SALIDA ;***************** Ing Martin Torres *********************

SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL

RS =2 ; 0 = Command 1 = Data E =3 ; 0 = Idle 1 = Active DB4 =4 ; LCD Linea Dato 4 DB5 =5 ; LCD Linea Dato 5 DB6 =6 ; LCD Linea Dato 6 DB7 =7 ; LCD Linea Dato 7 RSCMDmask = %00000000 ; Select Command register RSDATmask = %00000100 ; Select Data register get = b11 bite = b12 rsbit = b13

;******************************************************** ;NO USAR B11-12-13 YA QUE SON DE USO INTERNO DEL PROGRAMA ;********************************************************

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

ctrl_LCD: GOSUB InitialiseLcd if input 0 = 1 then mensaje_dos if input 0 = 0 then mensaje_uno goto ctrl_LCD

; vamos a la rutina de inicializacin del LCD ; si la entrada 0 esta en bajo, ir al mensaje dos ; si la entrada 0 esta en alto, ir al mensaje uno

15 ;******************************************************************* ;*******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 ************************

;************************************************************ ;********* 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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

Bien, hasta ac, si copiamos y pegamos en nuestro software Programing editor de picaxe; veran que funciona a la perfeccin, 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

Como podrn ver en el siguiente diagrama, esta etapa esta compuesta por un sencillo oscilador en base a un solo transistor configurado en base comn, que produce la alta frecuencia. La bobina L1 y el capacitor variable (trimmer) C6 de 100pf, determinan la frecuencia de operacin; El dimetro 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 seleccin 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 propsito realimentar la seal entre el colector y el emisor, mientras que el capacitor C4, se encarga del desacoplamiento de la base. Las 16 resistencias R3 y R4, son las resistencias de polarizacin de la base de nuestro transistor.

2- Transmisor y Receptor Telemtrico


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 pequea orientacin al tema, y plantearles la base de un proyecto, para que ustedes la mejoren y o terminen. Este sencillo equipo telemtrico, 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 artculo, un artculo mas practico, que terico Quiero aclarar por si le pasa en la cabeza de algn chanta (chapucero), que los presentes circuitos experimentales, no son ideales para desempeo profesional u comercial, pero bien se adaptan a empleos del mbito casero.

Para la etapa moduladora, implemente un microcontrolador Picaxe, que a su ves, es tambin la etapa procesadora de nuestro sistema telemtrico. A continuacin, veremos el diagrama de nuestra etapa decodificadora procesadora y moduladora

Veamos la Base del circuito de nuestro proyecto Arranquemos por la etapa transmisora

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

Bien, como dije anteriormente, nuestro proyecto no esta limitado en cuento a hardware, por tanto, podemos tener las variantes de entrada analgica, o entrada digital. Hace un par de aos, me encontraba en la bsqueda y desarrollo de un sistema de codificacin 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 bsqueda de un sistema ms 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 seal, ya sea anloga, o digital. Si bien, la base que me despert de cmo atacar este tema me la dio mi amigo Stan Swan, tengo que aclarar, que despus de esto, me profundice aun mas en el tema, y logre desarrollar en conjunto con mi estimado amigo Stanley, el sistema de 17 codificacin 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 funcin, generar tonos que pueden ser implementados para generar melodas, u bien, en este caso, como propone Swan, implementarlos como datos especficos Veamos las diferentes maneras de codificacin de datos, segn entrada digital o anloga

Para el empleo de Seales entrantes digitales


Para el caso de transmitir como dato, una seal entrante digital, es mas que sencillo, ya que lo nico que haremos, ser traducir un uno lgico en un procedimiento, y un estado lgico cero, en otro procedimiento. Estos procedimientos, definen y codifican a la seal entrante con un tono largo, para el caso de los estados lgicos altos (uno); y un tono corto, para los estados lgicos bajos (cero). Como la transmisin de un sonido generado por el comando sound del micro, no tenia manera de ser decodificada en el micro receptor, se emplea como solucin a este tema, se envan 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 programacin de nuestro microcontrolador para comprender aun ms como funciona nuestra etapa procesadora codificadora y moduladora:

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 sabrn adaptar segn 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 analgicas y 3 digitales) y 8 salidas digitales que pueden ser transformadas a una salida analgica 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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;********************************************************* ;********* DISEO 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 ************************ ;*****************************************************************

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

Para el empleo de Seales entrantes analgicas:


Para el caso de transmitir como dato, una seal entrante anloga, cambia un poco nuestro hardware de circuito, ya que hay que anexar unos cambios ligeros para mejorar nuestra modulacin. Como eje principal de procesamiento y codificacin, veamos lo mencionado 18 anteriormente cuando dijimos que traduciramos literalmente los estados lgicos altos con tonos largos, y los estados lgicos 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 analgico de entrada; Donde los tonos largos significan decenas, y los tonos cortos unidades. Por ejemplo, si quisiramos traducir el nmero 42, el equipo generara el tono modulador:

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 piezoelctrico. 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 fenmeno de decodificacin, por intermedio de una accin
;********************************************************** ;********* DISEO 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 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 funcin 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 transmisin de radiofrecuencia y a su ves, para poder ver en el mismo transmisor, el estado actual del nivel mediante un par de led que estn colocados como escala lineal.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;*********************************************************** ; * DISEO TX Monitor Telemtrico Anlogo para nivel en tanque con * ; ***** Visualizacin 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 ************************ 19 ;***************************************************************** ;************ Desarrollado por Ing Martin Torres *********************** ;*****************************************************************

Como podrn ver, la simplicidad del programa no da mucho para hablar, ya que lo nico que hacemos es leer la seal del puerto de entrada analogico1, guardamos ese dato dentro de la memoria b0 y luego, el programa interacta mediante la comparacin de esos datos almacenados, con los set y operaciones matemticas. 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 ledo y almacenado en b0 y transformarlo en sonido. 3_ estado y estado2, son la columna vertebral del sistema, ya que adems de tener todos los set y pre-set para la variable a tratar, tambin se encarga de controlar la modulacin en el momento indicado. Ahora veamos la rutina de programacin que diseo Stanley, que en si, es para un sistema mucho mas interesante que el propuesto anteriormente por mi persona. La rutina que a continuacin van a ver, es la lgica para la transmisin de datos generados a raz de la lectura de temperatura. Si bien, su diseo original fue realizado para que trabaje con un micro Picaxe 08, este funciona a la perfeccin en un micro de 18 pines.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

La idea de Stanley fue la de adquirir una medicin de temperatura, mediante un sensor DS18B20. Este sensor tiene la caracterstica de poder medir temperatura dentro de un rango de los -20C hasta 110C con una exactitud de 0,5C. Lo valores obtenidos por el sensor, son insertados en el puerto analgico 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 lgica misma de la rutina del TX de Stan. Observen que tienen similitudes ambas rutinas, pero a diferencia, que la codificacin de Stan, es mucho mejor, ya que sumo tambin la lectura de valores negativos, los cuales, adems de traducirlos en sonido, tambin 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) next b3 units: if b2=0 then tempds 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

Imgenes de los dos prototipos:


En mi caso, arme dos prototipos distintos. Uno donde la etapa transmisora esta en una 20 placa totalmente independiente al resto de la otras etapas; y otro donde todas las etapas de nuestro equipo, estn dentro de una misma placa. Tanto uno como el otro, me dieron las mismas conclusionesfunciona!!! Para ambos prototipos, observen como esta conformada la antena y obviamente, la ubicacin misma de esta. Les menciono esto, ya que las distancias entre estos componentes debe de ser mnima 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 (perdn 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:

' longer beeps for 10s. Thus 20 Celsius = 2 long beeps

Todos los circuitos experimentales, estn comprobados, y los resultados son satisfactorios. Como mencione al comienzo de este articulo; No es un desarrollo con caractersticas comerciales, pero que bien se adapta a propsitos hogareos. La fuente de alimentacin que implementaran, debe de ser perfecta obviando esos trafos de celulares u Family Games que suelen emplear para otros proyectos, ya que

'units nulling factor if temps are exact multiples of 10C

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

como vern, este es un equipo altamente delicado en cuanto a interferencias electromagnticas y fuentes inestables Para el caso, si carecen de una fuente de alimentacin segura, es preferible implementar una batera 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 tamao de 25cm, para tener mas alcance. El equipo receptor puede ser como en mi caso, un pequeo reproductor de mp3 con radio FM. Seleccione este ultimo, ya que mi reproductor adems de estar tirado en un cajn son ser utilizado, tiene una funcin 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 ocasin 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 tambin, el correo electrnico. Por estas mismas avivadas, uno omite ltimamente subir toda la info completa, ya que varios piolas no solo lucran con el tiempo de los dems, si no que tambin nos toman el pelo escondindose detrs de un magazine berreta. Por esta misma razn, en el ultimo ejemplo si bien les mencione que para el circuito debamos realizar unas reformas del circuito original, solo cite la rutina del TX para el microcontrolador, omitiendo la rutina del RX y el diseo 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 pestaas 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 funcin para emisin y recepcin 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 ocasin, 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 21 Como podemos ver en el siguiente diagrama de circuito, nuestro pequeo 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 analgica...

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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;************* Ctrl IR 10 canales Ing Martin Torres ************* ;************************* 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 22 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***************

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

La rutina para el receptor infrarrojo, seria esta:


;************* Ctrl IR 10 canales Ing Martin Torres ************* ;************************* 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 23 '**********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 maa 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 maa... en fin, dentro de la solucin 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....

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

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 telfono. 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

24 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 rengln

Obviamente nuestro sistema no llama a la polica; 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 telfono celular, donde configuramos previamente el nmero del sistema con el nombre de ALARMA CASA

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;********************************************************* ;******* DISEO 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 ;********************************************************* 25

SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL

RS =2 ; 0 = Command 1 = Data E =3 ; 0 = Idle 1 = Active DB4 =4 ; LCD Linea Dato 4 DB5 =5 ; LCD Linea Dato 5 DB6 =6 ; LCD Linea Dato 6 DB7 =7 ; LCD Linea Dato 7 RSCMDmask = %00000000 ; Select Command register RSDATmask = %00000100 ; Select Data register get = b11 bite = b12 rsbit = b13 boton_activar = input7 ; renombramos entrada 7 como boton_activar z_1 = input1 ; renombramos entrada 1 como z_1

;******************************************************** ;EN ESTA SECCION, ARMAMOS EL CUERPO PRINCIPAL DEL PROGRAMA ;********************************************************

Veamos ahora la rutina de mi alarma:

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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

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+seal 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 pequeo 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 pequeo 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 26 READ get,bite ;lee el registro del conteo y GOSUB SendDataBite ;salta e imprime la frase pause 50 ;damos un pequeo 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 pequeo 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 pequeo delay para tener efecto scrolling NEXT pause 50 goto ctrl_LCD

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;************************************************************ ;************* 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 pequeo 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 pequeo 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 ************* ;************************************************************

NEXT pause 100 gosub call_police goto ctrl_LCD

;ir a rutina de llamada por telefono

;**************************************************************** ;**** Rutina de control estandar del LCD - No Tocar ************* ;****************************************************************

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

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 27 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 ***************** ;**********************************************************

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

Vista de la modificacin de mi telfono celular Motorola C115 y Vista del BOX donde aloje el sistema Alarma GSM+LCD V1

5- Detector RFDI multipropsito


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 seales de radio frecuencia. En este caso, como es un sistema un tanto comercial y se que van a lucrar con el trabajo mo 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 explicacin de cmo funciona mi sistema el resto, corre por cuenta propia Como transmisor, implemente tres pequeas etiquetas recuperadas de los envases de Shampoo Estas etiquetas, tienen un pequeo formato de bobina impresa, por lo 28 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 comparacin 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 maa, agregando un Picaxe mas a este proyecto, ampliamos las salidas y agregamos un par de relay para manejar puertas u hacer cualquier otra accin, al detectar un cdigo 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 magnticos, y segn la medicin, 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 pizzeras para colocar en nuestros refrigeradores; Tuve el problema que cortar estas en varios tamaos, no era muy cmodo, por tanto desist esta idea que me haba 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 codificacin y funcionalidad Tarde 6 meses, pero logre guardar en una sencilla bobina, datos tales como nmeros 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.

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 lmpara externa que tenia archivada Como vern, con un poco de maa, pude optar por la opcin de reciclar lo que ya tena archivado y en desuso, sin la necesidad de tener que comprar mucho Yo tengo fe que ustedes de seguro tendrn mejores ideas para implementar con este proyecto

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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

El sistema en si, emite un serial de varios 1s y 0s, que son codificados por el micro. Esta informacin, es introducida en un PC con un software especialmente diseado 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 ms que claro, que un 3er micro, se encarga de multiplexar toda esta informacin 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 trnsito. Haciendo unos arreglos en nuestra bobina receptora, mas bien una gran modificacin, podemos crear un visor de sucesos en un control policial que estn 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 vehculo que pasa por el check point. En esa base de dato, estn todos los datos del automotor y su propietario (pedido de captura robado multas impuestos pagos - etc) Si bien, el software esta en va de proceso, con una pequea base creada actualmente de 20 vehculos, esta funcionando a la perfeccin Todo esto ltimo se los menciono, para que vean que con estas bases e ideas y un poco de maa, pueden crear sus propios sistemas de control.

6- Ctrl. Servo mecanismo multipropsito


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 caracterstica. Como 1er resultado en las pruebas montadas en un banco de calibracin de instrumentos que tengo armado, no tuve buenos resultados con servo mecanismos industriales Tena un par de vlvulas que trabajaban con estos protocolos, y lamentablemente no quiso dar brazo a torcer Como mi duda segua vigente, opte por ver que tenia tirado en el famoso rincn de los cacharros (ya no existe por que limpie todo) y me encontr con un pequeo servo en un viejo juguete que tena tirado ah hace rato... Como no tengo hijos, nadie va a extraar la pequea camioneta a radio control

29

Tomando como ejemplo, las lneas de programacin citadas anteriormente para este comando, note que tena un pequeo 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 posicin inicial 0 grados pause 2000 espera 2 segundos servo 4,150 mueve el servo a la posicin central pause 2000 espera 2 segundos servo 4,225 mueve el servo a la posicin 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 calibracin; 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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

libres, estoy en la plena creacin de un algoritmo de control, que me de una auto regulacin. Para ello, en ves de optar por usar un potencimetro adherido en su eje de rotacin, opte por implementar dos micro switch un en cada extremo. La funcin 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, automticamente 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 Torres ************* ;************************* RX - IR************************

Inicio_check: Pause1000 servo 4,75 mueve el servo a la posicin inicial 0 grados pause 1000 gosub check_0 pause 1000 servo 4,225 mueve el servo a la posicin final 180 grados gosub check_180 servo 4,75 mueve el servo a la posicin 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 pause 1500 goto Inicio_trabajo servo 4,150 pause 1500 goto Inicio_trabajo servo 4,225 pause 1500 goto Inicio_trabajo check_0: if input6 = 0 then error return check_180: if input7 = 0 then 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

mueve el servo a la posicin inicial 0 grados espera 1,5 segundos mueve el servo a la posicin central espera 1,5 segundos mueve el servo a la posicin final 180 grados espera 1,5 segundos

si el micro switch no detecta el servo, salta a error si30 micro switch no detecta el servo, salta a error el

'**********http://electroescuelavirtual.blogspot.com/******* '**********FIN DEL PROGRAMA********************* '***************************************************

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

7- Sensor de A-V multipropsito


Bien, este proyecto, lo tena a mal traer hacia ya bastante tiempo y no daba pie con tecla en cuanto al mtodo de sensado, y sensor a emplear. Como primer herramienta de sensado, implemente algunas partes de una pinza amperimtrica y anexe un TL082 (Amp. Op.)

No dude en ningn momento en extraerlo, y artesanalmente cortar la parte inferior para pegarle el sensor de efecto hall. Este sensor, tiene que tener por caracterstica, darnos una seal analgica proporcional al flujo del imn. Como cambios importantes en mi 1er hardware experimental, opte cambiar el TL082, por un 741 y este debe de estar lo ms 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 errneas. 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 seal 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 mrgenes de lectura que nos faciliten la interpretacin de mediciones. 31 SI miramos el diseo del circuito, es mas que sencillo y de fcil interpretacin

Si bien, obtena algunos valores raros, nunca llegaban a ser reales con las comparaciones efectuadas con un ampermetro en paralelo. Un da, ojeando la pgina de un conocido, a quien le atribuyo en un 100% este proyecto, vi que emple en su desarrollo un pequeo sensor de efecto hall y un pequeo toroide Opa, me dije si eso fue lo primero que emplee y no me funcionoDonde esta el truco?... Acto seguido. Comenc a chequear la rutina que empleo en su proyecto, y prcticamente, descubr en donde estaba mi errorEl error estaba en el mtodo en que yo haba 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 ningn toroide a mano, buscando entre los cacharros tirados, me tope con uno que me estaba mirando de los lejos

La rutina bsica de control seria esta.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

;***** 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

32

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

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 ******************* ;*******************************************************************

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 bsica de cmo 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 multipropsito, y el Ctrl. Domtico + IR / RF + Display LCD me las reservo para compartir va correo electrnico a quien este interesado verla; De paso, ya voy guardando sus correos para actualizarlos con nuevos artculos. Con este proyecto, mejore el aspecto de una pequea fuente de 33 laboratorio que tenia Hasta nuestro prximo articulo

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

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

Nota: El presente Artculo, solo tiene los permisos por mi personas para la publicacin 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 violacin a los derechos del autor, y se tomaran las acciones legales correspondientes segn lo establece las normas y leyes de cada pas de residencia del autor del delito.
Autor: Ing. Martin A. Torres Pida los permisos para publicar el artculo en su web al email: torres.electronico@gmail.com

34

Dedicado a estas personas por su grado y calidad de personas


Seor J.L. Villanueva M. Palazzesi Ariel Treser Lucas M. Lenin J. Vsquez Amd56 Ing. Dupl Hctor A. El profe corriente continua (Inda) Victor (Vicross) Jorge (Pato) Pinki y Cerebro (Silvio y Pablito) David (Pata) Pablo (Noxa) Seores directivos del Consejo de Educacin Tcnica 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 comprensin 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.

Microcontroladores Picaxe Articulo Tcnico n 3 de 4

Autor: Ing. Martin A. Torres

Vous aimerez peut-être aussi