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

Atmega 32, bascom, problem z zewnętrznym AC-MCP3202-c

pablo010 23 Wrz 2009 11:01 2697 6
REKLAMA
  • #1 7048484
    pablo010
    Poziom 10  
    Mam problem z podłączeniem zewnętrznego przetwornika AC MCp3202 do atmegi 32.
    Opis katalogowy jest na stronie: Link.
    Czy mam podłączyć ten przetwornik w poniższy sposób:

    1.CS - do pb4 (ss) atmegi
    2.wejście analogowe
    3.wejście analogowe
    4. +5V
    5.Din - nie wiem gdzie podłączyć??
    6. Dout- Pb6 (MISO)
    7. Clk- pb7 (sck)
    8. Vdd/Vref - +5V

    Tylko pozostaje problem gdzie jest masa??

    Gdy tak podłączyłem układ, cały czas wyświetla mi się 256 lub 0

    Program wygląda tak:
    
    Config Pinb.7 = Output
    Config Pinb.5 = Output
    Config Pinb.4 = Output
    Config Pinb.6 = Input
    
    Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = None , Clock = Portb.7
    
    Dim Wart_ac As Integer
    Dim V As Single
    Dim Wart_nap As Word
    
    Spiinit
    
    Do
       Reset Portb.4
       Delay
       Set Portb.7
    
       Delay
       Reset Portb.7
    
       Delay
       Spiin Wart_ac , 1
    
    
       Set Portb.4
       Cls
       Lcd Wart_ac
    
    
       Lowerline
       V = Wart_ac * 0.0012
    
    
       Wart_nap = Fusing(v , "#.&&&&")
    
       Lcd Wart_nap
    
       Waitms 100
    
    Loop
    End
    
  • REKLAMA
  • #2 7048570
    Marczeli_P
    Poziom 20  
    VSS to jest masa i Vdd/Vref masz napięcie zasilania wraz z napięciem odniesienia.
    Pin Din - dane wejściowe do przetwornika,
    Pin Dout - dane wyjściowe do przetwornika.
    zajrzyj do pomocy pod hasło config spi i wszystko ci się wyjaśni.
  • REKLAMA
  • #3 7054678
    pablo010
    Poziom 10  
    niestety dalej nie działa, cały czas pokazuje 0 lub 256
  • REKLAMA
  • Pomocny post
    #4 7055135
    rpal
    Poziom 27  
    Pomogę koledze w obsłudze tego przetwornika bo 2 lata temu sam z tym walczyłem.
    W nocie masz schemat i może go niedokładnie zastosowałeś. Po pierwsze on ma dwa kanały które a sposób ich obsługi jest określony przez zaprogramowanie trybu pracy. Ale o tym poźniej. Najpierw musisz się zdecydować jaki tryb wybierasz domyślam się że chodzi o zamianę napięcia dodatniego o wartości mieszczącej się w granicach napięcia odniesienia i dodatkowo o wspólnej masie ? W moich założeniach przyjme że tak jest i koncówka 2 to +IN a 3 to -IN. Końcówka 3 (-IN) musi być połączona do masy. Dobrze jest zastosować buforowanie choć to nie jest konieczne. Taki bufor to wzmacniacz operacyjny w układzie wtórnika napięciowego który ma wzmocnienie =1.
    Aby go zbudować możesz użyć np. wzmacniacz rail to rail i jego wejście - przez rezystor np. 10k połączyć z wyjściem, masa do masy, zasilanie do zasilania wejście + to wejście wtórnika. Jak na schemacie w nocie tylko bez rezystorów między wejściem + a masą. Sam ACD powinien mieć koniecznie kondensatory przy zasilaniu. Ten o pojemności 10u musi być tantalowy a ten 0,1u ceramiczny.
    Teraz transmisja. Ukłąd jest 12 bitowy więc wynik jest także w wartości 12 bitowej, jednak dane z uP masz w układzie 8 bitowym. Zatem pierszy wysłany bajt zawiera bit startu od którego ACD zaczyna swoje przetwarzanie (przyznam się że nie pamiętam czy jego wartość ma jakieś znaczenie- chyba nie) następne 2 bity to programowanie trybu pracy w podanym przeze mnie przypadku muszą być 0 0 natomiast ostatni bit konfiguracji okresla czy kolejność transmisji lsb/msb albo msb/lsb. Przyjmę że idzie to w konwencji msb/lsb i wówczas powinien on miec wartość 1. Pozostałe bity nie mają znaczenia. Zatem jesli transmisję rozpoczniesz od ustawienia końcówki CS (pin 1)w stan niski a potem wyślesz kolejno 0bx001xxxx 0bxxxxxxxx gdzie znak x to wartość nieznaczaca to powinieneś zaprogramować układ i odczytać jego wartość w kolejności msb/lsb.Transmisję kończy ustawienie na CS stanu wysokiego. Pamiętaj że transmisja spi jest dwukierunkowa i każde wsyałen słowo 8bitowe zwraca wynik. Pierwsza wysłana wartość 0bx001xxxx zwraca twoje msb gdzie wazne dla odczytu są 4 ostatnie bity a druga wysłana wartość (jakakolwiek) zwraca całość czyli 8 bitów całego 8bitowego słowa. Twój wynik to 4+8=12 jak rozdzielczoś przetwornika. Z tego powodu musisz podczas transmisji odczytywać dane z spi i zapisywać je w zmiennych tak aby potem złożyć liczbę typu int(16 bitowa) która będzie zawierać w sobie 12bitowy wynik przetwarzania. I to wszystko jeśli eletrycznie układ jest poprawny to błąd tkwi w programowaniu. Ważne jest też napięcie odniesienia jakie sobie tam przyjmiesz w zasadzie może być wziete z zasilania ale zwykle używa się do tego odpowienich żródeł. Wygodne są te o napięciu 4,1 V bo wówczas masz przetwarzanie co 0,001V i nie trzeba tego przeliczać. I na koniec przekroczenie na wejściu ACD wartości napięcia odniesienia skutkuje tym że wynikiem będzie odczytanie 0 jako błedu przepełnienia. Trzeba przyznać że te programowanie kanałów komplikuje sam odczyt gdybyś wybrał sobie np.ADS7816P to aby dokonac przetworzenia wystarczyłoby wysłać po spi cokolwiek a wynik byłby oczywisty a tak tzreba kombinowac przy programowaniu przetwornika. Zakładam ze sygnały uP typu MOSI,MISO są poprawnie podłączone t.j. MOSI -Dout(pin 6) MISO - Din(pin 5).
    Mam nadzieję że sam czegoś nei pomyliłem :)
  • #5 7060704
    pablo010
    Poziom 10  
    Dziękuję bardzo za tak wyczerpującą podpowiedź. Jest to mój pierwszy kontakt z wymianą danych przez SPI, dlatego tez proszę o wyrozumiałość.
    Troszkę zrozumiałem ideę SPI, ale jednak dalej nie bardzo rozumiem jak odebrać te dane. Mój program wygląda tak:
    Set Portb.4
       Reset Portb.4                                            ' ustaweinie stanu niskiego na cs
    
    
       Delay                                                    ' opóźnienie
    
       Spiout Word_b1 , 1                                       ' wysłanie 1 bajtu
    
       Delay
    
       Spiin Msb , 1                                            'odebranie 1 bajtu
    
       Delay
    
       Spiout Word_b2 , 1                                       'wysłanie 2 bajtu
       Delay
       Spiin Lsb , 1                                            'odebranie 2 bajtu
       Delay
    
       Set Portb.4                                              'ustawienie cs na stan wysoki
    


    Tylko że dalej na wyświetlaczu "skaczą" cyfry, więc coś jest nie tak. Podłączenie ze strony elektrycznej jest dobre.
  • REKLAMA
  • #6 7074520
    rpal
    Poziom 27  
    Więcej nie dam rady pomóc a co to komend które w Bascom są odpowiedzialne za transmisje nie mam zielonego pojęcia. Mam nadzieję że CS ustawia w stan niski kolega ? Poza tym proponuję sprawdzić samą transmisję na jakiejkolwiek pamięci SPI i będziesz mieć pewność że sam układ oraz używane "procedury" są odpowiednie.
  • #7 7077129
    pablo010
    Poziom 10  
    Ok, dziękuję za i tak dużą pomoc. Będę działał dalej- może zmienię przetwornik. W każdym bądź razie pomyślimy zobaczymy zrobimy:)
REKLAMA