Está en la página 1de 13

Comunicación Serial Picaxe-18X a Picaxe-18X

« : Agosto 23, 2010, 01:03:02 »

Hola Buenas Tardes!


aqui les dejo un pequeño ejemplo de como 2 piaxe serie 18X se
comunican entre ellos y mandan la funcion.
el ejemplo es muy sencillo, el primer picaxe por medio de un boton
conectado en IN0, manda un dato por la salida OUT0, que recive el
segundo picaxe serie 18X, por la entrada IN0 y al recivier comprueba el
dato y prende un Led conectado en la salida OUT0.

piaxe Emisor
===============================
main:
b1 = 0
inicio: if pin0 = 1 then enviar
b0 = 0
goto inicio

enviar: if b0 = 0 then
b0=1
goto salida1
else
goto inicio
endif

salida1:if b1 = 0 then
serout 0,T2400,("A")
b1 = 1
goto inicio
else
serout 0,T2400,("B")
b1 = 0
goto inicio
endif
el Emisor mada 2 datos con el mismo boton, cuando manda el Primer
dato("A"), Prende el led del picaxe recepto.
y cuando manda el segundo dato("B"), Apaga el led del picaxe receptor.
Ademas se agrego una Bandera(B0), la cual nos sirve para que el
emisor mande el dato, y aun que permanesca oprimido el boton no
mandara mas datos, hasta que se suelte el boton y se oprima
nuevamente.
y tambien se añadio una variable para el estado del el dato(B1), asi
cuando se oprime el boton, si esta prendido el led se apaga, y si esta
apagado se prende.

piaxe Receptor
===============================
main:
inicio: serin 0,T2400,b0
if b0 = "A" then prender
if b0 = "B" then apagar

prender:high 0
goto inicio
apagar: low 0
goto inicio

El receptor es mas simple, la variable b0 recive el dato y despues se


compreba el dato que se envio, si recivio "A" se prende el led, si recivio
"B" se apaga, y asi sucesivamente.

Bueno espero que les sirva aun que es sencillo, pero se pueden hacer
varias aplicaciones.
aqui le mando unas imagenes de como funciona en el Proteus!,
Cuidence y Suerte.

Prog

;*********************************************************
;*********** Laboratorio PICAXE DISPLAY LCD **************
;********** Desarrollado por Ing Martin Torres ***********
;*********************************************************
;*Notas: La siguiente rutina, presenta el ejemplo nº1 del*
;* control de un LCD 16x2 en modo 4 bits
;*********************************************************
;*******Veamos paso a paso la rutina ********
;*********************************************************
;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
SYMBOL RSDATmask = %00000100
SYMBOL get = b11
SYMBOL bite = b12
SYMBOL rsbit = b13

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

ctrl_LCD:
GOSUB InitialiseLcd

EEPROM 6,("Lab Ucontrol") ;guarda la palabra en la posicion6 hasta


llegar a la posicion 21
FOR get = 5 TO 21 ;cuenta hasta 21
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 25,("Ing MartinTorres") ; guardamos la palabra en la posicion 25
hasta la 39
FOR get = 25 TO 41 ; cuenta hasta 41 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

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

FOR get = 0 TO 5
READ get,bite
GOSUB SendInitCmdBite
NEXT

EEPROM 0,( $33 ) ; %0011---- %0011---- 8-bit / 8-bit


EEPROM 1,( $32 ) ; %0011---- %0010---- 8-bit / 4-bit
EEPROM 2,( $28 ) ; %00101000 %001LNF00 Formato Display
EEPROM 3,( $0C ) ; %00001100 %00001DCB Display On
EEPROM 4,( $06 ) ; %00000110 %000001IS Mueve Cursor
EEPROM 5,( $01 ) ; Limpia pantalla
RETURN

SendInitCmdBite:
PAUSE 15 ; Retardo 15mS

SendCmdBite:
rsbit = RSCMDmask

SendDataBite:
pins = bite & %11110000 | rsbit
PULSOUT E,1
pins = bite * %00010000 | rsbit
PULSOUT E,1
rsbit = RSDATmask
RETURN

;*****************************************************************
;*****************************************************************
;************************* FIN PROGRAMA **************************
;*****************************************************************
;*****************************************************************
;************ Desarrollado por Ing Martin Torres *****************
;*****************************************************************
;*****************************************************************
;********* http://electroescuelavirtual.blogspot.com/ ************
;********* http://www.automatismos-mdq.com.ar/blog/ **************
;********* http://torreselectronico.com/ *************************
;********* http://www.Ucontrol.com.ar/ ***************************
;********* http://www.YoReparo.com/ ******************************
;*****************************************************************
;*****************************************************************

Segim

