Autor Tema: No Registra lectura en Adc0804 y Micro At89c51  (Leído 2309 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
No Registra lectura en Adc0804 y Micro At89c51
« en: 26 de Agosto de 2022, 14:46:21 »

cordial saludo

Chicos, pueden por favor revisar en adjunto  la simulación proteus, del micro at89c51 y el adc0804, un lcd 16x2.
en el ldc no me esta registrando lectura del adc  con  un divisor de voltaje, con resistencias de 30k y 7.5k

he tratado simular un sensor de voltaje para Arduino en proteus, pero no me esta registrando lectura.

lo que hice fue un  voltímetro digital con el micro at89c51 y el adc0804.
el único detalle del circuito es que no me leyendo el voltaje del adc,
será que tengo algo mal conectado en la simulación  :?: :?:

adjunto simulación en proteus y con el código hex



Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #1 en: 26 de Agosto de 2022, 20:30:30 »
...
he tratado simular un sensor de voltaje para Arduino en proteus, pero no me esta registrando lectura.

lo que hice fue un  voltímetro digital con el micro at89c51 y el adc0804.
el único detalle del circuito es que no me leyendo el voltaje del adc,
será que tengo algo mal conectado en la simulación  :?: :?:

adjunto simulación en proteus y con el código hex

Cuando se usa conversion contiinua el micro debe dar un pulso inicial para iniciar el proceso;

 

* Conversioncontinua.jpg
(17.84 kB, 800x97 - visto 518 veces)


Hay ejemplos en la red y en el mismo datasheet donde ponen un pulsador a masa, pero no es muy elegante que digamos, el pulso lo debe dar el micro.

Aun asi, aparentemente hay en bug en el modelo de Proteus porque jamás se activa la interrupción --> nunca va a funcionar en la simulación.

Consejo:  Para la simulación, desconecta /INTR y conectá un generador de pulsos a /WR o que sea el micro quien se los de.

 

* adc804.jpg
(65.33 kB, 800x441 - visto 288 veces)

« Última modificación: 26 de Agosto de 2022, 20:35:24 por Eduardo2 »

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #2 en: 26 de Agosto de 2022, 21:15:10 »
...
he tratado simular un sensor de voltaje para Arduino en proteus, pero no me esta registrando lectura.

lo que hice fue un  voltímetro digital con el micro at89c51 y el adc0804.
el único detalle del circuito es que no me leyendo el voltaje del adc,
será que tengo algo mal conectado en la simulación  :?: :?:

adjunto simulación en proteus y con el código hex

y como seria físicamente en protoboard para que el adc funcione, si no tengo el generador de pulso? o puedes por favor el codigo en c, gracias
Cuando se usa conversion contiinua el micro debe dar un pulso inicial para iniciar el proceso;

  - Tienes que ingresar para ver archivos adjuntos -  

Hay ejemplos en la red y en el mismo datasheet donde ponen un pulsador a masa, pero no es muy elegante que digamos, el pulso lo debe dar el micro.

Aun asi, aparentemente hay en bug en el modelo de Proteus porque jamás se activa la interrupción --> nunca va a funcionar en la simulación.

Consejo:  Para la simulación, desconecta /INTR y conectá un generador de pulsos a /WR o que sea el micro quien se los de.

  - Tienes que ingresar para ver archivos adjuntos -

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #3 en: 26 de Agosto de 2022, 22:49:09 »
...
y como seria físicamente en protoboard para que el adc funcione, si no tengo el generador de pulso? o puedes por favor el codigo en c, ...



Hay ejemplos en la red y en el mismo datasheet donde ponen un pulsador a masa, pero no es muy elegante que digamos, el pulso lo debe dar el micro.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #4 en: 27 de Agosto de 2022, 11:28:27 »
...
y como seria físicamente en protoboard para que el adc funcione, si no tengo el generador de pulso? o puedes por favor el codigo en c, ...



Hay ejemplos en la red y en el mismo datasheet donde ponen un pulsador a masa, pero no es muy elegante que digamos, el pulso lo debe dar el micro.

puedes por favor revisar el codigo c, que instrucciones hace falta para que el micro genere el pulso para el adc0804.
anexo el codigo? :?:

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #5 en: 27 de Agosto de 2022, 13:31:25 »
...
puedes por favor revisar el codigo c, que instrucciones hace falta para que el micro genere el pulso para el adc0804.
anexo el codigo? :?:
Si, subí el código.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #6 en: 27 de Agosto de 2022, 14:04:57 »
...
puedes por favor revisar el codigo c, que instrucciones hace falta para que el micro genere el pulso para el adc0804.
anexo el codigo? :?:
Si, subí el código.

acá adjunto el código en c, y para abrirlo es con el compilador Keil Uvision.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #7 en: 27 de Agosto de 2022, 21:52:21 »
...
puedes por favor revisar el codigo c, que instrucciones hace falta para que el micro genere el pulso para el adc0804.
anexo el codigo? :?:
Si, subí el código.

acá adjunto el código en c, y para abrirlo es con el compilador Keil Uvision.

tienes el compilador Keil Uvision?

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #8 en: 27 de Agosto de 2022, 21:57:04 »
En ese código, definís un pin para pulsar /WR, por ejemplo:
Código: [Seleccionar]
sbit wr=P1^5 ;

Y después lo hacés pulsar en alguna parte conveniente del ciclo, donde pase un tiempo hasta la lectura (por el tiempo de conversión)
Código: [Seleccionar]
        else
        {
            display(' ');
            string("0.0");
        }
    //-----------------
        wr=0 ;
        delay(1) ;
        wr=1 ;
    //-----------------
        delay(1000);
  }

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #9 en: 27 de Agosto de 2022, 22:00:04 »
...
tienes el compilador Keil Uvision?
La versión de evaluación, la que descargas de la web de Keil.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #10 en: 27 de Agosto de 2022, 22:31:46 »
...
tienes el compilador Keil Uvision?
La versión de evaluación, la que descargas de la web de Keil.

