Autor Tema: pic 12f675 uso de los registros adresh y adresl  (Leído 1803 veces)

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

Desconectado Kuroned

  • PIC10
  • *
  • Mensajes: 4
pic 12f675 uso de los registros adresh y adresl
« en: 03 de Septiembre de 2021, 02:05:13 »
Hola a todos, estoy empezando hace un tiempo pequeño en esto de los pic, el caso es que estoy ocupando proteus mas proton IDE, en preoteus tengo conectado un sensor de temperatura y deseo poder mostrar en pantalla la información, logre hacer esto por medio del Adin_res y todo esto, sin embargo busco la forma de hacerlo sin el Adin, tengo entendido que los datos analógicos se guardan en los registros, pero no logro obtener el mismo resultado, esperaba conseguir un poco de guía en este tema, dejo código adjunto para que se entienda mejor.


-------
Device = 12F675
Reminders off
    Config MCLRE_OFF, WDT_OFF, INTRC_OSC_NOCLKOUT
Reminders On

Xtal 4

'Pantalla virtual
Declare RsOut_Mode True
Declare RsOut_Pin GPIO.4
Declare Serial_Baud 9600

'config para visualisar temperatura
Declare Adin_Res = 10
Declare Adin_Tad = FRC
Declare Adin_Stime = 50

'variables
Dim LM35 As Word
Dim Aux As Float
Dim adl As Byte
Dim adh As Byte

'config general del pic
CMCON = %00000111
TRISIO = %00000001

ANSEL = %00010001
ADCON0 = %10000011

adl = ADRESL
RsOut 0
DelayMS 100

Inicio:
'esto es mas que otra cosa para probar el valor devuelto por el adresl, pero me devuelve un valor fijo :/
    RsOut "Valor: ",Dec adl,13
    DelayMS 1000
GoTo Inicio
End
-------

Agradezco mucho la ayuda.

Desconectado Miguelyx

  • PIC10
  • *
  • Mensajes: 30
Re:pic 12f675 uso de los registros adresh y adresl
« Respuesta #1 en: 15 de Septiembre de 2021, 17:31:00 »
Entre los ejemplos que tenia guardados, te he encontrado un ejemplo en mikrobasic que hace lo que deseas, extrae el valor de lo que tengas conectado al puerto AN2 y extrae 10 bits en modo binario del registro y los envia por completo a los puertos B del 0 a 7 y los 2 bits mas altos a los puertos RC6 y RC7, en total crea un numero binario de 10 bits empezando por RB0 y acabando en RC7
deberias recibir el registro de esta forma, por ejemplo obteniendo el valor 1022 deberias ver 11 y 11111110 extraidos del registro.
los 11 de la izquierda son los puertos RC7 y RC6 y los demas en el orden que corresponde, RC0 seria el 0 de la derecha del todo.

En tu caso como simplemente es un LM35 y la maxima temperatura que arroja si no recuerdo mal son 150º
podrias prescindir de los 2 bits mas significativos, de RC6 y RC7 y extraer simplemente un numero binario de 8 bits que es suficiente para mostrar todo el abanico de valores que abarca el LM35 usando el puerto B

Asi de entrada, es la forma mas sencilla que se me ocurre para extraer el registro de la forma que deseas, pero hay otras mas complejas y requieren otro tipo de programacion algo mas compleja tambien, y ademas para ello debes usar un PIC que tenga un puerto de 8 pins completamente libre y el 12F675 no sirve.
Supongo que con un 16F648A podrias ya que dispone de un pin analogico y un puerto B completamente libre.
Pero no recuerdo como se configuraba el 16F648A, asi que te dejo el codigo para un 16F887 que funciona seguro, solo tendras que adaptar las salidas del puerto B a la pantalla virtual y realizar un pequeña conversion de binario a decimal para ver el registro binario en decimal en la pantalla.


 

Aqui te dejo el codigo en mikroBasic que no te va a dar ninguna dificultad para adaptarlo a PROTON IDE

' -----------inicio del codigo, la siguiente linea program hay que incluirla tal cual o no compila si hay espacios entre palabras

program ADC_por_registro_binario

dim tmp as word

main:

ANSEL = 0x04 ' Configura AN2 como analogico
TRISA = 0xFF ' PORTA se configura como entrada
ANSELH = 0 ' Configura todos los demas pins analogicos como E/S digitales
TRISC = 0x3F ' Pins de RC7 y RC6 estan como salida, esta linea no se necesita para extraer los valores del LM35
TRISB = 0 ' PORTB esta configurado como salida
while 1  ' inicio del bucle
tmp = ADC_Read(2) ' Recoje los datos de la conversion ADC
PORTB = tmp ' Envia los 8 bits a PORTB
PORTC = tmp >> 2 ' Envia los 2 bits mas significativos a RC6 y RC7, esta linea no se necesita para extraer los valores del LM35
wend ' Se queda en el bucle y obliga a volver a while
end.

« Última modificación: 16 de Septiembre de 2021, 07:11:38 por Miguelyx »


 

anything