TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Trust en 19 de Marzo de 2007, 11:41:49
-
Hola, quiero aprender a enviar datos por RF usando Mikrobasic y he visto el ejemplo que sale en el programa que es este:
program RF_TX
dim i as byte
dim msg as string[20]
main:
msg = "mikroElektronika"
PORTB = 0 ' Initialize port
TRISB = %00001110
ClearBit(INTCON, GIE) ' Disable interrupts
Man_Send_Init(PORTB) ' Initialize Manchester sender
while TRUE
Man_Send($0B) ' Send start marker
Delay_ms(100) ' Wait for a while
for i = 1 to Strlen(msg)
Man_Send(msg[i]) ' Send char
Delay_ms(90)
next i
Man_Send($0E) ' Send end marker
Delay_ms(1000)
wend
end.
En este ejemplo, que pin del portb utiliza para enviar los datos?
Creo que utiliza el pin portb,0
¿Como se tendria que hacer para enviar por el pin portb,5?
Saludos
-
Que tal Trust,
Efectivamente como lo mencionas la transmicion de datos se efectua por el pin RB0, y si quieres realizar el envio por el pin RB5, simplemente agrega:
Man_Send_Config(PORTB,5)
Saludos.
Elreypic.
-
Hola elreypic, muchas gracias por tu ayuda.
Ahora voy a cambiar el programa que sale en la ayuda de Mikrobasic que es de un receptor de RF, para que cuando el emisor emita por ejemplo la palabra Mikroelektronica que sale en el programa emisor entonces el receptor encienda un led.
Voy a probar si soy capaz de hacerlo sino me sale, pues posteare aqui el codigo para que me ayudeis.
Saludos.
-
Hola, he probado a compilar el codigo sobre RF que hay en la ayuda de Mikrobasic y me da error al compilar, no compila y aparece la linea en rojo. La segunda linea es la que me sale en rojo:
dim error, ErrorCount, temp as byte
El codigo del ejemplo es el siguiente:
program RRX
dim error, ErrorCount, temp as byte
main:
ErrorCount = 0
TRISB = 0
CMCON = 7
' VRCON = 0 ' Uncomment the line for PIC16
Lcd_Init(PortB) ' Initialize LCD on PORTB
Lcd_Cmd(LCD_CLEAR)
Man_Receive_Config(PORTA,3) ' Configure and synchronize receiver
while true
Lcd_Cmd(LCD_FIRST_ROW)
while true ' Wait for the start marker
temp = Man_Receive(error)
if temp = $0B then
break
end if ' We got the starting sequence
if error then ' Exit so we do not loop forever
break
end if
wend
do
temp = Man_Receive(error) ' Attempt byte receive
if error = true then
Lcd_Chr_Cp(63) ' ASCII for "?"
Inc(ErrorCount)
if ErrorCount > 20 then
Man_Receive_Init(PORTA)
' alternative:
' temp = Man_Synchro
ErrorCount = 0
end if
else
if temp <> $0E then ' Don't write the end marker on LCD
Lcd_Chr_Cp(temp)
end if
Delay_ms(20)
end if
loop until temp = $0E ' Wait for the end marker
wend
end.
He buscado en el google informacion de programacion en Mikrobasic de modulos de radiofrecuencia y he encontrado poca informacion y no me ha quedado nada claro. Os pongo un enlace en italiano de alguien que tiene un problema sobre RF.
Foro Mikrobasic Italiano (http://www.fareelettronica.it/forum_messaggi.asp?fid=13&aid=6487&sspi=bef83724a7a350aa45e24f5cc1cc1813&light=&raid=6668)
Saludos.
-
Hola aqui en el foro y especialmente con respecto a la radiofrecuencia optamos por hacerlo via serial con los modulos de LAIPAC. Tomando los bugs de MKB yo optaria por hacerlo de esa manera: serialmente.
-
El error está en la variable "error" justamente , jeje.
No puedes asignarle el nombre "error" a una variable pues es una palabra reservada del compilador del mkb.
Lo único que debes hacer es cambiarle el nombre "error" por "error2" o el que te guste , yo le puse "error1" y funcionó perfectamente , si te fijas bien en el editor del mkb , verás que en dim error , ErrorCount, temp as byte , error está en azul , es palabra reservada , no la puede usar como nombre de variable.
dim error1, ErrorCount, temp as byte
main:
ErrorCount = 0
TRISB = 0
CMCON = 7
' VRCON = 0 ' Uncomment the line for PIC16
Lcd_Init(PortB) ' Initialize LCD on PORTB
Lcd_Cmd(LCD_CLEAR)
Man_Receive_Config(PORTA,3) ' Configure and synchronize receiver
while true
Lcd_Cmd(LCD_FIRST_ROW)
while true ' Wait for the start marker
temp = Man_Receive(error1)
if temp = $0B then
break
end if ' We got the starting sequence
if error1 then ' Exit so we do not loop forever
break
end if
wend
do
temp = Man_Receive(error1) ' Attempt byte receive
if error1 = true then
Lcd_Chr_Cp(63) ' ASCII for "?"
Inc(ErrorCount)
if ErrorCount > 20 then
Man_Receive_Init(PORTA)
' alternative:
' temp = Man_Synchro
ErrorCount = 0
end if
else
if temp <> $0E then ' Don't write the end marker on LCD
Lcd_Chr_Cp(temp)
end if
Delay_ms(20)
end if
loop until temp = $0E ' Wait for the end marker
wend
end.
Este código me ha compilado sin problemas.
Saludos a todos.
-
Hola, muchisimas gracias a todos por vuestra ayuda. :-)
Hoy si tengo tiempo lo probare, ya tenia muchas ganas de aprender a usar los modulos de RF.
Saludos.
-
Hola he estado probando el ejemplo cambiando "error" por "error1", he tenido que quitar CMCON=7 porque me da error al compilar. No he conseguido que me funcione.
He probado a hacerlo serialmente y tampoco me ha funcionado.He probado programas muy sencillos en Mikrobasic, no se que he puesto mal o si falta algo en el codigo.
program Transmisor
trisb=0
'El pin TX es portb,5
main:
soft_uart_init (portb,4,5,2400,0)
soft_uart_write("1")
goto main
end.
program Receptor
Dim dato_recibido, dato as byte
trisc=%01000000
trisb=0
'El pin RX es portc,6
main:
soft_uart_init(portc,6,7,2400,0)
dato_recibido=soft_uart_read(dato)
lcd_config(portb,7,6,5,4,portb,2,3,1)
lcd_cmd(lcd_clear)
lcd_cmd(lcd_cursor_off)
if dato_recibido="1" then
lcd_out(2,1,"recibido")
else
lcd_out(1,1,"nada")
end if
goto main
end.
En el lcd me sale "nada".
Tambien he probado a enviar y recibir en vez de "1", 1 sin comillas, "a" con comilla y a sin comillas. Con los cambios que he probado me ha seguido sin funcionar.
Espero la ayuda de este grandisimo foro. He buscado en muchos foros de habla castellana e inglesa y no he encontrado nada claro.
Saludos.
-
Lo de los registros metelos en la rutina MAIN por ejemplo CMCON TRIS y usa otra etiqueta para la rutina que usas. Y mira este codigo (http://www.todopic.com.ar/foros/index.php?topic=13762.msg91973#msg91973) para enviar los datos quizas te sirva para recibirlos.
-
Hola a todos, Navaismo he probado el codigo que me has puesto y no me funciona. Puede que tenga mal el programa del receptor pero, no se que es lo que hago mal.
Agradeceria mucho que alguien revisara el codigo RF por comunicacion serial que puse anteriormente. Si alguien tiene algun ejemplo muy sencillo que le funcione, lo podrian poner?
Saludos.
-
Veo que ni el programa que puse, entonces verifica que lo programes bien y lo conectes bien, ponnos un esquema de como lo conectas porque el ejemplo que te puse si funciona. Yo lo comprobe.
Para RF tenemos en ejemplos pero en PBP
-
Hola, ya me funciona la comunicacion serial, de pic a pic va perfecto pero usando los modulos RF me aparecen cosas raras en el lcd.
Creo que es porque tengo que hacer una ritina CRC.
Voy a probar a ver como me sale.
Saludos.
-
Puedes enviar primero un Acuse osea un dato que despierte al receptor y al micro y despues de eso los datos. Tambien checa el fornato de los datos.