Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 gru 2024, o 19:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 20 wrz 2016, o 13:35 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Witam,
Mam problem z komunikacją pomiędzy ATMega32A a przetwornikiem ADC AD7731(link do noty: http://www.analog.com/media/en/technica ... AD7731.pdf).
Problem polega na tym że coś jest chyba nie tak w funkcji do odbioru 3 bajtów, podejrzewam że może to być brak stanu niskiego na pinie RD przetwornika, ale usuwałem ten fragment gdzie jest sprawdzenie czy wystąpił stan niski i nic to nie dało. Dodałem sobie diodę, żeby widzieć czy program w ogóle działa, dioda zaczyna migać a sygnał na lini SCK zaczyna być aktywny gdy odłączę od przetwornika sygnał MOSI, nie wiem dlaczego tak się dzieje. Na to wychodzi że nic nie mogę wysłać do przetwornika, dlatego mam problem z odbiorem. Używając funkcji do odbioru pojedynczego bajtu i wyświetleniu jej na wyświetlaczu pojawiają się losowe liczby z zakresu 0..255(oczywiście tylko wtedy gdy linia MOSI jest odłączona, gdy jest podłączona nic się nie wyświetla i program się jakby zawiesza)

Daje tutaj schemat podłączenia, podłączyłem na podstawie noty katalogowej, z wyjątkiem pinu CS przetwornika, który w nocie był podłączony do masy, a ja go podłączyłem do pinu SS ATmegi.
Obrazek

Do podłączenia musiałem użyć bufor napięciowy, gdyż zasilanie przetwornika to 3V i nie można go przekroczyć, ATMega zasilana jest napięciem 5V, bufor również jest zasilany takim napięciem.
Kod programu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Założenie jest takie że wysyłam do rejestru komunikacyjnego bajt informujący przetwornik o kolejnej operacji wpisania bitów do Mode register i wysłaniu 16bitów do rejestru konfiguracyjnego(Mode Register), następnie jeszcze raz wysyłam bajt do R. komunikacyjnego, żeby uruchomić ciągłe odbieranie danych z Data register(odbieranie 3 bajtów).

Proszę o pomoc, już nie wiem od której strony mam do tego podejść, sprawdziłem już parę razy podłączenie, i nie wiem czy wina leży po stronie programowej czy sprzętowej czy po obu stronach.



Ostatnio edytowano 20 wrz 2016, o 15:13 przez fundomikey, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 14:02 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

Nie chcę namieszać ale wydaje mi się, że zgodnie z rys.16, str.34, funkcja SendSpi powinna wyglądać nieco inaczej:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 16:54 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Zmieniłem ale nic to nie dało, ale raczej trzeba linie CS wprowadzić w stan niski. Jedynie od czasu do czasu pojawia się jakaś wartość na wyświetlaczu, ale jest ona tylko przez chwile i pojawia się przy resetowaniu procka. Program się zatrzymuje przy podłączeniu lini MOSI, czyli dalej jest cos nie tak z wysyłaniem.. Poza tym mam konflikt pomiędzy SPI a ISP, ponieważ żeby zaprogramować procka muszę odłączać linie MOSI, próbowałem już poprzez rezystor podciągać linie SS do zasilania ale żadnego pozytywnego efektu to nie dało.
Zmieniłem jeszcze funkcje do odbierania:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 17:17 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

No, ale po odebraniu bajtów musisz ustawić linię CS ponownie na "1", prawda? W kodzie tego nie masz. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 20:11 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Teraz funkcja odbierania wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wysyłanie raczej już jest ok, problem z odbiorem bo gdy chce odebrać te 3 bajty, program zatrzymuje się gdzieś w tej funkcji, próbowałem też bez sprawdzania stanu na pinie RD ale to nic nie daje. Za to gdy w petle główną dam odbieranie tylko jednego bajtu to na wyświetlaczu pojawiają się szybko zmieniające się liczby 3 cyfrowe, także coś przetwornik wysyła.. Może problem leży w czasach pomiędzy odbieraniem poszczególnych bajtów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2016, o 07:24 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Tutaj masz błąd:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Powinno być raczej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2016, o 08:57 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

Poza tym, albo używasz klamerek w if, albo, co wyglądałoby znacznie lepiej, pętli while:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 wrz 2016, o 15:38 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Sparrow-hawk Rzeczywiście mam błąd, nie wiem jak to mogłem źle przepisać, a przepisywałem z książki Pana Mirka.
Jednak przepisałem dobrze ale Eclipse pokazał mi ostrzeżenie o zmienieniu & na && i stąd ten błąd.
Teraz komunikacja ruszyła, pokazuje mi sie na ekranie szybko zmieniająca 8 cyfrowa liczba czyli tak jak powinno być, ale z podłączonym na sztywno do masy pinem sprawdzającym stan pinu RD przetwornika, gdyż jak podłącze do przetwornika to komunikacja sie zatrzymuje, dalej coś jest nie tak. Spróbuje jeszcze raz prześledzić to co wysyłam do przetwornika, może błąd leży po stronie jego konfiguracji, albo poprastu z tym przetwornikiem coś jest nie tak, bo znalazłem na angielskim forum podobny przypadek z brakiem stanu niskiego na pinie RD przetwornika, i okazało się że dwa przetworniki jakie posiadał ten Pan były zepsute.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2016, o 14:44 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Dalej z tą komunikacją jest coś nie tak, mógłby ktoś sprawdzić schemat, czy dobrze podłączyłem?
Obrazek

Ponadto mam błędy podczas programowania, np takie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

myślałem że to przez złe zasilanie, sprawdziłem wszystkie połączenia dodałem dodatkowe kondensatory filtrujące ale winna okazała się linia MISO, i po jej odpięciu programowanie przebiega bez problemu. Co mogę jeszcze zrobić żeby nie musieć odpinać tej lini podczas programowania?
Poza tym program działa tak że wyświetlają mi się na zmianę dwie wartości, wyświetlają się nawet wtedy gdy odłączę linie MISO, MOSI od ADC. Sprawdziłem już bity jakie wysyłam czy na pewno są poprawne a mianowicie:
1) wysyłam jeden bajt do COMMUNICATIONS REGISTER(nastepnę wysyłane bajty będa wpisywane do MODE REGISTER)
2) wysyłam dwa bajty(zakres+/-1,28V;Continuous conversion; Bipolar input; reference 2,5V; wejścia AIN1-AIN2)
3) wysyłam jeden bajt do COMMUNICATIONS REGISTER(ciągły odczyt Data Register-wrtość pomiaru-24bit)
Teraz moja funkcja do odbierania wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie wiem już czego się teraz złapać bo próbuje ciągle czegoś nowego i ciągle ten sam efekt :/
Jakieś sugestie co może być nie tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2016, o 18:36 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Wlutuj rezystory na liniach SPI tak z 100-200 om i po sprawie.
A schemat trochę poplątany, ledwo można się połapać co gdzie i jak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2016, o 22:30 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Dodałem rezystory po 10k, bo akurat takie teraz mam pod ręką i podziałało:) nie mam już błędów podczas programowania, ale zauważyłem że zwłaszcza jeśli chodzi o komunikacje SPI, i wnioskując z tego co wyświetlam na wyświetlaczu to dalej widzę że programator chyba wpływa na całą komunikacje. Kiedy mam podpięty programator, wyświetlają mi się na zmianę dwie wartości niezależnie czy mam podpięte ADC przez SPI czy nie, natomiast gdy odłączę programator(wypinam USB, oraz odpinam linie RESET), to program zdaje się ruszać, oraz po zbadaniu pinu RD przetwornika, widać że przetwornik reaguje na to co mu się wysyła a przynajmniej tak mi się wydaje. Co jeszcze mogę zrobić? Dalej coś jest nie tak na liniach SPI.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2016, o 22:53 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

