Skocz do zawartości

Pomocna odpowiedź

Napisano

Dzień Dobry wszystkim, założyłem ten temat ponieważ nigdzie nie moge znaleść odpowiedzi na swoje pytanie a mianowicie, dlaczego nie otrzymuje adresu konwertera i2c ? Po załączonych zdjęciach widac ze magistrala i2c nie kończy transmisji , ktoś byłby to w stanie wytłumaczyc ?

1.PNG 2.PNG

 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);            
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 0; address < 127; address++ )
  {
  
    Wire.beginTransmission(address);
    
    error = Wire.endTransmission();
    Serial.print (123);
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);          
}

posiadam arduino nano oraz zwykły wyświetlacz 16 znakowy z konwerterem i2c 

schemayt połączeć standardowy czyli 

5v-vcc

gnd-gnd

a4-sda

a5-scl

kod do wyszukiwania adresu konwertera i2c który zastosowałem

 

Oporniki są po to, że urządzenia na i2c albo zwierają coś do GND (czyli podają zero) albo nie zwierają (i wtedy trzeba jakoś tę jedynkę podać). Jak ich nie będzie to na linii będzie albo zero albo czort wie nie co, czyli pewnie też coś koło zera (albo co tak drut z powietrza wyłapie).

W Uno biblioteka Wire włącza wewnętrzne rezystory, w nano czy pro mini już nie. Nie pytaj dlaczego 🙂

  • Lubię! 2

Sprawdź jak działa ten program gdy nic nie podłączasz do I2C. A jeśli robisz wszystko OK, to może po prostu konwerter I2C jest uszkodzony. Czasami się zdarza. Dla 100kHz i 5V rezystor powinien być od 1,5-10k, dla 400kHz powinien być max 4k. Jak są nieco większe to tez zadziała, byle magistrala była krótka - mała pojemność. Z drugiej strony nie może być za mały bo im mniejszy tym większe zwarcie, czyli obciążenie prądem urządzeń na magistrali. W Google znajdziesz ładne wykresy dla pullup min i max w funkcji pojemności magistrali, prędkości transmisji i napięcia Vcc. Zazwyczaj są też w kartach katalogowych urządzeń z interfejsem I2C.

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...