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

[Bascom] Odczyt PCF8591 zwraca ciągle 255

MES Mariusz 26 Cze 2010 16:09 3190 18
  • #1 8234102
    MES Mariusz
    Poziom 36  
    Witam.

    Nie do końca potrafię namierzyć problem.

    Do odczytu wartości napięć na wejściach AIN0...AIN3 układu PCF8591 stosuję procedurę:

    Sub Pomiar_pcf
     I2cstart
     I2cwbyte Wpcf2
     Zmienna_byte$ = 64 Or Numer_wejscia$                       ' wlaczenie przetwornika DA (bit 7 control byte)
     I2cwbyte Zmienna_byte$
     I2cstart
     I2cwbyte Rpcf2
     I2crbyte Wartosc_ac$ , Ack
     I2crbyte Wartosc_ac$ , Nack
     I2cstop
    End Sub


    Const Rpcf1 = &B1001101
    Const Wpcf1 = &B1001100
    Const Rpcf2 = &B1001001
    Const Wpcf2 = &B1001000

    Config Sda = Portc.0
    Config Scl = Portc.1

    Atmega16.

    Adresy oczywiście ustawione z warunkami zgodnymi z PCB.

    Za każdym razem, i obojętnie na jakim kanale zwraca mi wartość 255.

    Nie mam pojęcia co robię nie tak:

    1. Uruchamiam i2c: I2cstart
    2. Adresuję do zapisu 1001000: I2cwbyte Wpcf2
    3. Włączam przetwornik DA (bit 7 control byte) bo chcę go też używać i wysyłam wraz z informacją o numerze wejścia:
    Zmienna_byte$ = 64 Or Numer_wejscia$
    I2cwbyte Zmienna_byte$


    4. Uruchamiam i2c: I2cstart
    5. Adresuję do odczytu 1001001 I2cwbyte Rpcf2
    6. Odczytuję:
    I2crbyte Wartosc_ac$ , Ack
    I2crbyte Wartosc_ac$ , Nack

    7. Kończę: I2cstop

    Z jakiegoś powodu ciągle otrzymuję 255. Ktoś pomoże namierzyć problem / podejrzewa co może być przyczyną?

    Poprawiłem tytuł.
    [zumek]
  • #2 8234374
    janbernat
    Poziom 38  
    No a co jest na wejściach tego przetwornika?
    Jakieś potencjometry?
  • #3 8234592
    MES Mariusz
    Poziom 36  
    janbernat napisał:
    No a co jest na wejściach tego przetwornika?
    Jakieś potencjometry?

    Dzielniki 100k do GND i 400k do wejścia złącza CON. Czyli gdy nic nie podłączone do wejścia CON wejścia AIN0...AIN3 są podpięte przez 100k do GND. Od strony 400k (CON) wiszą w powietrzu (nic nie podłączone).
  • Pomocny post
    #4 8234618
    zumek
    Poziom 39  
    MES Mariusz napisał:

    
    Const Rpcf1 = &B1001101
    Const Wpcf1 = &B1001100
    Const Rpcf2 = &B1001001
    Const Wpcf2 = &B1001000

    Zapisz prawidłowe adresy, a problemy znikną.
  • #5 8234714
    MES Mariusz
    Poziom 36  
    zumek napisał:
    MES Mariusz napisał:

    
    Const Rpcf1 = &B1001101
    Const Wpcf1 = &B1001100
    Const Rpcf2 = &B1001001
    Const Wpcf2 = &B1001000

    Zapisz prawidłowe adresy, a problemy znikną.

    Fakt, jakby nie ty to kto wie ile jeszcze bym tego szukał. Drugi po LSB bit mi się zawieruszył w programie. Poprawiłem, skompilowałem, zaprogramowałem i... dalej 255. Impulsy na SDA i SCL się pojawiają. W stanie spoczynku na obu stan wysoki. Coś nie mogę pobrać dalej prawidłowych wartości. Ciągle 255.

    Nawet zmieniłem procedurę na

    Sub Pomiar_pcf
     I2csend Wpcf1 , Zmienna_byte$
     I2creceive Rpcf1 , Wartosc_pcf$
     I2creceive Rpcf1 , Wartosc_pcf$
    End Sub


    I dalej to samo
  • #6 8235921
    janbernat
    Poziom 38  
    Trochę przerobiona procedura z helpa:
    
    Declare Sub Odczyt_pcf8591
    
    Dim Pomiar As Byte
    Dim Kanal As Byte
    Kanal = 0
    
    Const Read_ad = 145
    Const Write_ad = 144
    
    
    Do
    
    Call Odczyt_pcf8591
    Cls
    Lcd "Uwe=" ; Pomiar ; "0" ; "mV"
    Waitms 30
    
    Loop
    End
    
    
    Sub Odczyt_pcf8591
    I2cstart                                          ' I2C start
    I2cwbyte Write_ad                                 ' Wpis adresu PCF8591
    I2cwbyte Kanal                                    ' Kanał
    I2cstart
    I2cwbyte Read_ad                                  ' Odczyt adresu PCF8591
    I2crbyte Pomiar , Nack                            ' Odczyt ostatniego bajtu
    I2cstop
    End Sub
    

    Działa.
    Dla kanału 0 oczywiście.
  • #7 8239929
    MES Mariusz
    Poziom 36  
    Strasznie dziwna sytuacja rzeczywiście. Jeśli to nie program, to coś sprzętowo nie gra. SDA (Port C.0) i SCL (port C.1) są prawidłowo zadeklarowane i podciągnięte do VCC za pomocą rezystorów 4k7. Układ PCF8591 podłączony identycznie z tym schematem. Nigdy nie miałem większych problemów z uruchamianiem układów na i2c (choćby RTC czy eeprom). Faktem jest, że z PCF8591 mam do czynienia po raz pierwszy.

    Muszę chyba jakiś monitor I2C złożyć, bo już nie mam pomysłu skąd te 255 cały czas. W akcie desperacji chyba rzucę się na takie coś :-)
  • Pomocny post
    #8 8240286
    Konto nie istnieje
    Poziom 1  
  • #9 8240306
    janbernat
    Poziom 38  
    Sprawdź jak będzie po przełożeniu zworki jp4 do + a nie do napięcia z LM.
    I czy masz jakiś potencjometr wpięty- między + a gnd a suwak do kanał0.
    W połowie napięcia ustawiony.
    No miałem dopisać, ale atom mnie uprzedził.
  • #10 8240992
    MES Mariusz
    Poziom 36  
    Faktycznie sprawdzę jak będzie gdy VREF podepnę do VCC.

    atom1477, dzięki za linka, tego właśnie szukałem (180 zł piechotą nie chodzi ;-) )
  • #11 8241134
    janbernat
    Poziom 38  
    Bo jak masz 255 a nie jakieś bzdury to I2C chodzi ale PCF8951 ma na wejściu napięcie większe niż Vref.
    Dlatego ważne jest napięcie odniesienia i napięcie na suwaku potencjometru- a w zasadzie napięcie na wejściu odpowiedniego kanału PCF-a.
    Napięcie na wejściu PCF musi być niższe niż Vref.
    Zmierz miernikiem.
    P.S.
    Też zamówię produkt atom-a.
    Jak tez zamówisz to może się zlitują i parę sztuk skompletują.
    Bo to że mają w ofercie- to znaczy że jak zbiorą paru chętnych- może za parę miesięcy.
  • #12 8241435
    MES Mariusz
    Poziom 36  
    janbernat napisał:
    Bo jak masz 255 a nie jakieś bzdury to I2C chodzi ale PCF8951 ma na wejściu napięcie większe niż Vref.

    A mi się wydaje, że 255 to oznaka braku jakiejkolwiek komunikacji z układem na I2C, gdyż Bascom pakuje do zmiennej docelowej 255 również wtedy, gdy układ jest wyciągnięty z podstawki.

    janbernat napisał:
    PCF8951 ma na wejściu napięcie większe niż Vref.

    Mam nadzieję, że taka sytuacja (Vref=2,5V, AINX =< 5V) nie powinna zepsuć układu PCF. Już dziwne pomysły mi do głowy przychodzą.

    janbernat napisał:
    Dlatego ważne jest napięcie odniesienia i napięcie na suwaku potencjometru- a w zasadzie napięcie na wejściu odpowiedniego kanału PCF-a.

    U mnie sytuacja jak wyżej, czyli wejścia wiszą w powietrzu.
  • #13 8241573
    janbernat
    Poziom 38  
    Wejścia nie mogą wisieć w powietrzu!
    Aż nie chce mi się powtórnie wyciągać płytki żeby sprawdzić- ale daj ten potencjometr na wejście PCF.
    I musi być na wejściu PCF jakieś małe napięcie- z 1V.
    To nie jest Eeprom- to odczytuje napięcie na wejściu.
    P.S.
    No wyciągnąłem płytkę i sprawdziłem.
    Jak potencjometr nie ma masy- to jest stale 255.
    A paskudne do pomiaru- miernik zwiera i pokazuje 0V.
  • #14 8241635
    MES Mariusz
    Poziom 36  
    janbernat napisał:
    Wejścia nie mogą wisieć w powietrzu!
    Aż nie chce mi się powtórnie wyciągać płytki żeby sprawdzić- ale daj ten potencjometr na wejście PCF.


    No dobra, nie tyle w powietrzu, co, tak jak napisałem wyżej:

    Cytat:
    Dzielniki 100k do GND i 400k do wejścia złącza CON. Czyli gdy nic nie podłączone do wejścia CON wejścia AIN0...AIN3 są podpięte przez 100k do GND. Od strony 400k (CON) wiszą w powietrzu (nic nie podłączone).
  • #15 8241721
    janbernat
    Poziom 38  
    I2C Ci chodzi.
    Sprawdź połączenia części analogowej.
    Zwłaszcza od strony masy
  • #16 8241798
    MES Mariusz
    Poziom 36  
    janbernat napisał:
    I2C Ci chodzi.

    A po czym to poznajesz? Bascom ma tę właściwość, że zwraca 255 nawet gdy układu I2C nie ma w podstawce. Dopiero gdy jest poprawna komunikacja zwraca ewentualnie coś innego.
  • #17 8241860
    janbernat
    Poziom 38  
    Masz rację- wywlokłem z podstawki i dał 255.
    A adres PCF jest dobry?
    P.S.
    To jest trochę deprymujące- chodzi u mnie- a sondą z oscyloskopu nie sięgnę z warszawy do polanicy.
  • Pomocny post
    #19 8244428
    janbernat
    Poziom 38  
    To taki programik do sprawdzania pod jakim adresem jest coś na I2C:
    
    $crystal = 11059200.
    $regfile = "aTtiny2313.dat"
    
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2
    Config Scl = Portd.5
    Config Sda = Portd.6
    
    Dim Adres As Byte
    
    Cls
    Lcd "start"
    Wait 2
    Cls
    
    For Adres = 60 To 240 Step 2
    I2cstart
    I2cwbyte Adres
    I2cstop
          If Err = 0 Then
    
             Cls
             Lcd "uklad pod:" ; Adres
    
          Else
    
             Cls
             Lcd "brak ukladu" ; Adres
    
          End If
    Wait 1
    Next Adres
    Cls
    Lcd "koniec"
    

    Nie mojego autorstwa- tylko trochę przerobiony.
    U mnie PCF jest pod 144.
REKLAMA