Witam. Od blisko miesiaca mecze sie z tym przetwornikiem i za nic nie moge sie z nim skomunikowac, nie mowiac juz o odczycie napiecia. Moj mikrokontroler to ATMega8535 a programy pisze w BASCOMie. Czy jest tu jakis kruczek? Odczyt i zapis bajtow do AD7730 wykonuje dokladnie wedlug przebiegow sygnalow podanych w dokumentacji. A moze ktos sie bawil tym przetwornikiem? Bardzo prosze o pomoc i wszelkie informacje Pozdrawiam Grzegorz
Przetwornik AD7730 i mikrokontroler - POMOCY !!
Sep 13, 2005
3 Replies
U¿ytkownik "Grzegorz" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:9b80e$43266689$3eb34022$ snipped-for-privacy@news.chello.pl...
Niedawno skonczylem "zabawke" na AD7730. Wprawdzie procek to PIC, ale to bez znaczenia. Uscislij bardziej pojecia "nie moge sie z nim skomunikowac", to znaczy piszesz do np. MODE REGISTER odczytujesz z niego i wartosci sa rozne? Moze zle skonfigurowales porty? Patrzyles czy przetwornik cos Ci wystawia? A jak tam zegar? Itd, itp... Napisz dokladnie co robiles, co dostawales, bo inaczej to ni huhu...
Pozdrawiam, CodiJack.
Po pierwsze dziekuje za odpowiedz. Konkretnie problemem jest podstawowa czesc programu - czyli fragment odpowiedzialny za wysylanie i odbieranie bajtow do i z procka tutaj jest cos nie tak. W sumie sklecilem mniej wiecej cos takiego: (jest to fragment, ktory mial sluzyc do najprostszego pomiaru. Procedura probe jest napisana na podstawie pseudokodu z dokumentacji, natomiast procedury Ad_read i Ad_write - mialy realizowac przebieg sygnalu z rysunków "Read cycle timing diagram" i "write cycle timing diagram" ze strony 36 Datasheeta)
Sub Probe_ad Call Ad_write(&H02) Set Cs Call Ad_write(&H21) Call Ad_write(&H80) Set Cs Call Ad_write(&H21) Set Cs
Call Ad_read()
Call Ad_write(&H30) Set Cs
Result01 = W1 Result23 = W2 Result45 = W3 End Sub
------------------------------------------ Sub Ad_read() W = 0 W1 = 0 W2 = 0 W3 = 0
Set Pol Bitwait Rdy , Reset Reset Cs
For I = 7 To 0 Step -1 Reset Sclk Waitms 1 W = W1 W1 = Dout * I W1 = W1 + W Set Sclk Waitms 1 Next
For I = 7 To 0 Step -1 Reset Sclk Waitms 1 W = W2 W2 = Dout * I W2 = W2 + W Set Sclk Waitms 1 Next
For I = 7 To 0 Step -1 Reset Sclk Waitms 1 W = W3 W3 = Dout * I W3 = W3 + W Set Sclk Waitms 1 Next
Set Cs Waitms 1 End Sub
---------------------------------------- Sub Ad_write(byval D As Byte) Set Pol For I = 8 To 1 Step -1 B(i) = D Mod 2 D = D \ 2 Next
Reset Cs Waitms 1
For I = 1 To 8 Reset Sclk Waitms 1 Din = B(i) Set Sclk Waitms 1 Next
Waitms 1 End Sub
-----------------------------------
Ogolnie musze sie przyznac, ze nie do konca wiem co robie i o co w tym wszystkim chodzi... Zalezy mi tylko, zeby w zmiennych W1, W2 i W3 miec wynik pomiarow (bo z tego co wyczytalem, to trzy bajty sa wlasnie), ktory ewenetualnie moglbym zlozyc w calosc. Nie wiem, czy bedziesz wiedzial cos z tego kodu, ale licze, ze tak.. A moze zabieram sie do tego ze zlej strony? W ogole, to nie wiem jak sprawdzic, czy ten uklad dziala.. Aha.. Nazwy sygnalow w programie odpowiadaja wyprowadzeniom Ad7730.
Jeszcze raz dziekuje za pomoc. Pozdrawiam G.
U¿ytkownik "Grzegorz" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:b967e$432749b7$3eb34022$ snipped-for-privacy@news.chello.pl...
I tu lezy pies pogrzebany :(. MUSISZ DOKLADNIE PRZECZYTAC PDF-a! Jak chcesz cos konkretnego robic, skoro sam nie wiesz do konca co robisz? Jak chcesz obsluzyc specjalizowany AD skoro nie wiesz do konca jak dziala? BTW nie znam basica ale z tego co wydumalem w funkcji Read cos skladanie bitow nie za bardzo bedzie dzialac (trzeba iteracyjnie przesuwac, nie mnozyc). Generalnie robie tak:
- Twardy reset AD.
- Inicjalizacja i kalibracja.
- Odczyt. Zawsze piszac do rejestru robie jego odczyt celem weryfikacji, jak cos nie zadziala to wiem dlaczego. Zrob prosty test zapisz do MODE register, odczytaj, porownaj. Jak OK to wiesz ze napewno wartosc zostala zapisana. Jak zainicjujesz AD to nie wylaczaj funkcji ciaglego odczytu "Call Ad_write(&H30)". Na pinie RDY bedziesz ciagle mial impulsy - znaczy AD non stop przetwarza. Jak masz tylko 1 AD na SPI procesora to po co wachlowac CS? Dopnij go do GND. To samo z POL. Wez oscyloskop zobacz jak wygladaja sygnaly. Na poczatek zrob tylko jedno - zapisz i odczytaj z jednego rejestru. Jak Ci to ruszy, reszta bedzie kwestia czasu. Jak zwalczysz poprawny zapis do jednego rejestru i dalej bedzie problem, cos pomyslimy...
CodiJack.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required