"Knif" dla MCP4726 i innych I2C

Proste przykłady do częstych pytań.
ODPOWIEDZ
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

"Knif" dla MCP4726 i innych I2C

Post autor: niveasoft » 28 kwie 2017, 15:11

Nie wiem czy to kogoś zainteresuje, ale projektując pewne urządzenie wybrałem układ firmy Microchip MCP4726.
Jest to DAC czyli Digital to Analog Converter. Sterowany jest szyną I2C.

Układ ten ma obudowę SOT23-6 czyli sześć nóżek i nie bardzo mogli zaimplementować wybór adresu układu poprzez konfigurację nóżek.
Wpadli wiec na pomysł, że będzie można kupić układ z jednym z ośmiu adresów.

Co ciekawe ludzie, i ja do nich należę, najbardziej polubili ten pierwszy z brzegu adres A0.
Niestety koniunkturę wyczuli chyba handlarze i na znanym portalu aukcyjnym układy z tym adresem są czasem po 7zł - 9zł
Tymczasem każdy inny adres w TME można kupić za 3,5zł :D

Powstała wiec idea by:
-przy pierwszym włączeniu urządzenia sprawdzić jaki adres ma zamontowany DAC i potem go używać :D

Kod wygląda jak poniżej a przedstawiam go by każdy poszerzył swoje horyzonty myślowe i szukał lepszych sposobów na obejście zwykłych codziennych zmagań z rzeczywistością :D
  1. '*****************************************************************
  2. '*                 CONFIG FOR MCP4726 DAC                        *
  3. '*****************************************************************
  4.  
  5. Dim Dac_val As Word
  6. Dim Dac_bytes(2) As Byte At Dac_val Overlay
  7.  
  8. Dim Dac_learned As Byte , Dac_learned_ee As Eram Byte
  9. Dim Dac_address As Byte , Dac_address_ee As Eram Byte
  10.  
  11. Dac_learned = Dac_learned_ee
  12.  
  13.  If Dac_learned <> 0 Then
  14.   For Dac_address = 192 To 206 Step 2
  15.     I2cstart
  16.     I2cwbyte Dac_address
  17.      If Err = 0 Then
  18.       Dac_address_ee = Dac_address      'zapamietaj adres
  19.       Dac_learned_ee = 0                'zapamietaj ze wyuczono
  20.        Exit For
  21.      End If
  22.    Next
  23.  
  24.  
  25.  End If
  26.  
  27.  Dac_address = Dac_address_ee           'normalny odczyt adresu z pamieci
ODPOWIEDZ