Autor Tema: I2C no me funciona con Mikrobasic AYUDA por favor  (Leído 3256 veces)

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

Desconectado hoobeme

  • PIC10
  • *
  • Mensajes: 9
I2C no me funciona con Mikrobasic AYUDA por favor
« en: 15 de Junio de 2010, 02:40:12 »
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.







Desconectado gally

  • PIC10
  • *
  • Mensajes: 19
Re: I2C no me funciona con Mikrobasic AYUDA por favor
« Respuesta #1 en: 15 de Junio de 2010, 06:49:34 »
Yo segun he leido en la documentacion del mikrobasic despues del stop hay que meter un delay de 100ms


es decir esto:

Código: [Seleccionar]
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

  Delay_ms(100) 'pausa de 100 ms

  PORTB.0=0
    'NUNCA LLEGÓ AQUÍ EL MICRO, PIN B0 SE QUEDO EN 1
  PORTB.1=1
  I2C1_START()

no se si ese sera tu fallo, porque y tambien llevo poco tiempo con el microbasic.

Cuentame si te funcionó. saludos  :-/

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Re: I2C no me funciona con Mikrobasic AYUDA por favor
« Respuesta #2 en: 15 de Junio de 2010, 14:52:38 »
Veo que configuras el clock del modulo I2C a 4 MHz y segun entiendo por el datasheet del pic la frecuencia del clock :

SSPM3:SSPM0: Synchronous Serial Port Mode Select bits
0000 = SPI Master mode, clock = FOSC/4
0001 = SPI Master mode, clock = FOSC/16
0010 = SPI Master mode, clock = FOSC/64
0011 = SPI Master mode, clock = TMR2 output/2
0100 = SPI Slave mode, clock = SCK pin. SS pin control enabled.
0101 = SPI Slave mode, clock = SCK pin. SS pin control disabled. SS can be used as I/O pin.
0110 = I2C Slave mode, 7-bit address
0111 = I2C Slave mode, 10-bit address
1000 = I2C Master mode, clock = FOSC / (4 * (SSPADD+1))
1011 = I2C Firmware Controlled Master mode (slave idle)
1110 = I2C Firmware Controlled Master mode, 7-bit address with START and STOP bit interrupts enabled
1111 = I2C Firmware Controlled Master mode, 10-bit address with START and STOP bit interrupts enabled
1001, 1010, 1100, 1101 = Reserved

Puede que por ahí te venga el problema

Saludos

Desconectado hoobeme

  • PIC10
  • *
  • Mensajes: 9
Re: I2C no me funciona con Mikrobasic AYUDA por favor
« Respuesta #3 en: 15 de Junio de 2010, 23:00:20 »
Gracias por las respuestas, hize lo del delay_ms 100  gally, pero, se supone que la velocidad no es un problema como en las memorias debido a que este reloj soporta las velocidades de hasta 2MIPS, en fin, no lo he probado de momento hoy decidí tomarme el día, pero tienes razón solapower, me faltó configurar los bits cosa que casi no se hace en pic simulator ide, en fin mañana lo probaré y posteo la respuesta, Gracias a los dos y saludos desde el Estado de México.