Aktykuły które nie zmieściły się w żadnej kategorii

0102 /03
04Przedstawiona poniżej procedura skanuje szynę I2C i wyświetla wszsytkie znalezione na szynie urządzenia wyświetlając ich adresy.

W celu zobaczenie efektu skanowanie jest konieczne podłaczenie procesoro przez konwerter do komputera dzięki interfejsowi UART ( RS232 ).
06
070809
  1. void scanI2C(void)
  2. {
  3.       unsigned char i=0;
  4.       unsigned char i2cAddr=0;
  5.       char chhex[5];
  6.       char chhex7[5];
  7.       for(i=1;i<127;i++)
  8.        {
  9.           twi_start();  // start 
  10.           i2cAddr = (i<<1);
  11.           if (twi_adres(i2cAddr)==0) 
  12.             {
  13.                rsPrint("adres > "); 
  14.                itoa ( i2cAddr ,chhex,16);
  15.                itoa ( (i2cAddr>>1) ,chhex7,16);
  16.                if (i2cAddr<=15) rsPrint("hex > 0");
  17.                rsPrint(chhex);  rsPrint("  hax_pdf > ");
  18.                rsPrint(chhex7); rsPrint("  dec > ");
  19.                rsInt(i2cAddr);  rsPrint(" OK > ");
  20.                rsNext;
  21.            }
  22.          twi_stop();
  23.      }
  24. }

Procedury z biblioteki TWI

  1. unsigned char twi_adres(unsigned char address)
  2.       // odpowiedź = 0 urządzenie odpowiedziało
  3.       // odpowiedź = 1 urządzenie nie odpowiada
  4. {
  5.       char twst;
  6.       TWDR = address;
  7.       TWCR = (1<<TWINT) | (1<<TWEN);
  8.       while(!(TWCR & (1<<TWINT)));
  9.       twst = TW_STATUS & 0xF8;
  10.       if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
  11.       return 0;
  12. }
  1. void twi_start(void)
  2. {
  3. TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
  4. while (!(TWCR & (1 << TWINT)));
  5. }
  1. void twi_stop(void)
  2. {
  3. TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
  4. while ((TWCR & (1 << TWSTO)));
  5. }

rsInt, rsPrint to są moje funkcje wyprowadzające dane przez UART. Wynik mamy z zmiennej klawisz, odpowiednie bity zostaną ustawione na 1. Bit0 odpowiada cyfrze 1, Bit15 odpowiada klawiszowi 16


Dasej (C) 2019 : 4591