Hola a todos, tengo un problema, hace unos mesesitos me decidí por usar mikrobasic para mis proyectos (antes usaba una demo de pic simulator ide), el problema está en que ahora intento hacer un relojito por que me cuesta mucho despertar en las mañanas je je (es broma), solo por diversión, para ello recurrí a unos PCF8583 (reloj calendario), que tenía arrumbados ya de hace unos años, con el pic sim ide, nunca me costó trabajo hacerlos funcionar (I2CWrite sda, scl, 0xa0, addr, 0; etc.) ahora lo intenté con mikrobasic, pero no puedo hacer que me funcione la comunicacion I2C por hardware con mi micro, es más el polimetro no me detecta ninguna señal/frecuencia ni en sda ni en scl, así que puse una condicion al rb0 para ubicar el proceso en el que va el micro con un portb.0=0 etc como verán en el codigo lineas abajo, y cuando el micro va a empezar a comunicar el RB0 tiene que ponerse en alto, y al momento del stop de la escitura I2C, RB0 debería de ponerse a bajo (cero) cosa que nunca pasa se me bloquea el micro en el comando I2C_wr(0xA0), alguien le puede hechar un ojo a mi codigo y orientarme en que estoy haciendo mal, por favor??????
' micro usado pic16f877A con cristal de 4Mhz
program escritura 'pcf8583
DIM SEC AS BYTE
adcon0=0
adcon1=0
trisa=0x00
trisb=0x00
trisc=0x00
trisd=0x00
trise=0x00
porta=0x00
portb=0x00
portc=0x00
portd=0x00
porte=0x00
Delay_ms(1000)
I2C1_Init(4000000) ' inicalización del reloj
I2C1_Start() ' Inicio de comunicación I2C
PORTB.0=1
'HASTA AQUI ESTOY SEGURO DE QUE FUNCIONA CORRECTO
'----------------------------------------------------------------------------
I2C1_Wr(0xA0) ' escritura de direccion del esclavo
I2C1_Wr(0) ' dirección registro cero de PCF8583p
I2C1_Wr(%10000000) ' el bit mas significativo a 1 para parar el reloj
I2C1_STOP
PORTB.0=0
'NUNCA LLEGÓ AQUÍ EL MICRO, PIN B0 SE QUEDO EN 1
PORTB.1=1
I2C1_START()
I2C1_Wr(0xA0) ' Escribe 30 BCD a registro de centecimas de segundo (0x01)
I2C1_Wr(0X02) '
I2C1_Wr(0x30) ' Escribe 30 BCD a registro de minutos (0x02)
I2C1_STOP
PORTB.1=0
'leer los segundos en el reloj cada xxx tiempo
while true
I2C1_Start() ' comienzo de comunicacion I2C
I2C1_Wr(0xA1) ' Direccion de lectura del dispositivo
I2C1_Wr(2) ' Dirección del registro con los segundos
SEC = I2C1_Rd(1) ' Leer dato en el registro sin bit ACK
I2C1_Stop() ' detener comunicación
PORTB=SEC
delay_ms(100) ' esperar xxx tiempo para repetir
wend 'repetir lectura nuevamente
end.
Recurri al codigo viejo que tenia del pic simulator ide y se lo programe al micro (cambiando unas lineas), y a funcionar de maravilla!!!, pero el problema es que ahora no quiero regresar al pic sim ide ya que en lo personal le veo mas ventajas al mikrobasic por que soporta más micros, así que pues me tengo que poner pilas con este lenguaje de programación, pero hay algunas cosas que me cuestan trabajo dominar de este lenguaje, para esto llevo al rededor de 4 días y un poco más y no logro hacerlo correr, por lo que no puedo avanzar con el proyecto.
Espero que me puedan ayudar, por que la verdad ya no se ni que rayos mover para que jale. de ante mano gracias por la ayuda que me puedan proporcionar.