# Error proteus conversion A/D



## nwride (May 20, 2009)

Hola, mi problema es que ultimamente e decidido investigar un poco sobre la conversion analogico/digital, para ello e realizado un programa simple, (aun no se si esta bien, puesto que no tengo mucho control aun en esto de la programacion)
y al simularlo con el proteus, me genera un error de simulacion, el LOG del error es el siguiente:


```
SIMULATION LOG
==============
Design:   D:\mis documentos viper\pic\mi software\robot\BOT.DSN
Doc. no.: <NONE>
Revision: <NONE>
Author:   <NONE>
Created:  15/05/09
Modified: 20/05/09

Compiling source files... 
Processing bot.asm...
up to date.
Build completed OK.
Compiling netlist... 
Linking netlist...
Partition analysis...

Simulating partition 1 [6F7DE332]...
Animation started sucessfully...
PROSPICE Release 6.7 SP0 (C) Labcenter Electronics 1993-2005.
SPICE Kernel Version 3f5. (C) Berkeley University ERL.

Reading netlist...
Reading SPICE models...
Loading library 'ANALOGD.SML'
Loading library 'APEX.SML'
Loading library 'BURRBROWN.SML'
Loading library 'ELANTEC.SML'
Loading library 'FAIRCHLD.SML'
Loading library 'INTERSIL.SML'
Loading library 'LINTEC.SML'
Loading library 'NATOA.SML'
Loading library 'SUPERTEX.SML'
Loading library 'TECCOR.SML'
Loading library 'TEX101.SML'
Loading library 'TEX301.SML'
Loading library 'TEX3_1.SML'
Loading library 'TEX401.SML'
Loading library 'TEX5_1.SML'
Loading library 'VALVES.SML'
Loading library 'ZETEX.SML'
Loaded SPICE model 'TLE2425' from library 'TEX5_1'
Translated:	  EGND 99  0 POLY(2) (3,0) (4,0) 0 .5 .5
to		BEGND 99 0 V=0+0.5*V(3,0)+0.5*V(4,0)
Translated:	  FB 7 99 POLY(5) VB VC VE VLP VLN 0 74.8E6 -10E6 10E6 10E6 -10E6
to		BFB 7 99 I=0+7.48e+007*I(VB)+-1e+007*I(VC)+1e+007*I(VE)+1e+007*I(VLP)+-1e+007*I(VLN)
Translated:	  HREG 31 32 POLY(2) VPSET VNSET 0 1E2 1E2
to		BHREG 31 32 V=0+100*I(VPSET)+100*I(VNSET)
Translated:	  EREG 33 34 POLY(1) (36,34) 1.23 1
to		BEREG 33 34 V=1.23+1*V(36,34)
Building circuit...
Instantiating SPICE models...
[U1] PIC16 model release 6.7 SP0 simulating PIC1688 device.
[U1] Loaded 256 bytes of persistent EEPROM data.
[U1] Loading HEX file 'bot.HEX'.
[U1] Read total of 104 bytes from file 'bot.HEX'.
[U1] Loaded 51 program words and 0 data bytes.
PROSPICE -  Internal Exception: access violation in module 'PIC16.DLL'.

Real Time Simulation FAILED.
```

tambien adjunto el programa, ya que me temo que el problema será del programa, por que e provado con otros programas k tenia hechos, y no me da ningun error.. solo con el que e realizado para provar esto de la conversion A/D


