# No simula en Proteus que puede ser ?



## pj00 (Oct 29, 2013)

buenas claneros tengo un lio estoy tratando de simular un controlador de temperatura a traves de un lm35 donde conviertos los datos analogicos con un adc0804 o 0803 y controlado por un microcontrolador 8051 y no se que pasa que no me funciona ya lo compile y me arroja un error al final. que podria ser ? porfavor necesito su ayuda es urgente se los adjunto


----------



## josancardenasm (Oct 30, 2013)

Puff tio, no se si te sservira esto. Yo sulo usar proteu con un microcontrolador pic, pero yo lo que suelo cargar en el simulador es un archivo cof o un hex. Comprueba que el proteus sea compatible con los fromatos que les  estas cargando.


----------



## Scooter (Oct 31, 2013)

Por el listado de errores parece que no les has definido el micro al compilador ya que todo son errores.
Tendrás que poner algo como #include 8052.def , #uses89c51.def o algo así para que cargue la tabla de definiciones del micro que estés usando.

¿Que compilador usas?


----------



## pj00 (Oct 31, 2013)

A que le dices que compilador uso, estoy trabajando en proteus, cargo un fichero el .txt. soy nuevo en esto es un trabajo de curso que tengo que entregar.
por favor ayúdenme


----------



## Saint_ (Oct 31, 2013)

hola pj00, te comento que cometiste algunos errores.
1.- la extencion del archivo donde esta el programa tiene que ser *.asm, proteus lo genera por defecto con esa extencion.
2.- como estas trabajando con el ascembler de la familia 8051 la herramienta de compilación a elegir en proteus debería ser ASM51.
3.- Equivocaste los ventores de interrupción, pusiste la rutina del temporizador en ligar de interrupción y viceversa.
4.- proteus no simula la salida de interrupción del  adc 0804 y 0803 por lo cual tu interrupción externa jamas se disparara (esto en la simulación), en el circuito real debería funcionar sin problemas.

Para el caso de la simulación, proteus genera un reloj interno  propio en el adc, así que no se necesita introducirle un reloj al adc, en el chip adc real si tendrías que introducirle el reloj al adc o conectarle el R yC para que el adc genere su propio reloj.

adjunto las correcciones hechas al tu programa.


----------



## pj00 (Oct 31, 2013)

tienes toda la razón confundí los vectores de interrupción con el del temporizador. otra pregunta como entonces puedo simular la interrupción. y muchísimas gracias hermano por la respuesta.
gracias nuevamente


----------



## Saint_ (Oct 31, 2013)

... asi como esta no se va a poder utilizar la interrupción externa, te sugiero que leas el adc en la misma rutina del timer 0, primero leer el adc y luego le dar la orden para que haga una nueva convercion.


----------



## pj00 (Oct 31, 2013)

otra pregunta me es necesario que me interrumpa en la simulación cual seria el conversor que podría poner en proteus que si me simule la interrupción. por favor Saint_



Saint_ dijo:


> ... asi como esta no se va a poder utilizar la interrupción externa, te sugiero que leas el adc en la misma rutina del timer 0, primero leer el adc y luego le dar la orden para que haga una nueva convercion.



y no podría utilizar otro adc de 8bits que si me de esta interrupcion


----------



## Saint_ (Oct 31, 2013)

puedes utilizar el adc0808, este da un nivel bajo mientras efectúa la convercion, da un nivel alto cuando termina la convercion y para iniciar la convercion requiere un pulso de nivel alto.


----------



## pj00 (Oct 31, 2013)

si pero este circuito si lo simula proteus



Saint_ dijo:


> puedes utilizar el adc0808, este da un nivel bajo mientras efectúa la convercion, da un nivel alto cuando termina la convercion y para iniciar la convercion requiere un pulso de nivel alto.



si pero este circuito  adc 0808  si lo simula proteus la interrupción


----------



## Saint_ (Oct 31, 2013)

si, proteus simula sin ningún problema ese adc, pero tendrías que utilizar la interrupción externa por falco de subida.


----------



## pj00 (Oct 31, 2013)

Saint_ dijo:


> si, proteus simula sin ningún problema ese adc, pero tendrías que utilizar la interrupción externa por falco de subida.



voy a tratar de configurarlo en proteus, de tener algún problema puedo contar con ud para solucionarlo.


----------



## Saint_ (Oct 31, 2013)

si, no hay ningún problema.


----------



## pj00 (Oct 31, 2013)

Saint_ dijo:


> si, no hay ningún problema.



mire a ver si estas bien asi, lo que no se es como configurar el adc0808 podria ayudarme


----------



## Saint_ (Oct 31, 2013)

hola aun le faltan algunos detalles.


----------



## pj00 (Oct 31, 2013)

Saint_ dijo:


> hola aun le faltan algunos detalles.



gracias hermano. me he quedado sin palabras. ahora voy a tratar de unir todo, te digo no se nada por software de proteus, siempre he realizado las cosas en protoboard. no te molesta si tuviera algún obstaculo poder solicitar tu ayuda


----------



## Saint_ (Oct 31, 2013)

se hacen maravillas con lo simuladores y una ver terminado rara ves falla el circuito real.
Para mi es como ejercitar, "así no pierdo la practica".


----------



## pj00 (Oct 31, 2013)

Saint_ dijo:


> se hacen maravillas con lo simuladores y una ver terminado rara ves falla el circuito real.
> Para mi es como ejercitar, "así no pierdo la practica".



ya lo realice y me funciono lo que pasa ahora es en el soft que cuando lo le modifico el valor me da error que pudiera ser te lo adjunto. 
este es un pedaso del código dode le modifique el este

ext0:
	mov A,P0
	cjne A,#0,prende
	setb P3.5
	jmp salir1
prende: 
	cjne A,70h,salir1 ;aca comparaba con 0Eh  y ahora quiero que sea igual a 07h 
	clr P3.5
salir1:
	reti


----------



## Saint_ (Oct 31, 2013)

a mi no me sale ningún error al compilarlo, lo que no me queda claro es porque en esta linea de código
cjne A,70h,salir1
estas comparando el valor del acumulador con la dirección 70h o 07h según el caso si no tienes guardado ningún valor en dichas direcciones, lo mas coherente por el momento es que lo compares con una constante
cjne A,#70h,salir1    o     cjne A,#07h,salir1  según el caso.
adicional mente a eso como la interrupción externa del 8051 solo se dispara por nivel bajo por flanco de bajada, hay que adicional un inversor a la salida del adc y finalmente tomaste al revés  las salidas del adc.

también veo que una vez que la temperatura es igual a cierto valora se apaga un bit el problema de esto es que si por algún motivo la temperatura tiene un cambio rápido y el adc no toma las lecturas rápidamente quizá ese bit nunca se apague.


----------



## pj00 (Oct 31, 2013)

gracias bro, es con cjne,#70h es un valor de salida del adc0808 que coresponde con 27 grados 
gracias de nuevo. cualquier cosa que te haga falta me puedes molestar sin problemas ok


----------



## Saint_ (Oct 31, 2013)

ok, me alegra que todo haya terminado bien. un saludo y hasta la próxima.


----------

