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

[AT90S2313][BASCOM] - ADS1110 schemat

Mortan1 23 Gru 2008 11:36 10133 74
  • #1 5893781
    Mortan1
    Poziom 14  
    Witam
    Przed zlutowaniem układu chciałbym sie upewnić, że schemat jest ok. Jak, że nie jestem zaawansowanym elektronikiem stąd ta prośba.

    [AT90S2313][BASCOM] - ADS1110 schemat


    Urządzenie ma za zadanie mierzyć napięcie oraz pokazywać je na wyswietlaczu LCD, wszystko obsługuje mikroprocesor AT90S2313.

    Q1 - 4MHz
    C1, C2 - 33pF
    kondensator ceramiczny przy zasilaniu procesora - 100pF
    kondensator elektrolityczny przy zasilaniu procesora - 100uF


    Myślałem również na dodaniu kondensatora ceramicznego 33pF między Vin+, a Vin- przetwornika ADS1110.


    Po zlutowaniu układu napiszę program.


    Z góry dziękuje za pomoc.
    Pozdrawiam
  • Pomocny post
    #2 5893822
    dawid512
    Poziom 32  
    Pierwsze co się rzuca w oczy to:
    - brak potencjometru do kontrastu(3 noga LCD)
    - brak rezystorów podciągających na liniach SDA i SCL (np. 4k7)
    - brak 100nF przy ADS1110
  • #3 5894094
    Mortan1
    Poziom 14  
    Witam
    Schemat poprawiłem wg Twoich rad. Teraz jest już dobrze?

    [AT90S2313][BASCOM] - ADS1110 schemat
  • Pomocny post
    #4 5894252
    dawid512
    Poziom 32  
    Prawie, mówiąc rezystory podciągające miałem na myśli rezystory podłączone z jednej strony do VCC a z drugiej do linii SDA i SCL.
  • #5 5894395
    Mortan1
    Poziom 14  
    ok, dzięki za pomoc. Już wszystko wiem.
  • #6 5902026
    Mortan1
    Poziom 14  
    Ma ktoś jakiś pomysł na odchudzenie programu do 2kb? Obecneie zajmuje 2188 bajtów. 140 bajtów do odchudzenia.

    
    Dim Napiecie As Single , Pga As Integer
    Dim Addressw As Byte , Addressr As Byte , Pomiarh As Byte , Pomiarl As Byte
    Dim Napiecies As String * 10
    
    Addressw = &B1001101                                        'adresy do zapisu
    Addressr = &B1001111
    Pga = 1                                                     'Odczytu
    
    Cls
    Do
    Gosub Odczyt                                                'Odczyt Pomiaru
    Cursor Off
    Gosub Wyswietl                                              'Wyświetlenie Na Lcd
    Waitms 250
    Waitms 250
    Loop
    End
    
    Odczyt:
    I2cstart
    I2cwbyte Addressr                                           'Adres Do Odczytu
    I2crbyte Pomiarh , Ack                                      'Odczyt Pomiaru
    I2crbyte Pomiarl , Nack
    I2cstop                                                     'Bit Stopu
    Napiecie = Pomiarh * 256                                    'Przekształcenie
    Napiecie = Napiecie + Pomiarl
    Napiecie = Napiecie * 4.708
    Napiecie = Napiecie / 32768
    Napiecie = Napiecie / Pga
    Return
    
    Wyswietl:                                                   'Wyświetlenie Pomiaru Na Lcd
      Upperline
     Napiecies = Fusing(napiecie , "#.&&&")                     'Zaokrąglenie Wart. Napięcia
     Lcd "  Nap: " ; Napiecies ; " V"                           '... Oraz Jego Wyświetlenie
    Return                                                      'Powrót Z Podprocedury
    
  • #8 5902168
    Mortan1
    Poziom 14  
    Machnąłem się.

    Przetwornik ADS1110 ma wewnętrzne źródło referencyjne 2,048V i w odniesieniu do niego dokonuje pomiarów. Czyli musi tam być 2,048V!

    Czyli to oznacza, że muszę kupić pełną wersję bascoma, aby zaprogramować procka pod ten przetwornik?
  • Pomocny post
    #9 5902210
    Utul
    Poziom 13  
    Witam

    Najnowsza wersja Bascoma ma ograniczenie "już" do 4k kodu wynikowego.
    Wystarczy ściągnąć ze strony MCS Elektronics.

    Pozdro
  • Pomocny post
    #10 5902216
    ZbeeGin
    Poziom 39  
    Nie. Musisz tylko pobrać jedną z nowszych wersji, gdyż obecnie to 4KB jest granicą dla DEMO.
    A jeśli braknie to zawsze możesz poprosić kogoś kto ma pełną wersję o kompilację. Tylko, że wtedy program musi być bez wad ukrytych - tak jak Twój kod tutaj. $REGFILE, $CRYSTAL, CONFIG LCD, CONFIG SDA, CONFIG SCL przecież nie gryzą.

    A skoro chcesz przeskalować przez 2,048 to możesz też przeskalować przez 2048 i potem odpowiednio ustawić przecinek w ciągu.
  • #11 5902243
    Mortan1
    Poziom 14  
    Ale kurcze, mikrokontroler AT90S2313 ma tylko 2kb pamięci, więc nic nie da zmiana bascoma na nowszą wersję. Jeżeli nie da się skrócić tego kodu o 140 bajtów, to zostaje zakup innego procesora z rodziny AVR.
  • Pomocny post
    #12 5902263
    Utul
    Poziom 13  
    Witam

    ZbeeGin napisał:
    Nie. Musisz tylko pobrać jedną z nowszych wersji, gdyż obecnie to 4KB jest granicą dla DEMO.


    Co znaczy "nie" ?
    No chyba idzie się domyślić że chodziło mi o Demo, bo chyba pełna wersja nie ma ograniczenia do 4K
    Koledze Mortan1 na ten programik, to ograniczenie będzie wręcz zbawienne :D

    Pozdro


    Upss
    Racja nie zauważyłem że na ten procek to nic nie da
    Sorki za zawracanie dupy :cry:
  • Pomocny post
    #13 5902294
    ZbeeGin
    Poziom 39  
    Mortan1, piszę przecież abyś mnożył przez liczby całkowite i zrezygnował z Single. Wtedy ponad 40% kodu pójdzie "raus".
  • #14 5902371
    Mortan1
    Poziom 14  
    No wiec zgodnie z radą, zacząłem wycinać zmienną Single. Zacząłem od końca, usunąłem polecenie Fusing, bo bez single i tak nie zadziała... i kod się skompilował - zajmuje teraz 2016 i nie trzeba nic więcej kombinować.

    
    Dim Napiecie As Single , Pga As Integer
    Dim Addressw As Byte , Addressr As Byte , Pomiarh As Byte , Pomiarl As Byte
    
    Addressw = &B1001101                                        'adresy do zapisu
    Addressr = &B1001111
    Pga = 1                                                     'Odczytu
    
    Cls
    Do
    Gosub Odczyt                                                'Odczyt Pomiaru
    Cursor Off
    Gosub Wyswietl                                              'Wyświetlenie Na Lcd
    Waitms 250
    Waitms 250
    Loop
    End
    
    Odczyt:
    I2cstart
    I2cwbyte Addressr                                           'Adres Do Odczytu
    I2crbyte Pomiarh , Ack                                      'Odczyt Pomiaru
    I2crbyte Pomiarl , Nack
    I2cstop                                                     'Bit Stopu
    Napiecie = Pomiarh * 256                                    'Przekształcenie
    Napiecie = Napiecie + Pomiarl
    Napiecie = Napiecie * 2.048
    Napiecie = Napiecie / 32768
    Napiecie = Napiecie / Pga
    Napiecie = Napiecie * 1
    Return
    
    Wyswietl:                                                   'Wyświetlenie Pomiaru Na Lcd
      Upperline
     Lcd "  Nap: " ; Napiecie ; " V"
    Return                                                      'Powrót Z Podprocedury
    


    Dodano po 15 [minuty]:

    i... nie działa :(

    Układ zmontowany zgodnie ze schematem (z rezystorami podciągającymi):
    [AT90S2313][BASCOM] - ADS1110 schemat

    Na wyświetlaczu pokazuje się non stop napięcie 4,09... i żadnej reakcji na przytykanie do Vin+ i Vin- napięcia.
    why?:cry:
  • Pomocny post
    #15 5902698
    zumek
    Poziom 39  
    Mortan1 napisał:
    i... nie działa :(

    I nic dziwnego - nieprawidłowe adresy :|
    
    '...
    Addressw = &B1001101                                        'adresy do zapisu
    Addressr = &B1001111
    '...
    

    Kolejny "kwiatek" - marnotrawstwo pamięci programu ;)
    
    Odczyt:
    '...
    Napiecie = Napiecie * 1
    Return
    

    Pomyśl nad uproszczeniem poniższych obliczeń.
    
    Napiecie = Pomiarh * 256                                    'Przekształcenie
    Napiecie = Napiecie + Pomiarl
    Napiecie = Napiecie * 2.048
    Napiecie = Napiecie / 32768
    Napiecie = Napiecie / Pga
    

    Jak już to wszystko "naprawisz", to kod powinien być krótszy i co najważniejsze , działający :P
  • #16 5902789
    Mortan1
    Poziom 14  
    Dlaczego mówisz, że adres jest nieprawidłowy?
    Mam przetwornik E05, czyli zgodnie z pdfem ADS1110A5, czyli:
    dla zapisu: 1001101
    dla odczytu (o 1 większe): 1001111

    Tak jak mam w kodzie.
  • Pomocny post
    #17 5902814
    ZbeeGin
    Poziom 39  
    I na dokładkę: Gdzie odpowiednie polecenia CONFIG, które wskazałem wcześniej? Jeśli nie chcesz ich używać to czy sprawdzałeś w opcjach kompilatora czy SDA i SCL jest ustawione poprawnie?
  • #18 5902822
    Mortan1
    Poziom 14  
    Cytat:
    I na dokładkę: Gdzie odpowiednie polecenia CONFIG, które wskazałem wcześniej? Jeśli nie chcesz ich używać to czy sprawdzałeś w opcjach kompilatora czy SDA i SCL jest ustawione poprawnie?


    Sprawdzałem, wszystko ok. Ale zaraz dodam polecenia, chociaż nie wiem czy w tym tkwi problem.
  • #19 5902841
    ZbeeGin
    Poziom 39  
    Mortan1 napisał:
    Mam przetwornik E05, czyli zgodnie z pdfem ADS1110A5, czyli:
    dla zapisu: 1001101
    dla odczytu (o 1 większe): 1001111

    Hmm... W kodzie Graya?
  • Pomocny post
    #20 5902860
    zumek
    Poziom 39  
    Mortan1 napisał:
    Sprawdzałem, wszystko ok. Ale zaraz dodam polecenia, chociaż nie wiem czy w tym tkwi problem.

    Ponieważ mamy święta - czas prezentów, to wyłuszczę Ci, co masz nie tak z adresowaniem ;)
    Adres urządzenia i2c, to 7+1 bitów, czyli razem 8 bitów.
    Ósmy najmłodszy bit, to bit informujący odbiornik/slave o tym, że master chce zapisać(bit=0) lub odczytać(bit=1).W Twoim przypadku będzie to tak:
    
    Addressw = &B10011010                                        'adresy do zapisu
    Addressr = &B10011011
    

    W Bascomie możesz sprawdzić , czy aktualnie zaadresowane urządzenie odpowiedziało/zgłosiło się.
    
    I2cstart
    I2cwrite Addressw
    If Err=0 Then
       'Err=0 - urządzenia gotowe do przesłania danych
    Else
       'Err=1 - urządzenie o adresie Addressw nie odpowiada.
    End If
    

    Próbuj dalej.

    Piotrek
  • Pomocny post
    #21 5902884
    Balu
    Poziom 38  
    A schemat woła o pomstę do nieba.. Brak miejscami junction'ów, vcc i gnd jakoś pomieszane. Naucz się kolego używać etykiet (VCC, GND) - są w bibliotece takie "elementy" które nie dość, że etykietują net, to jeszcze są ładnie widoczne w schemacie.
    Poza tym, zdaje Sobie kolega sprawę, że 100nF jak najbliżej procesora i ADCa.
    Poza tym, jeszcze jakieś zapasowe junction'y się koledze pogubiły były (znaczy są nadmiarowe) na capach niektórych.
    Ł.
  • #22 5902921
    Mortan1
    Poziom 14  
    Ty to jednak masz głowę do wyszukiwania błędów! :)

    Teraz jest wszystko ok! Fejnie by było obciąć kilka zer po przecinku, ale raczej jest to niemołżiwe przy tym procesorze.

    
    Dim Napiecie As Single , Pga As Integer
    Dim Addressw As Byte , Addressr As Byte , Pomiarh As Byte , Pomiarl As Byte
    
    Addressr = &B10011011
    Pga = 1                                                     'Odczytu
    
    Cls
    Do
    Gosub Odczyt                                                'Odczyt Pomiaru
    Cursor Off
    Gosub Wyswietl                                              'Wyświetlenie Na Lcd
    Waitms 250
    Waitms 250
    Loop
    End
    
    Odczyt:
    I2cstart
    I2cwbyte Addressr                                           'Adres Do Odczytu
    I2crbyte Pomiarh , Ack                                      'Odczyt Pomiaru
    I2crbyte Pomiarl , Nack
    I2cstop                                                     'Bit Stopu
    Napiecie = Pomiarh * 256                                    'Przekształcenie
    Napiecie = Napiecie + Pomiarl
    Napiecie = Napiecie * 2.048
    Napiecie = Napiecie / 32768
    Napiecie = Napiecie / Pga
    Return
    
    Wyswietl:                                                   'Wyświetlenie Pomiaru Na Lcd
      Upperline
     Lcd "  Nap: " ; Napiecie ; " V"
    Return                
    


    Na tym kodzie wszystko gra.

    Dzięki za pomoc
  • Pomocny post
    #23 5902935
    Balu
    Poziom 38  
    Ależ da się :)
    jak masz w górej linii " Nap:" ; napiecie; " V"
    to zawsze możesz zrobić:
    Locate pierwsza_linia, np_10_kolumna
    potem
    LCD " V " (tyle spacji ile pustych okienek do końca).
    Co prawda nie będzie to zaokrąglać:) Ale utnie śmieci z końca ładnie;)

    Łukasz.
  • #24 5902961
    Mortan1
    Poziom 14  
    Cytat:
    A schemat woła o pomstę do nieba..

    W załączniku plik do eagla. Jeżeli ktoś miałby w przyszłości chwilkę czasu, to byłbym wdzięczny za ewentualne poprawienie błędów, które zrobiłem. Był to pierwszy schemat jaki wogóle narysowałem, więc napewno odbiega od ideału.

    Wesołych Świąt :D


    Cytat:
    Co prawda nie będzie to zaokrąglać:) Ale utnie śmieci z końca ładnie;)


    No i dzięki, o to chodziło. Dzisiaj już coś nie myślę...:|
  • Pomocny post
    #25 5903194
    zumek
    Poziom 39  
    Mortan1 napisał:
    ... Fejnie by było obciąć kilka zer po przecinku...

    Ostatni prezent i zapewne nowość dla niektórych użytkowników Bascoma.
    Kompilacja warunkowa:
    
    $regfile = "2313def.dat"
    Config Lcd = 16 * 2
    
    '*****  Kompilacja warunkowa ****
    Const Sing = 0                                    'Obliczenia      Sing=1 ->Single(float) , Sing=0 -> Long(int)
    Const Uv = 1                                      'Rozdzielczość   Uv=0 -> mV , Uv=1 -> uV
    '***** koniec                ****
    
    Const Addressr = &B10011011
    Const Addressw = &B10011010
    
    #if Sing = 1
       Dim Napiecie As Single
    #else
       Dim Napiecie As Long , L As String * 8
    #endif
    
    Dim Pga As Integer
    Dim Pomiarh As Byte , Pomiarl As Byte
    
    Pga = 1                                           'Odczytu
    
    Cls
    Do
    Gosub Odczyt                                      'Odczyt Pomiaru
    Cursor Off
    Gosub Wyswietl                                    'Wyświetlenie Na Lcd
    Waitms 250
    Waitms 250
    Loop
    End
    
    Odczyt:
    
    I2cstart
    I2cwbyte Addressr                                 'Adres Do Odczytu
    I2crbyte Pomiarh , Ack                            'Odczyt Pomiaru
    I2crbyte Pomiarl , Nack
    I2cstop                                           'Bit Stopu
    #if Sing = 1
       Napiecie = Pomiarh * 256                       'Przekształcenie
       Napiecie = Napiecie + Pomiarl
       Napiecie = Napiecie * 2.048
       Napiecie = Napiecie / 32768
       Napiecie = Napiecie / Pga
    #else
       Napiecie = Pomiarh * 256                       'Przekształcenie
       Napiecie = Napiecie + Pomiarl
       #if Uv = 1
          Napiecie = Napiecie * 1000                  'rozdzielczość w uV
       #endif
       Napiecie = Napiecie / 16
    #endif
    
    Return
    
    Wyswietl:                                         'Wyświetlenie Pomiaru Na Lcd
    
    Upperline
    Lcd "Nap:" ;
    #if Sing = 1
       Lcd Napiecie ;
    #else
       L = Str(napiecie)
       #if Uv = 1
          L = Format(l , "0.000000")
       #else
          L = Format(l , "0.000")
       #endif
       Lcd L;
    #endif
    Lcd " V"
    Return
    

    Sprawdź, ile zajmuje kod bez Single :-P

    Wesołych Świąt
  • #26 5903338
    Mortan1
    Poziom 14  
    Cytat:
    Sprawdź, ile zajmuje kod bez Single

    heh... prawie połowę mniej niż pierwowzór :)

    Dzięki, nawet nie wiesz jak mi się przyda ten kod i zaoszczędzone ponad 700bajtów miejsca.

    Dodano po 18 [minuty]:

    A czy istniała by metedo odszumienia sygnału podawanego na przetwornik? Gdy nie jest podłączony, do żadnego mierzonego napięcia pokazuje "śmieci" w postaci 0,009364 i zmienia. Jednak 0,009 utrzymuje się stale. Gdybym chciał robić pomiary z dokładnością do trzeciego miejsca po przecinku, czy istanieje jakaś możliwość odszumienia? Próbowałem kondenstaorami, ale jedyne co mi się udało, to obniżyć do 0,005.

    Maksymalne mierzone napięcie tym przetwornikiem to 6V?
    Gdzie w kodzie ustawia się szybkość konwersji, bo w pdf czytam, że może być ustawiona od 15 do 240sps?
  • Pomocny post
    #27 5903618
    ZbeeGin
    Poziom 39  
    Mortan1 napisał:
    Maksymalne mierzone napięcie tym przetwornikiem to 6V?

    Nie. +/- 2.048V

    Mortan1 napisał:
    Gdzie w kodzie ustawia się szybkość konwersji, bo w pdf czytam, że może być ustawiona od 15 do 240sps?

    Strona 11 noty katalogowej: "CONFIGURATION REGISTER".
  • #28 5904186
    Mortan1
    Poziom 14  
    Cytat:
    Strona 11 noty katalogowej: "CONFIGURATION REGISTER".

    Czyli wystarczy zmienić linijkę
    Addressr = &B10011011

    na
    Addressr = &B10001011

    ?


    Cytat:
    Nie. +/- 2.048V

    Skąd to wiesz? Nigdzie nie mogę wyszukać tej informacji...
    Czy da się ten zakres powiększyć?


    I jeszcze, czy jest mozliwość mierzania tym przetwornikiem napięcie z dokładnością do 0,000V?
  • #29 5904322
    ZbeeGin
    Poziom 39  
    Zupełnie nie rozumiesz jak działa magistrala I2C, zmieniasz na ślepo to czego nie powinieneś, nie potrafisz przeczytać ze zrozumieniem dokumentacji. Jak chcesz ukończyć ten projekt?
  • #30 5904414
    Mortan1
    Poziom 14  
    Ok, już chyba wiem.
    Adres: &B10011011, jest indywidualnym adresem przetwornika, umożliwia jego identyfikację przez procesor.

    Po starcie I2c należy wysłać do urządzenia osobne polecenie ustawienia 240sps.

    Co z pozostałymi pytaniami?

    Dodano po 4 [godziny] 50 [minuty]:

    Mierząc napięcie względem masy układu uzyskuje jeszcze wieksze nierówności, bo pokazuje aż 0,2V bez podłączanie niczego do punktu Vin+. Co w tym przypadku mam zrobić? Jakiś filtr?


    Co należy zrobić, aby móc mierzyć tym przetwornikiem napięcie z dokładnością do 0,000V?
REKLAMA