I2C problem i 16F628A

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dancar
EF Sponsor
Inlägg: 365
Blev medlem: 19 januari 2005, 00:25:09
Ort: Malmö

I2C problem i 16F628A

Inlägg av dancar »

Jag har problem att få I2c med 16F826A DS1307 att fungera. Jag ville först testa att köra den i mjukvara sen skall jag byta processor och testa hårdvaruvarianten. Kompilatorn är MikroC. Uppkopplingen jag använder är den på bilden nedan.

Bild

Detta är programmet jag kör, dock har jag kapat flash och flashFast då dessa bara kollar om processorn lever och att jag kopplat LEDs rätt. Vad som händer är att diodraden blinkar 2ggr för att sedan blinka snabbt före
initieringen av I2C för att sedan blinka snabbt en gång till. Väl inne i whilesatsen så blinkar alla LEDs, känns som det är på slump. Jag hade förväntat mig ett resultat där vissa LEDs lös en sekund för att sedan ändras och lysa så ytterligare en sekund osv.

Kod: Markera allt

void main() {
  unsigned int i;
  unsigned int Sec;
  unsigned int Min;
  unsigned int Hr;

  CMCON = 7;   //PORTA digital io
  TRISB = 0;
  PORTB = 0;
  
  //Check LEDs
  for (i = 1; i < 3; i ++) {
    flash();
  }
  
  flashFast();
  Soft_I2C_Config(&PORTA, 1, 0);  //Soft_I2C_Config(&PORT, SDA, SCL)
  flashFast();
   
  Soft_I2C_START();
  Soft_I2C_WRITE(0xD0);   //0xD0 is for writing data to registers
  Soft_I2C_WRITE(0x00);   //Start at register 0
  Soft_I2C_START;
  Soft_I2C_WRITE(0xD0);   //0xD0 is for writing data to registers
  Soft_I2C_WRITE(0x00);   //Start at Register 0
  Soft_I2C_WRITE(0x53);   //Load Seconds Value
  Soft_I2C_WRITE(0x57);   //Load Minutes Value
  Soft_I2C_WRITE(0x01);   //Load Hours Value
  Soft_I2C_STOP();
  
  while (1) {
    Soft_I2C_START;
    Soft_I2C_WRITE(0xD0);        //0xD0 is for writing data to registers
    Soft_I2C_WRITE(0x00);        //Start read at 0x00
    Soft_I2C_START();
    Soft_I2C_WRITE(0xD1);        //0xD1 is for reading data from registers
    Sec = Soft_I2C_READ(1);
    Min = Soft_I2C_READ(1);
    Hr = Soft_I2C_READ(0);
    Soft_I2C_STOP();

    PORTB = Sec;

    delay_ms(10);
  }
}
I projektet i MikroC har jag ställt io följande:
Device: P16F628A
Clock: 004.000000
_WDT_OFF = $3FFB
_LVP_OFF = $3F7F
_INTRC_OSC_NOCLKOUT

Någon som har en ide vad som kan vara tokigt?

Reeferenser:
Datablad PIC16F628A
http://ww1.microchip.com/downloads/en/D ... 40044D.pdf

Datablad DS1307
http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf


/Daniel