Autor Tema: termometro con PIC16F877A y RS232 con doble canal  (Leído 4083 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado TheFallen0001

  • PIC10
  • *
  • Mensajes: 18
termometro con PIC16F877A y RS232 con doble canal
« en: 09 de Enero de 2011, 19:12:27 »
Saludos amigos del foro. He leido los post referentes al tema, pero he realizado un codigo en PBP probasic (microcode) y simulacion en PROTEUS, todo lo posible, pero no me funciona ni la lectura en el LCD y los datos de envio por serial.

El problema esta en la definición del ADC del PIC, pero no le he podido definir bien, soy nuevo en los microcontroladores y si es resuelto mi problema, voluntariamente dejo mi codigo y esquema para que puedan ser utilizados por aquellos que tengan la misma inquietud.

Muchas gracias y estoy atento a cualquier comentario.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: termometro con PIC16F877A y RS232 con doble canal
« Respuesta #1 en: 09 de Enero de 2011, 20:14:28 »
que es lo que no te funciona exactamente

Desconectado TheFallen0001

  • PIC10
  • *
  • Mensajes: 18
Re: termometro con PIC16F877A y RS232 con doble canal
« Respuesta #2 en: 10 de Enero de 2011, 03:52:31 »
Hola amigo, tengo problemas para definir los puertos de entrada del ADC. (puertoA, como entradas AN0. AN1) para dos sensores y como arrancar realizar la conversion del analogo digital (definir ADCON1 Y ADCON0), por ello deje adjuntos los archivos, si puedes revisarlos  e incluso tengo el archivo de simulacion de PROTEUS.
Resumiendo: AN0 se encraga de enviar dato de temperatura a LCD y AN1 se sencarga de enviar dato a serial por TX y RX (portC) por ello deje el archivo de basic en word o abres el archivo.bas

Hice lo humanamente posible pero me sale sino el dato por LCD pero incorrecto.

Gracias por tu atención y perdon por la molestia.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: termometro con PIC16F877A y RS232 con doble canal
« Respuesta #3 en: 10 de Enero de 2011, 11:51:30 »
prueba con el siguiente codigo

@ DEVICE  WDT_OFF ' Watchdog Timer desconectado
@ DEVICE  PWRT_ON ' Power-On Timer conectado
@ DEVICE  BOD_Off ' Brown-Out Detect conectado
TRISB = 00000000
TRISA = 00000001
 
define OSC 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 1

DEFINE ADC_bits 10
DEFINE ADC_clock 3
DEFINE ADC_sampleus 50
pause 1000
adcon1 =%10000000
 
direc var word
indice var byte
temp var word
lec var word

LCDOUT $fe,1 , " termometro "
pause 1000

LCDOUT $fe,1 , " recibe datos "
pause 1000
inicio :

adcin 0,temp
lec = temp * 48  /100 ´esto es para pasar 1024/5 y luego dividir dentro de 100 para obtener 10mv por grado centigrado
direc = temp  * 48 //98  'temp por 48 dividido 98 y coloco el resto en direc, esto para tener un valor decimal en la lectura


pause  100


lcdout $fe,1 , " temp = ", dec lec , "." ,dec direc

pause 100
               
goto inicio
end

 ojala te ayude

Desconectado TheFallen0001

  • PIC10
  • *
  • Mensajes: 18
Re: termometro con PIC16F877A y RS232 con doble canal
« Respuesta #4 en: 10 de Enero de 2011, 14:52:23 »
Hola Chrisbaf, estoy contento por que funciona la simulación de PROTEUS  :-/  con tu código, pero presenta un salto de temperatura de 1 grado de diferencia, entre el voltaje del LM35 y la lectura. Por ello modifique lo siguiente:

ADCIN0, temp
lec=temp*49/100
direc=temp*49/98

Además tengo otra pregunta, ¿De que manera puedo enviar el dato que registo por de forma serial?, la comunicación la tengo que realizar a 2400 baudios.

Te agradezco el interés.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: termometro con PIC16F877A y RS232 con doble canal
« Respuesta #5 en: 11 de Enero de 2011, 13:13:16 »
aqui hay algo que te puede ayudar

SEROUT Pin,Mode,[Item[,Item...}]


Envía uno ó más Items a Pin , en formato standard asincrónico usando 8 bits de datos , sin paridad y 1
stop bit (8N1) .SEROUT es similar al comando Serout de BS1 .Pin es automáticamente colocado como
salida . Pin puede ser una constante , 0 - 15 , ó una variable que contenga un número de 0-15 (p.ej. B0) ó
un número de Pin (p.ej. PORTA.0)
Los nombres Mode (p.ej. T2400) están definidos en el archivo MODEDEFS.BAS .
Para usarlos ,agregue la línea :
 
Include “modedefs.bas”
 
al comienzo de su programa PBP .


SEROUT 0,N2400,[#B0,10] ´ envía el valor ASCII de B0 ,seguido por un LF al pin 0 , en forma serial


 

anything