tengo la versión 4 keil Uvision.
he realizado lo que me indicaste, pero al simular, el voltaje registrado en el lcd es diferente al voltímetro proteus en la fuente variable con el lm317, adjunto imágenes de la simulación.

para que sean iguales voltajes tanto en el lcd y en el voltímetro de la fuente variable lm317.
 :?:

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #11 en: 28 de Agosto de 2022, 00:22:51 »
...
he realizado lo que me indicaste, pero al simular, el voltaje registrado en el lcd es diferente al voltímetro proteus en la fuente variable con el lm317, adjunto imágenes de la simulación.

para que sean iguales voltajes tanto en el lcd y en el voltímetro de la fuente variable lm317.
 :?:

Cuando hace:
Código: [Seleccionar]
        val=dat*0.02;  // 0.02 is resolution of adc
        val=val/0.2;   // 0.2 is nothing but (R2/(R1+R2)) resistor values in the voltage sensor
Redondea demasiado, pues la resolución del adc es 5/255 = 0.0196 y debería haber usado mas decimales
Además después divide por la relación del divisor   ( 7.5/(30+7.5) = 0.2) y podría haber usado una sola constante para no multiplicar/dividir dos veces en punto flotante.

Te conviene reemplazar esas dos líneas y que  la constante la calcule el compilador y asi no hacer ni malos redondeos ni trabajar con muchos decimales.
Código: [Seleccionar]
        val=dat*(5./255 * (30+7.5)/7.5) + .05 ;   // 5./255*(30+7.5)/7.5) = 0.098039
o también
Código: [Seleccionar]
        #define KAD (5./255 * (30+7.5)/7.5)
        .............
        .............
        .............       
        val=dat*KAD + .05 ; 
y ponés el #define al principio bien legible por si se trabaja con otras resistencias en el divisor de tensión.

- Lo que está entre paréntesis lo evalúa el compilador y ensambla una multiplicación de dat  por 0.098039

- El 0.05 final es un truco para que trabajando a 1 decimal te redondee al mas cercano, si preferís que trunque, sacalo.


Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #12 en: 28 de Agosto de 2022, 09:41:57 »
...
he realizado lo que me indicaste, pero al simular, el voltaje registrado en el lcd es diferente al voltímetro proteus en la fuente variable con el lm317, adjunto imágenes de la simulación.

para que sean iguales voltajes tanto en el lcd y en el voltímetro de la fuente variable lm317.
 :?:

Cuando hace:
Código: [Seleccionar]
        val=dat*0.02;  // 0.02 is resolution of adc
        val=val/0.2;   // 0.2 is nothing but (R2/(R1+R2)) resistor values in the voltage sensor
Redondea demasiado, pues la resolución del adc es 5/255 = 0.0196 y debería haber usado mas decimales
Además después divide por la relación del divisor   ( 7.5/(30+7.5) = 0.2) y podría haber usado una sola constante para no multiplicar/dividir dos veces en punto flotante.

Te conviene reemplazar esas dos líneas y que  la constante la calcule el compilador y asi no hacer ni malos redondeos ni trabajar con muchos decimales.
Código: [Seleccionar]
        val=dat*(5./255 * (30+7.5)/7.5) + .05 ;   // 5./255*(30+7.5)/7.5) = 0.098039
o también
Código: [Seleccionar]
        #define KAD (5./255 * (30+7.5)/7.5)
        .............
        .............
        .............       
        val=dat*KAD + .05 ; 
y ponés el #define al principio bien legible por si se trabaja con otras resistencias en el divisor de tensión.

- Lo que está entre paréntesis lo evalúa el compilador y ensambla una multiplicación de dat  por 0.098039

- El 0.05 final es un truco para que trabajando a 1 decimal te redondee al mas cercano, si preferís que trunque, sácalo.

he realizado tus indicaciones, adjunto imágenes

además te he respondió por mensaje privado
gracias por su amable ayuda vale  :-/

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #13 en: 03 de Abril de 2023, 11:24:32 »
...
he realizado lo que me indicaste, pero al simular, el voltaje registrado en el lcd es diferente al voltímetro proteus en la fuente variable con el lm317, adjunto imágenes de la simulación.

para que sean iguales voltajes tanto en el lcd y en el voltímetro de la fuente variable lm317.
 :?:

Cuando hace:
Código: [Seleccionar]
        val=dat*0.02;  // 0.02 is resolution of adc
        val=val/0.2;   // 0.2 is nothing but (R2/(R1+R2)) resistor values in the voltage sensor
Redondea demasiado, pues la resolución del adc es 5/255 = 0.0196 y debería haber usado mas decimales
Además después divide por la relación del divisor   ( 7.5/(30+7.5) = 0.2) y podría haber usado una sola constante para no multiplicar/dividir dos veces en punto flotante.

Te conviene reemplazar esas dos líneas y que  la constante la calcule el compilador y asi no hacer ni malos redondeos ni trabajar con muchos decimales.
Código: [Seleccionar]
        val=dat*(5./255 * (30+7.5)/7.5) + .05 ;   // 5./255*(30+7.5)/7.5) = 0.098039
o también
Código: [Seleccionar]
        #define KAD (5./255 * (30+7.5)/7.5)
        .............
        .............
        .............       
        val=dat*KAD + .05 ; 
y ponés el #define al principio bien legible por si se trabaja con otras resistencias en el divisor de tensión.

- Lo que está entre paréntesis lo evalúa el compilador y ensambla una multiplicación de dat  por 0.098039

- El 0.05 final es un truco para que trabajando a 1 decimal te redondee al mas cercano, si preferís que trunque, sácalo.

he realizado tus indicaciones, adjunto imágenes

además te he respondió por mensaje privado
gracias por su amable ayuda vale  :-/

ola de nuevo amigo eduardo, te comento, tuve una falla en mi pc con del duro y perdió toda la información que tenia, gracias a este hilo puede realizar la simulación y el código en kei vision.
 en la simulación del código, he notado cuando giro  el potenciómetro de la fuente lm317 ejemplo 5.22V y en el lcd NO visualiza en tiempo real en la simulación este voltaje, tengo que detener la simulación y volver a iniciar la simulación para que en el lcd visualice el voltaje 5.22V.
puedes ayudarme, gracias

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:No Registra lectura en Adc0804 y Micro At89c51
« Respuesta #14 en: 03 de Abril de 2023, 23:06:56 »
....
 en la simulación del código, he notado cuando giro  el potenciómetro de la fuente lm317 ejemplo 5.22V y en el lcd NO visualiza en tiempo real en la simulación este voltaje, tengo que detener la simulación y volver a iniciar la simulación para que en el lcd visualice el voltaje 5.22V.

En principio eso no parece problema del software sino de modelos.

Andá paso a paso, primero eliminá el LM317 y el ADC0804, poné 2 llaves THUMBSWITCH-HEX en P2 simulando la salida del ADC y ves si la velocidad está bien.

Si OK, después colocás el ADC0804 pero en la entrada solamente un pote como divisor de tensión (alim. con 5V), probablemente la demora la tengas acá y sea un problema de modelo o de circuito.

A la parte del LM317 no tiene sentido simularla (se pone una fuente de tensión directamente),  solo se incluyen estos elementos cuando se va a dibujar el PCB.