TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Dochapu en 21 de Septiembre de 2010, 13:04:49
-
Saludos, un gusto escribir una vez mas aca, soy nuevo en esto de las transmisiones vía radiofrecuencia, les comento que estoy realizando un proyecto con un sensor de temperatura cuya lectura se visualizará en un lcd via rf.
En el siguiente circuito que adjunto uso el conversor a/d del pic16f877a para visualizar la lectura en en lcd1 de ese pic y funciona correctamente, pero cuando deseo visualizarlo en el receptor (pic 16f628a) no me muestra lectura alguna, para la transmisión uso unos modulos a 315Mhz (adjunto el datasheet) y el codificador y decodificador ht12e/ht12d, he comprobado que el modulo funciona correctamente he probado transmitiendo 1 bit y efectivamente recibe correctamente el dato que envio, mi problema es el siguiente:
Conecto el pin 39 del pic 16f877a a mi entrada del encoder(pin10), conecto la salida del decoder (pin10) al pin asignado para la recepcion de datos porta.0 del pic 16f628a(pin17), pero no logro visualizar el dato que envio , y bueno en ese mismo instante para comprobar nuevamente el estado de transmisión pruebo transmitiendo bits y efectivamente hay transmision y recepción sin embargo no logro visualizar el dato que necesito.
La salida del del pin 39 del pic 16f877a corresponde al dato que almaceno de mi conversor a/d para luego transmitirlo, he probado la transmisión directa usando un cable para unir el pin 39 del 16f877a y el pin 17 del 16f628a y funciona, bueno de esa forma logro visualizar la lectura del dato que deseo enviar por lo que creo el programa funciona correctamente, ademas existen ocasiones en las que el lcd del rx no muestra debido a que sucede eso?.
Alguna sugerencia para solucionar mi problema seria bien recibida y muy agradecida.
Adjunto el esquema que realice en caso sirva de algo para su ilustración en pdf.
Incluyo fragmentos del programa que uso, esta hecho en microcode studio, tal vez estoy omitiendo algo o cometo un error y esa sea la razón por la cual no funcione.
tx
DEFINE osc 4
DEFINE LCD_BITS 4
define LCD_DREG PORTB ;bit de datos del LCD empezando
define LCD_DBIT 0 ;por B.0. B.1, B.2, B.3
define LCD_RSREG PORTB ;bit de registro del LCD conectar
define LCD_RSBIT 5 ;en el puerto B.5
pause 2000
define LCD_EREG PORTB ;bit de enable conectar en el
define LCD_EBIT 4 ;puerto B.4
define ADC_BITS 8 ;Fije el número de BITS del resultado (5,8,10)
define ADC_CLOCK 3 ;Fije EL CLOCK (rc=3)
define ADC_SAMPLEUS 50 ;Fije el tiempo de muestreo en Us
;ADC_SAMPLEUS es el número de microsegundos que el programa
;espera entre fijar el canal y comenzar la conversión analógica/digital
TRISA= 1 ;el puerto A es de entrada
ADCON1= %00001110 ;el puerto A.0 es conversor los demás digitales
TRISB= 0
dato var word ;crear variable dato para guardar
tempbaj var byte
tempalt var byte
x var byte
releF var portD.2
releC var portD.3
led var portD.4
enter var portD.5
bsubir var portD.6
bbajar var portD.7
Symbol T2400 = 0
EEPROM 0,[22,26] ;contenido inicial de la EEPROM
inicio: ;3 parpadeos del led que indica que funciona
for x =1 to 3
high led
pause 200
low led
pause 200
next
READ 0,tempbaj ;lee la EEPROM 0 y lo guarda en tempbaj
read 1,tempalt ;lee la EEPROM 1 y lo guarda en tempalt
sensar:
adcin 0, dato
serout PORTB.6, T2400, [dato]
rx
DEFINE osc 4
define LCD_DREG PORTB ;bit de datos del LCD empezando
define LCD_DBIT 0 ;por B.0. B.1, B.2, B.3
define LCD_RSREG PORTB ;bit de registro del LCD conectar
define LCD_RSBIT 5 ;en el puerto B.5
pause 2000
define LCD_EREG PORTB ;bit de enable conectar en el
define LCD_EBIT 4 ;puerto B.4
DEFINE LCD_BITS 4
cmcon= 7
TRISB= 0
dato var word ;crear variable dato para guardar
x var byte
led var portB.6
Symbol T2400 = 0
inicio:
for x =1 to 3 ;3 parpadeos del led que indica que funcion
high led
pause 200
low led
pause 200
next
sensar:
serin PORTA.0, T2400, dato
LCDOUT $FE,1,"Temperatura Actual" ;limpia el LCD y muestra el texto
dato=dato/2 ;el dato dividir para 2
LCDout $FE,$c6,dec dato,"ºC" ;muestra el decimal de dato
end
datahsheet modulo:
http://electronicahifi.com/pdf/212st-rx04-a.pdf
-
No, lod datasheet no salen, pero hay algo mal conceptual los ht funcionan con 4 bits. los datos los tenes que mandar con 4 patas y rotando los bits altos con los bajos con cada byte.
-
Hola Dochapu,
Como te dice kamisama, el modulo ht12 no te sirve para enviar informacion entre los pics, o tendiras que hacer tu propia codificacion. El ht12 te sirve para enviar bits, como lo estas haciendo, pero si quieres enviar un byte completo no te sirve.
Lo que te sugiero hacer es comunicarse directamente sin el modulo ht12 via serial haciendo una comunicacion dandole una palabra clave a tu receptor para que puedas evitar el ruido que se generan con esto modulo rf.
Saludos,
Yesbond
-
Emisor:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Miguel Noe Garcia Perez *
'* Notice : Copyright (c) 2010 Iberica 2000 *
'* : All Rights Reserved *
'* Date : 08/09/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device 16F876
XTAL = 4
' LCD pin Configuracion
lcd_type = 0
LCD_LINES = 4
LCD_DTPIN = PORTb.4
LCD_RSPIN = PORTb.3
LCD_ENPIN = PORTb.2
LCD_INTERFACE = 4
'***************************************************************************************
Cls ' Clear LCD
ALL_DIGITAL = True ' Set ports to digital mode
Clear ' Clear buffers
'***************************************************************************************
' Define ADC parameters
ADIN_RES = 10 ' 10-bit result required
ADIN_TAD = FRC ' RC OSC chosen
ADIN_STIME = 50 ' Allow 50us sample time
PORTB_PULLUPS = ON ' Enable PORTB pull-ups
TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %10000010 ' Set PORTA analog and right justify result
'***************************************************************************************
Symbol Pin = Portc.0
symbol Led = portc.7
'***************************************************************************************
Dim ADVALA AS WORD ' Create ADVAL to store result
Dim ADVALB AS WORD ' Create ADVAL to store result
Dim ADVALC AS WORD ' Create ADVAL to store result
Dim ADVALD AS WORD ' Create ADVAL to store result
Dim Raw as Word
Dim Value as Word
Dim Volts as Byte
Dim Millivolts as Word
dim N As Byte
'***************************************************************************************
' '(0) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,64,$00,$04,$04,$04,$0E,$0E,$15,$15
' '(1) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,72,$15,$0A,$15,$04,$0E,$0E,$15,$15
' '(2) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,80, $04,$04,$04,$00,$0E,$0A,$0A,$0E
' '(3) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,88, $0E,$0A,$0A,$0E,$00,$04,$04,$04
' '(4) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,96,$00,$0E,$0A,$0A,$1B,$00,$00,$00
' '(5) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,104,$00,$00,$00,$00,$1B,$0A,$0A,$0E,$00
' '(6) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,112, $00,$00,$00,$1B,$0A,$0A,$0E,$00
' '(7) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
' Print 254,120,$10,$10,$10,$10,$10,$10,$10,$10
'***************************************************************************************
'************** Presentacion ***********************************************************
'***************************************************************************************
' Delayms 500 ' Wait .5 second
' Cls ' Clear LCD
' ' 1234567890123456
' Print at 1,1," Otro Invento"
' Print at 2,1," de Miguelito"
' Delayms 2000
' CLS
' ' 1234567890123456
' Print at 1,1,"Telemetria V1.0"
' Print at 2,1," 433,92 MHz "
' Delayms 2000
'
Inicio:
Cls
print at 1,1,0,1,2,3,4,5,6,7
PRINT AT 2,1,"EMITIENDO..." '1234567890123456
' nOE:
' 'Serout Pin,BaudMode[x],[" 123 MIGUEL NOE GARCIA PEREZ miguel noe garcia perez "] ' Display "Hello", next line
' ' 12345678901234561234567890123456
' 'Serout Pin,16572,["A Miguel Noe es un tio estupendo.."] ' Display "Hello", next line
' Serout Pin, 16572 ,["A Este invento ya esta inventado."] ' Display "Hello", next line
' 'Delayms 50 ' Wait .5 second
' ' 1234567890123456
' GOTO nOE
'*******************************************************************************************
Infor:
GOSUB Lee_Temperatura
gosub Lee_Vcc
'gosub PintaTemperatura
'gosub Voltage
'goto infor
Transmitir:
'for n =0 to 1500
'high Radio 65535 minimo 16468 max
high led
Serout Pin, 16468 ,["NOE",dec3 ADVALA,dec3 ADVALB,dec3 ADVALC,dec3 ADVALd,dec2 Volts,dec2 Millivolts] ' Display "Hello", next line
' low Radio
low led
'delayms 20
'next
goto Infor
' S U B R U T I N A S
'*******************************************************************************************
'*******************************************************************************************
'*******************************************************************************************
Lee_Temperatura:
ADVALA = Adcin 0 ' Read channel 0 to adval (0-1023)
ADVALB = Adcin 1 ' Lee Canal 1 Para ADVALB
ADVALC = Adcin 2
ADVALd = Adcin 3
ADVALa = (ADVALa */ 500) >> 2 ' Igualito que (advab *500)/1024
ADVALb = (ADVALb */ 500) >> 2 ' equates to: (adval * 500)/1024
ADVALc = (ADVALc */ 500) >> 2 ' Igualito que (advab *500)/1024
ADVALd = (ADVALD */ 500) >> 2 ' equates to: (adval * 500)/1024
Return
Lee_Vcc:
Raw = adin 4 ' leer ADC
'******************************** Calculo de Tension *********************************
Value = 489 *(Raw / 10)
Volts = Value / 1000
Millivolts = (Value // 1000) / 10
return
'*******************************************************************************************
'******************** PINTA TEMPERATURA **********************************************
'*******************************************************************************************
PintaTemperatura:
cls
Print at 1,1,"T1 ",Dec (ADVALA/100), Dec2 ADVALA,"C"
Print at 2,1,"T2 ",Dec (ADVALB/100), Dec2 ADVALB,"C"
Print at 1,10,"T3 ",Dec (ADVALC/100), Dec2 ADVALC,"C"
Print at 2,10,"T4 ",Dec (ADVALD/100), Dec2 ADVALD,"C"
'delayms 2000
return
voltage:
cls
Print at 1,1,"Votimetro Bat "
Print at 2,1," ",Dec2 Volts,".",Dec2 Millivolts," Vcc" 'mostrar el resultado
'Delayms 2000
return
end
Receptor:
'****************************************************************
'* Name : emiTemp.BAS *
'* Author : Miguel Noe Garcia Perez *
'* Notice : Copyright (c) 2010 Iberica 2000 *
'* : All Rights Reserved *
'* Date : 10/03/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device 16F877a
XTAL = 4
' LCD pin Configuracion
lcd_type = 0
LCD_LINES = 4
LCD_DTPIN = PORTb.4
LCD_RSPIN = PORTb.3
LCD_ENPIN = PORTb.2
LCD_INTERFACE = 4
DECLARE SERIAL_PARITY = ODD
Dim Temp as word
Dim Datos[16] As Byte ' Arreglo almacena serial
DIM SerData AS BYTE
dim Result as word
dim Address as word
Dim Index As Byte ' Variable de uso general
dim x As byte
dim Coder as word
'***************************************************************************************
'(0) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,64,$02,$07,$02,$00,$0A,$1F,$1F,$1F 'Bateria1
'(1) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,72,$02,$07,$02,$00,$0A,$1F,$11,$1F' Bateria 2
'(2) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,80, $00,$1C,$00,$00,$0A,$1F,$11,$1F' Bateria 3
'(3) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,88, $0E,$04,$0E,$0A,$1B,$11,$1B,$0E ' Motor
'(4) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,96,$1F,$0E,$1B,$15,$0A,$15,$0A,$1F ' Radiador
'(5) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,104,$00,$0A,$11,$15,$15,$11,$0A,$00 ' Discofreno
'(6) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,112, $1C,$06,$05,$1D,$1E,$1F,$1D,$00 ' Fuel
'(7) CARGANDO EL 2DO. CARACTER PERSONALIZADO EN LA CGRAM
Print 254,120,$10,$10,$10,$10,$10,$10,$10,$10
'***************************************************************************************
'************** Presentacion ***********************************************************
'***************************************************************************************
Delayms 500 ' Wait .5 second
Cls ' Clear LCD
' 1234567890123456
Print at 1,1," Otro Invento"
Print at 2,1," de Miguelito"
Delayms 2000
CLS
' 1234567890123456
Print at 1,1," Receptor RF"
Print at 2,1," 433,92 MHz "
Delayms 2000
cls
Print at 1,1," BaudRate:"
Print at 2,5,"9600"
Delayms 2000
Inicio:
Cls
cls
print at 1,1,"Esperando datos"
print at 2,5,"Espere..."
'
'*********** Espera A leer la N Para cojer el Tren de informacion ********************
'*********** 9600 Baudios ************************************************************
'*************************************************************************************
SERIN PORTc.0 ,16468 ,[ WAIT( "N" ) , SerData] '16468 '
cls
print at 1,1,"Conectando..."
delayms 500
Otro:
SERIN PORTc.0 ,16468 ,[ WAIT( "N" ) , SerData] '16468 '
'********************* Mete los datos en una cadena **********************************
' ****************** Los Datos emitidos son 4 de Temperaturas y 2 de voltage ********
'************************************************************************************
' DATOS [iNDEX] = 0 --------------> N
' DATOS [iNDEX] = 1 --------------> 0 --------------------
' DATOS [iNDEX] = 2 --------------> 0 Sensor Nº1 3 digitos
' DATOS [iNDEX] = 3 --------------> 0 --------------------
' DATOS [iNDEX] = 4 --------------> 0 --------------------
' DATOS [iNDEX] = 5 --------------> 0 Sensor Nº2 3 digitos
' DATOS [iNDEX] = 6 --------------> 0 --------------------
' DATOS [iNDEX] = 7 --------------> 0 --------------------
' DATOS [iNDEX] = 8 --------------> 0 Sensor Nº3 3 digitos
' DATOS [iNDEX] = 9 --------------> 0 --------------------
' DATOS [iNDEX] = 10 --------------> 0 --------------------
' DATOS [iNDEX] = 11 --------------> 0 Sensor Nº4 3 digitos
' DATOS [iNDEX] = 12 --------------> 0 --------------------
' DATOS [iNDEX] = 13 --------------> 0 --------------------
' DATOS [iNDEX] = 14 --------------> 0 voltios
' DATOS [iNDEX] = 15 --------------> 0 --------------------
' DATOS [iNDEX] = 16 --------------> 0 MiliVoltios
for Index = 0 to 16
SERIN PORTc.0 ,16468 ,[SerData]'16468 '
DATOS [iNDEX] = SERDATA
Next
'************************** PINTA PANTALLA DE DATOS *********************************
print at 1,1,"T1"
print at 1,7,"T2"
print at 1,13,"V"
print at 2,1,"T3"
print at 2,7,"T4"
print at 2,13,"M"
print at 2,16,1
print at 1,16,2
print at 1,3,3
print at 1,9,4
print at 2,3,5
print at 2,9,6
'************************** COLOCA LOS DATOS EN LA PANTALLA ***********************
x=4
for index = 1 to 3
Coder = Datos[Index]
print at 1,x,Coder
x=x+1
next
x=10
for index = 4 to 6
Coder = Datos[Index]
print at 1,x,Coder
x=x+1
next
x=4
for index = 7 to 9
Coder = Datos[Index]
print at 2,x,Coder
x=x+1
next
x=10
for index = 10 to 12
Coder = Datos[Index]
print at 2,x,Coder
x=x+1
next
x=14
for index =13 to 14
Coder = Datos[Index]
print at 1,x,Coder
x=x+1
next
x=14
for index = 15 to 16
Coder = Datos[Index]
print at 2,x,Coder
x=x+1
next
'delayms 1500
Goto Otro
END