10k to trochę dużo. Nie masz niczego poniżej 1k om?

Tak z ciekawości, bo nie ma tego na schemacie. Jak wygląda u ciebie zasilanie i podciągnięcie resetu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 wrz 2016, o 09:26 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

ATmege zasilam zewnętrznym zasilaniem 5V, Piny Vcc i AVcc podłączone do 5V i obie GND do masy, miałem z początku problem z masą ponieważ miałem nie równe zasilania na płytce stykowe, i teraz po podłączeniu masy w wielu punktach udało się uzyskać poprawne zasilanie, pin RESET procka mam podpięty do Vcc przez rezystor 10k, nic to nie dało nadal mam odmienne działanie programu z programatorem i bez.
Dodatkowo wchodzi kwestia tego że bez podłączonego programatora, czasem wariuje mi wyświetlacz, tak jakby sie resetował i zaświecają się wszystkie segmenty, po czym normalnie wyświetla liczby. Poza tym wydaje mi się że bez programatora przetwornik odpowiada na to co mu wysyłam.
Jeszcze później kupie i spróbuje z rezystorami 100 Ohm na SPI.


EDIT:
Zmieniłem rezystory na SPI na 100 Ohm, i pojawiły sie błędy przy programowaniu procka, dlatego spowrotem powróciłem do rezystorów 10k, i już nie ma błędów, ale i tak mam problemy z komunikowaniem się z ADC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 paź 2016, o 14:54 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Ma ktoś jeszcze jakąś koncepcje co mogę jeszcze zrobić? Nie mam oscyloskopu, ale za pomocą multimetru i funkcji pomiaru poziomów TTL, w czasie gdy mam podłączony programator, zmieniają się stany logiczne na pinie RD(informacja o zakończonej konwersji) i CS przetwornika ADC, co jak mi się wydaje świadczy o tym że przetwornik odpowiada na to co mu wysyłam, a na wyświetlaczu pojawiają mi się w kółko 4-5 tych samych wartości. Gdy odepnę programator od USB i jeszcze odłączę linie RESET od niego, tu się dzieje inna bajka. Program działa całkiem inaczej, pin RD prawie wgl nie zmienia swojego stanu, raczej albo ma stan wysoki, albo niski ale wtedy program i tak już jest zawieszony. Pin CS po zresetowaniu procka parę razy zmienia swój stan, po czym zawiesza się procek i albo CS zostaje na stanie wysokim albo niskim, czyli program się wiesza w różnych momentach, albo przy odbieraniu albo wysyłaniu bajtów. Po każdym Resecie program zachowuje się za każdym razem inaczej. Zanim się procek zawiesi wyświetla parę wartości(wtedy również linia CS zmienia swoje stany). Gdy już się program zawiesi wyświetlacz głupieje, albo zaświecając wszystkie segmenty albo wyświetlając jakieś dziwne znaki. Już nie mam pojęcia co może być nie tak. Myślałem że to przez linie RESET, teraz mam ją podłączoną, tak jak znalazłem na jednej ze stron:
Obrazek
Ma ktoś jeszcze jakieś sugestie co może być nie tak ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2016, o 20:57 
Offline
Nowy

Dołączył(a): 19 mar 2016
Posty: 11
Pomógł: 0

Jak się pozbyć zakłóceń na SPI? Ciagle w kółko pojawiają się jakieś losowe dane czasem mi się wydaje że np 6 wartości sie w kółko pokazuje, odłączyłem SPI od ADC i dalej pokazuje jakieś losowe wartości. Podczas pracy przetwornika pojawia sie stan niski, czyli jak mi się wydaje, że przetwornik daje mi wynik konwersacji ale i tak on ginie w tych zakłóceniach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO