Autor Tema: No enciende display  (Leído 2996 veces)

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

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
No enciende display
« en: 09 de Julio de 2008, 16:01:49 »
Saludos.

Tengo un problema con el siguiente programa, el problema es que no se enciende el puerto B, con lo cual no me enciende un display que tengo conectado.

@ DEVICE pic16F876A
' Registro

cmcon=7
TRISB=0
TRISC=0
ADCON1=%10001110

' Variable

temp var word
result var byte
result2 var byte
digt var byte
digt2 var byte

   
 'Definir los parametros del ADCIN
DEFINE  ADC_BITS 10       ' Setear el numero de bits del resultado
Define   ADC_SAMPLEUS 50

' Inicialización de variables

main:
ADCIN 0,temp
temp=temp-2
temp=temp*100
temp=temp*5
temp=temp/1024

if temp>273 then
temp=temp-273
low portA.5
else
temp=273-temp
high portA.5
endif

digt2=temp/10

lookup digt2,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result2
portb=result2

digt=temp-digt2*10

lookup digt,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result
portc=result

goto main


Espero que me ayuden a conseguir el error, sin mas me despido no sin antes agradecerles por su ayuda.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: No enciende display
« Respuesta #1 en: 09 de Julio de 2008, 17:09:26 »
Los calculos estan mal, siempre salen los mismos valores.

digt2=102 y tiene que estar entre 0 y 9
digt = 127 y tiene que estar entre 0 y 9
temp = 223, no varia siempre da el mismo valor
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: No enciende display
« Respuesta #2 en: 09 de Julio de 2008, 17:11:00 »
Saludos desde Granada, España.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #3 en: 09 de Julio de 2008, 20:33:07 »
No entiendo porque dice que salen los mismos valores. El valor de temp depende del resultado de la conversion ADC

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: No enciende display
« Respuesta #4 en: 10 de Julio de 2008, 11:20:31 »
Eso es lo raro, realiza los cálculos a mano para distintos valores de la entrada analógica a ver que es lo que te sale.
A mi me sale siempre lo mismo... :shock:
Saludos desde Granada, España.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #5 en: 11 de Julio de 2008, 13:44:57 »
Bueno tenemos que revisar eso bien.

Pero el problema que tengo ahorita es que no me enciende el primer display, y nose cual es el error.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: No enciende display
« Respuesta #6 en: 11 de Julio de 2008, 19:11:27 »
Que tal amigos!
Yukardo, en este codigo:
DEFINE  ADC_BITS 10       ' Setear el numero de bits del resultado
Define   ADC_SAMPLEUS 50

Le falto este:
DEFINE ADC_CLOCK 3
Aqui hay un problema:

main:
ADCIN 0,temp
temp=temp-2
temp=temp*100
temp=temp*5
temp=temp/1024

Como el adc lo tienes configurado para operar a 10 bits eso quiere dec
ir que puedes tener valores que van de 0 a 1023  :mrgreen:

a la variable temp le restas 2, luego la multiplicas por 100 y luego por 5  :shock:  si temp vale por ejemplo inicialmente 1000 le restas 2 te queda 998 la multiplicas por 100 y te da 99800, ya aqui, te fregaste  :D  porque la variable declarada es word cuyo valor maximo puede ser 2 ^16 = 65536 y no 99800 y de alli pa bajo todo falla  :(
Vas a tener un valor final en temp que no vas a conocer del todo.

lo que esta mas abajo en tu programa deberia sacar un valor por el portb no obstante.

Saludos




Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #7 en: 11 de Julio de 2008, 19:50:49 »
Que funcion cumple DEFINE ADC_CLOCK 3


Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: No enciende display
« Respuesta #8 en: 11 de Julio de 2008, 20:03:33 »
Que funcion cumple DEFINE ADC_CLOCK 3



Ese define la fuente del reloj del adc mira el manual alli te explica.

Saludos

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #9 en: 14 de Julio de 2008, 09:52:54 »
Gracias por el manual.

Ya he solventado un poco el problema.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #10 en: 14 de Julio de 2008, 23:57:16 »
Señores ya el programa funciona. Ahora tengo un detalle, el cual es el siguiente:

Cuando lo pruebo en fisico, marca el valor que deberia marcar pero al variar la entrada el display no cambia de valor. Luego que reseteo el pic si agarra el valor nuevo. Pareciera un problema de que el lazo no se esta realizando.

Espero su opinion.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: No enciende display
« Respuesta #11 en: 15 de Julio de 2008, 19:40:02 »
Saludos.

Estoy realizando un termometro con Pic usando el 16F876a y en proteus me funciona perfecto pero en fisico no me funciona.

El error es que al variar el voltaje no se produce cambio en los displays, es decir siempre se mantiene el mismo numero. Si lo apago y lo enciendo nuevamente el numero cambia indicando un nuevo valor.

Aqui les dejo el programa y el archivo de proteus.

@ DEVICE pic16F876A
' Registro

cmcon=7
TRISB=0
TRISC=0
ADCON1=%10001110

' Variable

temp var word
result var byte
result2 var byte
digt var byte
digt2 var byte
aux var word
vmv var word
tempk var word
tempc var word


   
 'Definir los parametros del ADCIN
DEFINE  ADC_BITS 10       ' Setear el numero de bits del resultado
DEFINE ADC_CLOCK 3
Define   ADC_SAMPLEUS 50

' Inicialización de variables

main:
ADCIN 0,temp

temp=temp*10
temp=temp*5
temp=temp/1024

temp=temp*10
aux=temp

if aux<298 then
temp=298-temp
vmv=temp/10
tempk=298-vmv
else
temp=temp-298
vmv=temp/10
tempk=298+vmv
endif

tempc=tempk-273


if tempk>273 then
high portA.5
else
low portA.5
endif

digt2=tempc/10

lookup digt2,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result2
portb=result2

digt=tempc-(digt2*10)


lookup digt,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result
portc=result

goto main

sin mas me despido esperando su ayuda.