```
LIST P=16F88
#INCLUDE "P16F88.INC"

__CONFIG	_CONFIG1,(3f10)	;palabra de configuracion

REG1	EQU 20
REG2	EQU 21
REG3	EQU 22
REG4	EQU 23
LDRMEM1	EQU 24
LDRMEM2	EQU 25


ORG 0
	BSF		STATUS,RP0	;SELECCIONAMOS BANK1
	MOVLW	b'11100000'
	MOVWF	ANSEL ;RA0 RA1 RA2 ANALOG LAS DEMAS DIGITAL
	MOVLW	b'00000000'
	MOVWF	TRISB ; PUERTO B SALIDA DIGITAL ENTERO
	MOVWF	b'11100100'
	MOVLW	TRISA		;SELECION DE ENTRADAS
	BCF		STATUS,RP0	;VOLVER A BANK0
	CLRF	PORTA		;LIMPIAMOS BANCOS
	CLRF	PORTB		;LIMPIAMOS BANCOS
	MOVWF	ADCON1
	
	
INICIO
	CLRF	PORTA
	CLRF	PORTB
	GOTO	LDR
	BTFSC	LDRMEM1,1
	CALL 	ENCENDERLED
	BTFSC	LDRMEM2,1
	CALL	ENCENDERLUZ
	
ENCENDERLED
	BSF PORTA,6
	RETURN
	
ENCENDERLUZ	
	BSF	PORTA,7
	RETURN
	
	
	  
;****LDR*** EN PATILLA 0 HABILITADA POR DEFECTO

LDR
	MOVLW	1	;ENCIENDE EL CONVERSOR A/D
	MOVWF	ADCON0
	CALL	RETARDO767 ;LLAMA AL RETARDO DE 767 MICROSEGUNDOS
	
REP1
	BSF	ADCON0,2	;INICIA LA CONVERSION

PREGUNTA
	BTFSC	ADCON0,2	;PREGUNTA SI TERMINO DE CONVERTIR
	GOTO	PREGUNTA	;VUELVE A PREGUNTAR SI NO HA TERMINADO
	MOVF	ADRESL,W	;PASA EL RESULTADO A LA EMMORIA  BIT MAS ISGNIFICATIVO)
	MOVWF	LDRMEM1
	BSF		STATUS,5
	MOVF	ADRESL,W
	BCF		STATUS,5
	MOVWF	LDRMEM2	;GUARDA EL BIT MENOS SIGNIFICATIVO
	GOTO	INICIO	;COMIENZA DE NUEVO LA CONVERSION****
	
	
	
	
	

RETARDO767	;RETARDO 767 MICROSEGUNDOS
	MOVLW	.255
	MOVWF	REG4
REP4
	DECFSZ	REG4,F
	GOTO	REP4
	RETURN


RETD		;RETARDO DE 100 MILISEGUNDOS
	MOVLW	2
	MOVWF	REG1
REP6
	MOVLW	84H
	MOVWF	REG2
REP2
	MOVLW	0FFH
	MOVWF	REG3
REP7
	DECFSZ	REG3,F
	GOTO	REP7
	DECFSZ	REG1,F
	GOTO	REP6
	RETURN
	
	
END
```



Si alguien pudiese echarme una mano con este tema, se lo agradeceria muchisimo, ya que me estoy empezando a desesperar con ello.. 

Un saludo!


----------



## andresarev (May 20, 2009)

Hola; yo tube un problema similar hace un tiempo, y despues de varios intentos me di cuenta que era un problema de las librerias. Yo desinstalé el proteus e instalé la version 7.5 que encontré en siguiente link y me funciono ok..... 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Intentalo y nos cuentas........


----------



## Vick (May 20, 2009)

Link editado

Por favor no coloquen enlaces a descragas ilegales, las normas de la comunidad no lo permiten...


----------



## andresarev (May 20, 2009)

Ok, no vuelve a suceder......


----------



## nwride (May 21, 2009)

Muchisimas gracias!, ya esta todo solucionado! todo funciona perfectamente ahora!

Un saludo!


----------



## Braulio (Ago 19, 2009)

Hola:

Resulta que tengo un problema muy muy similar

Practicando con CCS+Proteus 7.5 SP3 en un 16F877 encontré el siguiente problema cada vez que utilizaba el Puerto E:







*Internal Exception: access violation in module 'PIC16.DLL'*

Probé el programa en una simulación exclusiva y aparte con un único PIC 16F877 y el problema continuaba.

