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

PCF8591 przez I2C do at90S2313 na LCD...problem z odczytem.

copernick 28 Lis 2008 10:13 2078 2
REKLAMA
  • #1 5792664
    copernick
    Poziom 10  
    Witam.
    Pracuje na testowej płytce AVT3500.
    Wrzuciłem na warsztat interfejs I2C.
    Chciałbym odczytywać napięcie podawane z niezależnych źródeł na trzy wejścia PCF8591 i przesyłać dane do AT90S2313 a następnie wyświetlać je na LCD.
    Jeżeli chodzi o przypadek gdy chcę mierzyć tylko napięcie podawane na wejście I0 to odczyt wyświetlany jest bez problemu. Natomiast przy próbie jednoczesnego wyświetlenia trzech napięć program wyświetla pod zmiennymi dla tych napięć wartość napięcia podawanego na I0.
    Czy problem leży w adresowaniu?
    Oto program:

    Dim Odczyt1 As Byte , Odczyt2 As Byte , Odczyt3 As Byte
    Do
    Cls
    I2cstart
    I2cwbyte 145
    I2crbyte Odczyt1 , Ack
    I2crbyte Odczyt2 , Ack
    I2crbyte Odczyt3 , Nack
    I2cstop
    Waitms 1
    Lcd "U1=" ; Odczyt1 ; "V" ; " U2=" ; Odczyt2 ; "V"
    Lowerline : Lcd "U3=" ; Odczyt3 ; "V"
    Waitms 800
    Loop : End
  • REKLAMA
  • #2 5832930
    snow
    Poziom 31  
    Najpierw wysyłasz adres PCF'a, później Control byte żeby wiedział z którego wejścia ma czytać a dopiero później odczytujesz z przetwornika dane.
  • #3 5833550
    LED5W
    Poziom 34  
    Jestem na podobnym etapie tylko, że na zl11avr. ;)
    Wyszło mi za 2, czy 3. razem i mniej więcej wygląda tak:
    Do
    Cls
    Lcd "0:" ; Odczyt0
    Locate 1 , 8 : Lcd "1:" ; Odczyt1
    Lowerline : Lcd "2:" ; Odczyt2
    Locate 2 , 8 : Lcd "3:" ; Odczyt3
    I2cinit                                                     'umożliwia pracę szyny
    I2cstart                                                    'sygnał startu magistrali I2C
    I2cwbyte 144                                                'wyślij adres "odbiorczy" PCF8591
    I2cwbyte &B01000100
    I2cwbyte 255
    I2cstart
    I2cwbyte 145
    I2crbyte Odczyt0 , Ack                                      'z przetwornika do zmiennej Odczyt
    I2crbyte Odczyt1 , Ack
    I2crbyte Odczyt2 , Ack
    I2crbyte Odczyt3 , Nack
    I2cstop                                                     'sygnał stopu magistrali I2C
    Waitms 500
    Loop
    End


    Ważna jest linijka I2cwbyte &B01000100 włącza tryb "autoincrement" dzięki któremu scalak kolejno podaje wartości odczytów.
    można też podać adres w dwóch najmłodszych bitach. Szczegóły tu.

    A tak przy okazji to proszę o odpowiedź w tym temacie.
REKLAMA