logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

- Połączenie Arduino z układem przez protokół I2C.

Elektronik2005 05 Sty 2020 04:23 504 4
REKLAMA
  • #1 18381711
    Elektronik2005
    Poziom 5  
    Witam! Znalazłem u siebie układ scalony KT0806L, jest to transmiter radiowy FM. (Datasheet: https://datasheetspdf.com/pdf-file/851042/KTMicro/KT0806L/1) Używa on protokołu I2C do zmiany wartości w jego rejestrze. Zrobiłem dla niego należytą płytkę i chcę się z nim połączyć przy pomocy Arduino DUE (bowiem jest to jedyne arduino u mnie pracujące na logice 3.3V, tak jak układ scalony). Ale niestety nie jestem doświadczony w pisaniu kodu do protokołu I2C i moja próba dokonania tego się nie udała. (a co gorsza nie mam 100% pewności, że układ jest sprawny) Czy mógłby ktoś na podstawie tego datasheetu napisać przykładowy kod do odczytu wartości w rejestrze jak poniżej na scn. (jest to zrzut ekranu z datasheetu więc tam będzie więcej).
    - Połączenie Arduino z układem przez protokół I2C.
    Z góry dziękuję za pomoc, pozdrawiam!
  • REKLAMA
  • #2 18381765
    ArturAVS
    Moderator
    Przecież nie musisz protokołu I2C robić na piechotę. Wykorzystaj biblioteki do obsługi, wysyłasz wtedy tylko komendy z adresem na magistralę ( a resztę robi sprzętowy I2C+biblioteka ).
  • REKLAMA
  • #3 18382561
    Elektronik2005
    Poziom 5  
    No właśnie to mam na celu, próbowałem z użyciem Wire.h ale ja nie miałem doświadczenia z I2C i nie udało mi się. Przede wszystkim nie wiem jak uzyskać bit ACK...
  • REKLAMA
  • #4 18382606
    ArturAVS
    Moderator
    Elektronik2005 napisał:
    Przede wszystkim nie wiem jak uzyskać bit ACK...

    Jak używasz biblioteki, to Cię wcale nie interesuje. Dajesz daną, rejestr, i adres komponentu na magistrali, i wyślij/odbierz. Sprzęt i biblioteka robią resztę. Przeczytaj ;https://www.arduino.cc/en/reference/wire i obejrzyj przykłady.
  • #5 18382760
    Elektronik2005
    Poziom 5  
    Napisałem taki kod:

    #include <Wire.h>
    
    void setup() {
      // put your setup code here, to run once:
      Wire.begin();
      Serial.begin(9600);
      delay(500);
      Serial.println("begin");
      Wire.beginTransmission(0b01101100);
      Wire.write(0x00);  
      Wire.endTransmission(); 
      Wire.requestFrom(0b01111101, 1); 
      if(Wire.available())
      {
        byte val = Wire.read();
        Serial.print(val); 
      }
    }


    I nie działa, czy jest tu jakiś błąd?

    EDIT: Napisałem go na podstawie tego scn
    - Połączenie Arduino z układem przez protokół I2C.
    I problem jest taki, że odczyt nie jest dostępny.

    Dodano po 46 [minuty]:

    A da się jakoś sprawdzić czy układ żyje? Mierzyłem prąd jaki pobiera i amperomierz pokazał 22.5mA (nominalnie 17mA) w stanie standby 80uA (nominalnie 3uA) więc za dużo, choć to może błąd mojego miernika... Nie mam niestety oscyloskopu a chcę sprawdzić czy chociaż na lini zegara jest jakiś ruch - czy jak podłącze pin zegara do wejścia analogowego arduino to zakłócę jego pracę?

    Dodano po 40 [minuty]:

    Dobra da się, zrobiłem na arduino miernik częstotliwości i oto wyniki: (do układu KT0806L podłączyłem rezonator 32.768KHz tak jak w oficjalnej nocie aplikacyjnej)
    32767Hz
    32767Hz
    32766Hz
    32767Hz
    32767Hz
    32767Hz
    32767Hz
    drobny błąd pewnie przez niedokładność arduino więc układ startuje. Myślę tak dlatego że nie jest to zewnętrzny generator częstotliwości tylko coś takiego:
    - Połączenie Arduino z układem przez protokół I2C.
REKLAMA