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

Przetwornik 12bit ADS7828 (Texas) + ATMEGA16 na I2C PROBLEM

wdowa79 24 Maj 2005 23:57 2530 5
REKLAMA
  • #1 1522606
    wdowa79
    Poziom 11  
    Posty: 17
    Ocena: 2
    podlaczylem do ATEMGI16 ten nieszczesny przetwornik na I2C i zaprogramowalem Atmege w Bascomie
    przetwornik przesyla dwa bajty z opdpowiedzia - najpierw bardziej znaczacy a potem mniej znaczacy
    problem w tym ze ten mniej znaczacy plywa -wartosci wygladaja jakby byly losowe
    nie ma reguly co do monotonicznosci wartosci pokazywanej

    ma moze ktos jakis pomysl czego tomoze byc wina?

    przesylam listing programu w bascomie do komunikacji po I2C z ADS7828


    $crystal = 8000000

    Config Sda = Portc.1
    Config Scl = Portc.0
    I2cinit
    Config I2cdelay = 10
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portd.7 , Rs = Portc.7



    Dim K11 As Byte , K12 As Byte , K13 As Word , K14 As Word , K15 As Word , N1 As Single
    Dim K21 As Byte , K22 As Byte , K23 As Word , K24 As Word , K25 As Word , N2 As Single
    Dim Zapis As Byte , Komenda1 As Byte , Komenda2 As Byte , Odczyt As Byte

    Zapis = &B10010000
    Odczyt = &B10010001
    Komenda1 = &B10000100
    Komenda2 = &B11010100

    Do

    I2cstart
    I2cwbyte Zapis
    I2cwbyte Komenda1
    I2cstart
    I2cwbyte Odczyt
    I2crbyte K11 , Ack
    I2crbyte K12 , Nack
    I2cstop

    'I2cstart
    'I2cwbyte Zapis
    'I2cwbyte &B10000000
    'I2cstop

    I2cstart
    I2cwbyte Zapis
    I2cwbyte Komenda2
    I2cstart
    I2cwbyte Odczyt
    I2crbyte K21 , Ack
    I2crbyte K22 , Nack
    I2cstop

    'I2cstart
    'I2cwbyte Zapis
    'I2cwbyte &B11010000
    'I2cstop

    K13 = K11 * 256
    K23 = K21 * 256

    K14 = K12 + K13
    K24 = K22 + K23

    K15 = 5 * K14
    K25 = 5 * K24

    N1 = K15 / 4096
    N2 = K25 / 4096

    'N1 = N1 * 100
    'N2 = N2 * 100

    Cls
    Locate 1 , 1
    'Lcd Bin(k12)
    Lcd N1
    Locate 2 , 1
    'Lcd Bin(k22)
    Lcd N2
    Waitms 250

    Loop

    End
  • REKLAMA
  • REKLAMA
  • #3 1522660
    PiotrLotnik
    Poziom 15  
    Posty: 207
    Pomógł: 2
    Ocena: 2
    Ja swego czasu stosowałem 16 bit przetwornik ADS1110, też na I2C.
    Bardzo łatwy w obsłudze i dostępny na Allegro

    Pozdrawiam
    Piotr
  • REKLAMA
  • #4 1522949
    wdowa79
    Poziom 11  
    Posty: 17
    Ocena: 2
    Reszta elementow, za wyjtatkiem wyswietlacza, se schemtu jest podpieta ale dla tego programu nie jest uzywana.
    Zasilanie biore bezposrednio z zasilania procka z LM7805 (1A) wiec pobor pradu nie powienien przekroczyc 1A (max232 + LCD16*2 + Atmega16 + ADS7828).
    Dodatkowo mam podpiete potencjomatry rowniez pod atmege do wejsc A/C 10bit wbudowanego w uP.
    Wyniki obseruje na LCD wgrywajac osobny soft dla A/C wewnetrznego i osobny dla ADS7828. Oba aprzetworniki sa sukcesywnej aproksymacji (SAR) z tym ze wewnetrzny uP dziala bez zarzutu. Oczywiscie tez ma bledy pomiaru ale sa znacznie mniejsze niz dla ADS'a. Docelowo wartosc mierzona bedzie wyskalowana w 400V a na wejsciu przetwornika bedzie odpowiadac pelnemu zakresowi A/C (0 do 5V). I tak dla wew 10 bitowego A/C blad podczas wyswietlania nie powoduje zmian wartości jednosci tzn 2 do 4 najmniej znaczacyc bitow.
    Tymczasem dla ADS'a 12bit blad wynosi 8bitow - caly mlodszy bajt jest blednie wyswietlany.
    Załączniki:
    • Przetwornik 12bit ADS7828 (Texas) + ATMEGA16 na I2C PROBLEM Nowy-1.jpg (16.17 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #6 1684779
    daro_ju
    Poziom 2  
    Posty: 4
    Witam
    Wiem że to stary temat ale może komuś sie przyda, jest błąd w programie, brakuje funkcji przesuwania bitów : Shift Pom_1 , Left , 2
    Shift Pom_2 , Right , 6
    Podaje kawałek programu obsługujący podobny przetwornik AD7417 - 10 bitowy.
    Do

    I2cstart
    I2cwbyte Ad7417_write
    I2cwbyte &B00000001
    'I2cwbyte &B00101000 'kanal 1
    I2cwbyte &B01101000 'kanal 3
    I2cstop


    I2cstart
    I2cwbyte Ad7417_write
    I2cwbyte &B00000100

    I2cstart
    I2cwbyte Ad7417_read
    I2crbyte Pom_1 , Ack
    I2crbyte Pom_2 , Nack
    I2cstop



    Locate 1 , 1
    Lcd "Pom1:" ; Pom_1 ; "Pom2:" ; Pom_2 ; " "
    Locate 2 , 1

    Pom_1_t = Pom_1
    Shift Pom_1_t , Left , 2
    Shift Pom_2 , Right , 6

    Lcd "Pom1:" ; Pom_1 ; "Pom2:" ; Pom_2 ; " "


    Wartosc = Pom_1_t + Pom_2
    Locate 3 , 1
    Lcd "Wartosc : " ; Wartosc


    Locate 4 , 1

    Napiecie = Wartosc * 0.00244140625
    Napiecie = Napiecie * 10
    Napiecies = Fusing(napiecie , ##.#)
REKLAMA