;*********************************************************
;*********** Laboratorio PICAXE DISPLAY 7 SEGMENTOS******************
;********** Desarrollado por Ing Martin Torres *******************
;*********************************************************
;*Notas: La siguiente rutina, presenta el ejemplo nº2A para*
;* el control básico de un Display de 7 segmentos
;*********************************************************
;*******Veamos paso a paso la rutina ********
;*********************************************************
for b1 = 0 to 9
let pins=b1
pause 1000
next b1

;***************************************************************
;************************* FIN PROGRAMA **************************
;***************************************************************
;************ Desarrollado por Ing Martin Torres
*************************
;***************************************************************
;********* http://electroescuelavirtual.blogspot.com/
**********************
;********* http://www.automatismos-mdq.com.ar/blog/ ********************
;********* http://torreselectronico.com/ *******************************
;********* http://www.Ucontrol.com.ar/ *******************************
;********* http://www.YoReparo.com/ ********************************
;***************************************************************
;***************************************************************

Rer

;*********************************************************
;*********** Laboratorio PICAXE DISPLAY 7 SEGMENTOS******************
;********** Desarrollado por Ing Martin Torres *******************
;*********************************************************
;*Notas: La siguiente rutina, presenta el ejemplo nº2A2 mencionando otra
manera***
;* para el control básico de un Display de 7 segmentos
**********************
;*********************************************************
;*******Veamos paso a paso la rutina ********
;*********************************************************
let pins = 9 ' %00001001 en display numero 9
pause 1000
let pins = 8 ' %00001000 en display numero 8
pause 1000
let pins = 7 ' %00000111 en display numero 7
pause 1000
let pins = 6 ' %00000110 en display numero 6
pause 1000
let pins = 5 ' %00000101 en display numero 5
pause 1000
let pins = 4 ' %00000100 en display numero 4
pause 1000
let pins = 3 ' %00000011 en display numero 3
pause 1000
let pins = 2 ' %00000010 en display numero 2
pause 1000
let pins = 1 ' %00000001 en display numero 1
pause 1000
let pins = 0 ' %00000000 en display numero 0
pause 2000
;*****************************************************************
;************************* FIN PROGRAMA **************************
;*****************************************************************
;************ Desarrollado por Ing Martin Torres *****************
;*****************************************************************
;*****************************************************************
;********* http://electroescuelavirtual.blogspot.com/ ************
;********* http://www.automatismos-mdq.com.ar/blog/ **************
;********* http://torreselectronico.com/ *************************
;********* http://www.Ucontrol.com.ar/ ***************************
;********* http://www.YoReparo.com/ ******************************
;*****************************************************************
;*****************************************************************

Cuar

*********************************************************
;*********** Laboratorio PICAXE DISPLAY 7 SEGMENTOS******************
;********** Desarrollado por Ing Martin Torres *******************
;*********************************************************
;*Notas: La siguiente rutina, presenta el ejemplo nº2B para*
;* la monitorizacion de la lectura analoga, en un Display de 7 segmentos
;*********************************************************
;*******Veamos paso a paso la rutina ********
;*********************************************************
main:
readadc 0,b1
if b1 > 150 then show9
if b1 > 130 then show8
if b1 > 110 then show7
if b1 > 90 then show6
if b1 > 70 then show5
if b1 > 50 then show4
if b1 > 30 then show3
if b1 > 20 then show2
if b1 > 10 then show1
show0:
let pins = 0 ' %00000000 en display numero 0
goto main
show1:
let pins = 1 ' %00000001 en display numero 1
goto main
show2:
let pins = 2 ' %00000010 en display numero 2
goto main
show3:
let pins = 3 ' %00000011 en display numero 3
goto main
show4:
let pins = 4 ' %00000100 en display numero 4
goto main
show5:
let pins = 5 ' %00000101 en display numero 5
goto main
show6:
let pins = 6 ' %00000110 en display numero 6
goto main
show7:
let pins = 7 ' %00000111 en display numero 7
goto main
show8:
let pins = 8 ' %00001000 en display numero 8
goto main
show9:
let pins = 9 ' %00001001 en display numero 9
goto main
;*****************************************************************
;*****************************************************************
;************************* FIN PROGRAMA **************************
;*****************************************************************
;*****************************************************************
;************ Desarrollado por Ing Martin Torres *****************
;*****************************************************************
;*****************************************************************
;********* http://electroescuelavirtual.blogspot.com/ ************
;********* http://www.automatismos-mdq.com.ar/blog/ **************
;********* http://torreselectronico.com/ *************************
;********* http://www.Ucontrol.com.ar/ ***************************
;********* http://www.YoReparo.com/ ******************************
;*****************************************************************
;*****************************************************************

5
**** Sensor de corriente y tension multiproposito ******
;****** http://electroescuelavirtual.es.tl/ *******
;****** http://www.ucontrol.com.ar/ *******
;*** 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
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 ************************

;********** http://electroescuelavirtual.es.tl/ *********


;************* http://www.ucontrol.com.ar/ ****************
;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 ************************

También podría gustarte