Para estar seguro que el CCS no tenía nada que ver, escribí un pequeño codigo en ensamblador manejando el Puerto E exclusivamente y lo simulé, con lo cual pude constatar que el problema se repetía solo cuando se lee/escribe el Puerto E bit a bit, osea en instrucciones como:

*bsf
bcf
btfsc
btfss*

o cuando la operación involucra solo uno de los bits como:

*
movlw	0x01
xorwf	puertae,1
*

Esto lo pude ver ejecutando paso a paso el programa des-ensamblado: cuando llegaba a dichas instrucciones, el error saltaba... (que si le ejecutas de modo continuo obviamente de frente te muestra el error)

Sin embargo no ocurre ningún error cuando de golpe se modifica todo el registro PORTE (0x09), así por ejemplo:

*
movlw	b'10101010'
movwf	puertae
*

...
Aqui les adjunto el código de mi programa prueba donde todas las instrucciones precedidas con ; (como si fueran comentarios) ocasionan el problema antes mencionado...


```
list	p=16f877a

trise	equ	0x89
puertae	equ	0x09

trisd	equ	0x88
puertad	equ	0x08

status	equ	0x03

	org	00

inicio

	bsf	status,5
	movlw	0x00
	movwf	trise
	movlw	0x00
	movwf	trisd
	bcf	status,5

	movlw	b'10101010'
	movwf	puertae

;	movlw	0x01
;	xorwf	puertae,1
	
;	bcf	puertae,0
;	bsf	puertae,1
;	bcf	puertae,2


	bcf	puertad,0
	bsf	puertad,1
	bcf	puertad,2

	nop`

	goto	inicio

end
```


Agradeceré mucho cualquier ayuda...

BRAULIO


PD:



			
				andresarev dijo:
			
		

> Hola; yo tube un problema similar hace un tiempo, y despues de varios intentos me di cuenta que era un problema de las librerias. Yo desinstalé el proteus e instalé la version 7.5 que encontré en siguiente link y me funciono ok.....
> 
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> 
> ...



Andresarev.. ¿Nunca te ha pasado con el Proteus 7.5? EL mio es 7.5 SP3 y tiene el problema...

Salu2


----------



## daac84 (Nov 1, 2009)

Hola 

me esta ocurriendo lo mismo con el pic16f877A 
alguien lo ha podido solucionar ??

tube que cargar los registros para poder hacer que funcionara pero la idea es poder poner  las instrucciones 

bcf
bsf 
sobre el puerto e


----------



## kamisama (May 29, 2010)

Sipili.

Acabo de volverme loco con eso... son las cosas que te hacen perder un dia entero en una pavada en lugar de avanzar hacia adelante.

Efectivamente, solo cuando ponie el PORTE como salida fallaba la cosa... Lo simule en el 7,2 y andaba bien, pero en Proteus VSM 7.5 no.

Venia de otros errores cuando me tope con este (el anterior era una falla en ADC [tildaba al proteus y no se podia hacer debug]).

La unica solucion que encontre es que cada vez que se desea cambiar el estado de alguno de los pines del PORTE, anteponer TRISE=0 para marcar que son todas salidas... y HIGH Y LOW en PBP no funcionan, en su lugar use  @bsf y @bcf y todo comenzo a funcionar.

Al parecer, siempre el PORTE intenta ser una entrada ANALOGICA y no se deja cambiar (por lo menos en el modelo 16F877A ya que en el 887 no ocurria este problema).

Entonces

TRISE=0
@bcf PORTE,2
...
TRISE=0
@bsf PORTE,1

Siempre tiene que estar inmediatamente arriba TRISE

Exitos, hasta la victoria.


----------



## uwaldo (Dic 18, 2011)

hola que tal como estan yo tengo un problema cuando simulo un circuito en el simulador proteus  utilizando el puerto USB
trabajando con MATLAB me orurre este error como interfaces grafica  i me sale este error como lo soluciono


----------

