TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: elreypic2 en 08 de Junio de 2007, 12:47:09
-
Que tal amigos,
Hace tiempo coloque un post solicitando su ayuda para poder realizar la simulacion de las memorias con protcolo I2C, de las cuales recibi muchas respuestas, aunque ninguna satisfactoria (que indudablemente agradezco a todos los que me respondieron y de alguna manera colaboraron). Ahor al fin despues de pelear con Proteus y despues de una ardua lucha ayer me llego un momento de inspiracion y logre realizar la simulacion y todo el problema radicaba en el tipo de resistencia que coloque en las lineas de SDA y SCL. Originalmente yo estaba usando una resistencia de modelo analogico de 4.7K, pero me di cuenta que con esta no trabaja correctamente el bus I2C, asi que la sustitui por un modelo llamado PULLUP y "bingo" la simulacion comenzo a funcionar, asi que quiero compartir este tip para aquellos que tienen el mismo problema que yo.
Les recuerdo que este problema se presenta a parti de la version 6.9 de proteus, y en la version actual persiste, asi que yo realice pruebas en la version 7.X (porque no recuerdo) SP2. Suerte a todos y ojala que les sirva esto y no tengan que luchar con proteus por mas de 1 mes como lo hice yo.
Saludos.
Elreypic
-
Hola elreypic2
Seguramente mucha gente estará agradecida y obtendrá beneficios en la simulación con tu trabajo y esfuerzo por el cual te felicito y además celebro que lo hayas publicado.
Hace un tiempo estuve haciendo muchas pruebas en Proteus y tuve ese problema al querer usar una EEPROM (24LC16).
Sucedió que era más sencillo en mi caso, hacer las pruebas en protoboard donde corroboré el funcionamiento, ya que no pude hacerlo en Proteus.
Recuerdo haber leído tu post sobre el tema, pero como no iba a aportar nada de solución, decidí no participar, pero ahora sí quiero hacerlo para felicitarte por el logro y la enseñanza.
Saludos.
Mario
-
hola, yo soy de los tantos que nos peleamos con proteus y te agradezco sinceramente que compartas tu descubrimiento. felicidades por haberlo logrado.
un saludo
-
hola reypic2, justo toy en un problema similar, estaba simulando en el proteus el modulo i2c para el pic16f648a en ASM, las rutinas funcionana ok en la realidad, pero no en el proteus 7.1, voy a probar tu tip y comentos los resultados :-/
-
Ese tipo de cosas son las que me han alejado de Proteus cada vez que he intentado acercarme a el. Gracias por el dato, elreypic.
-
:-/ :-/ :-/ seee funciona chevere!!!
-
Ese fue hasta hoy uno de los problemas que mas me molestaban del proteus. Gracias amigo!
-
Cómo se conectaría el reloj Ds1307 ? Conseguí que me funcionara pero perdí el esquema y al volver a hacerlo no recuerdo cómo lo hice y no me funciona. Se colocan las resistencias de pull-up en las líneas SDA y SCA y puestas a 5 V. y algo más?
Esto me funcionaba; escribía en la dirección de control del RTC pero ahora se me bloquea en un bucle :
conds1307 BANCO_1 ;configurar RTC
movlw b'00011000'
movwf TRISC ;configurar SDA y SCA
movlw .49 ;(20*10^6/4*10^5)-1 =49
movwf SSPADD
movlw b'10000000'
movwf SSPSTAT
movlw b'00101000'
BANCO_0
movwf SSPCON
movlw 0x01
BANCO_1
movwf TRISB ;INT como entrada
BANCO_1
movlw b'00010000'
movwf datoi2c ;dato para registro control RTC
movlw 0x07
movwf diri2c ;dirección del registo control RTC
bcf PCLATH,3
bsf PCLATH,4
call escri_ds ;escribir en RTC
........
escri_ds BANCO_1 ;enviar secuencia de START
bsf SSPCON2,SEN ;bit SEN comienza secuencia
btfsc SSPCON2,SEN
goto $-1 ;permiso para escribir en DS1307
BANCO_0
movlw 0xD0 ;Carga el dato a enviar
movwf SSPBUF ;dirección esclavo + 0(bit escritura)
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
SE me queda en el anterior bucle; El bit R_W no se pone a 0 nunca, pero antes sí me funcionaba
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido, reinicia comunicación
movf diri2c,w ;dirección a W
BANCO_0
movwf SSPBUF ;dirección donde se va a escribir
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido,reinicia comunicación
movf datoi2c,w
BANCO_0
movwf SSPBUF ;pasar dato a SSPBUF
BANCO_1
btfsc SSPSTAT,R_W ;si es 0, se ha completado transmisión
goto $-1
btfsc SSPCON2,ACKSTAT ;Solo continua si llaga el ACK
goto stopI2C2 ;1=no reconocido,reinicia comunicación
stopI2C2 BANCO_1
bcf PIE1,SSPIE
bsf SSPCON2,PEN ;condición STOP
btfsc SSPCON2,PEN
goto $-1 ;se asegura que haya acabado
BANCO_0
return
-
Lo siento marioquillote; lo puse aquí porque como era un problema de simulación de una conexión I2C, pensé que se parecían los problemas; borraló si quieres; de todas maneras por si a alguien le interesa ya lo he solucionado, y ha sido justo al contrario. Con las resistencias pull-up no funcinaba y con las de 4k7 sí.
Saludos.
-
Hola standard, yo tambien tengo el mismo problema a mi parecer es problema del proteus, yo tengo conectado una memoria serial y el ds1307 al bus i2c con una resistencias analogicas con ellas funciona bien el ds1307 y solo puedo escribir una sola vez en la memoria pero cuando realizo el cambio por las memorias pull up de proteus ya no funciona nada y se queda en un bucle con el ds1307.
-
que raro, yo ahora uso todo con pullups y todo va bacán :-/, el ds1307 las memorias etc etc.
-
simplemente lo qeu buscaba, tb ya perdia los cabellos con el proteus, muchas gracias por el dato!!! gracias!!
-
:-/ :-/ :-/ :-/ estoy contento por su descubrimiento yo hasta ahora en la mañana me estaba rompiendola cabeza pensando que pasa porque no lee los mismos datos que escribo en la memoria.
les agradesco a todos y lo tendre en cuenta en mi proyecto. gracias :-/ :-/ :-/
-
Que gran aporte tenia serios problemas para realizar la simulacion de mi proyecto y ahora todo va super!!!!!
:-/ :-/ :-)