Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Bascom][DS7843][SPI programowe] proszę o sprawdzenie kodu

Madergames9 09 Kwi 2010 20:14 2817 15
  • #1 09 Kwi 2010 20:14
    Madergames9
    Poziom 15  

    Witam.
    Prosiłbym o sprawdzenie poprawności programu. Usiłuję skomunikować się z układem poprzez Atmega128 i SPI programowe. Jednak układ po wysłaniu ramki nie wystawia na końcówce Busy stanu wysokiego i stoi. Jak wyremuję sprawdzenie tego pinu to efektem jest odczyt "255" i całkowity brak reakcji na dotyk.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Będę wdzięczny za pomoc.

    Pozdrawiam

    0 15
  • #2 09 Kwi 2010 21:12
    mpietras
    Poziom 17  

    pb.4 masz skonfigurowane jako wyjście i jednocześnie używasz go jako CS i BUSY.
    Poza tym powinno być wg. noty katalogowej Bitwait "BUSY", reset.
    W miejsce "BUSY" wstaw pin do którego podłączona jest linia BUSY z DS.
    Pin ten skonfiguruj jako wejście.

    Właśnie sobie uświadomiłem, że we wszystkich swoich programach stosuję składnie
    Config portx.y = ... zamiast
    Config pinx.y = ... jak jest w helpie ale wszystko działa

    0
  • #3 10 Kwi 2010 01:53
    Madergames9
    Poziom 15  

    Poprawiłem trochę kod i wygląda to teraz tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dalej nic się nie dzieje. Jak powinny być poustawianie porty. Chodzi mi szczególnie pin do którego podłączona jest końcówka "Busy" oraz "MISO" bo wyczytałem gdzieś, że oprócz konfiguracji SPI programowego trzeba niezależnie ustawić "MISO" jako wyjście. Jeszcze jedna sprawa to Sck. Czy tam jest sygnał zegarowy i jak to sprawdzić?. W przypadku SPI sprzętowego można ustawić jaka jest jego częstotliwość jednak w przypadku SPI programowego nie znalazłem takiej opcji. Mam taktowanie 16Mhz to może prędkość jest za duża..?

    0
  • #4 10 Kwi 2010 16:24
    Madergames9
    Poziom 15  

    Nikt nic nie wie...?

    0
  • #6 11 Kwi 2010 02:24
    Madergames9
    Poziom 15  

    Niestety, ale nie pomogło. Nie mam pomysłow. A może to błąd biblioteki...?. Jak to można samemu napisać, aby wysyłać bez uzycia Config Spi..?

    0
  • #8 11 Kwi 2010 14:50
    Madergames9
    Poziom 15  

    Z Shiftem jeszcze nie próbowałem, ale według noty katalogowej wygląda, że Pinb.6 powinien być pływający, tylko nie wiem, czy ma byś ustawiony jako wejście czy w ogóle nie ustawiony. Jeżeli jednak ustawię Pinb.6 jako wyjście i podciągnę do plusa, to program staje na odczycie z "Busy", czyli układ nie zwraca wykrywa stanu niskiego. Jednak patrząc na przebieg zegarowy z noty katalogowej podczas transmisji na "Busy jest stan niski i dopiero pojawienie się stanu wysokiego powoduje przejście do odbioru danych. Tutaj proponujesz wykrywanie stanu niskiego, więc jak to się ma do reszty programu... nie bardzo rozumiem. Jak sprawdzić czy w ogóle układ odpowiada, a może samo wysłanie danych jest nie poprawne...?. Mógłbyś mi to wyjaśnić jak to rozumiesz..?

    0
  • #10 12 Kwi 2010 19:36
    Madergames9
    Poziom 15  

    Hmmm według pobieżnego przeglądu not aplikacyjnych wyglada, że to to samo. Przyznaję, że angielskiego nie znam, więc nie mam możliwości wgryzienia się w tekst. Ale z przebiegów i tabel wygląda to samo, czyli jakoby zamiennik. Patrząc na przebiegi to widać, że przy wejściu w cykl to Busy ustawia się w stan niski a po wyjściu ustawia się w stan wysoki. Będę probował poźniej z Shiftem, ale to dopiero za jakies 3 godzinki więc dopiero wtedy będę mógł podać coś więcej...

    Oki wrzuciłem taki kod i w zmiennej E pojawiają, się rózne dane za każdym razem inne, więc co dalej z tym...?

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [godziny] 49 [minuty]:

    Teraz spraw ma się tak. Poprawiłem kod programu i wygląd na to, że wszystko działa :
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Tzn odczytuje dane z osi X i Y jednak mam problem z uruchomieniem INT5, gdyż obecnie nie chce wskoczyć do podprogramu. Natomiast, gdy odremuję to co jest w pętli głównej to najpierw odczytuje prawidłowo położenie w osiach, a po odjęciu palca od panela dotykowego zmienna E i F ustawia się niejako centralnie i wyświetla cały czas jedna i druga około 60 , 64. Gdyby Int5 działał to jedno przejście odczytałoby się prawidłowo i by było dobrze. Trochę się powielam teraz z innego tematu, ale może i w tym pomógłbyś mi ?

    Dodano po 3 [godziny] 49 [minuty]:

    W międzyczasie stwierdziłem co następuje. Po włączeniu zasilania odczyt z ADS7843 odbywa się tylko raz po tym jest już głuchy. Programowanie powtórne lub Reset poprzez program Bascom nic nie pomaga. Po wyłączeniu zasilania i ponownym włączenia Sytuacja się powtarza. Jednokrotny odczyt i koniec. Podanie na Int5 bezpośrednio niskiego poziomu też nic nie daje. Wygląda jakby coś się blokowało. Jak można programowo ustawić port do stanu jak po właczeniu zasilania..?. Mówię konkretnie o końcówce 7 Atmegi 128

    0
  • #11 13 Kwi 2010 13:38
    Madergames9
    Poziom 15  

    Pomęczyłem się i wymęczyłem to:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Jest to kod działający, czyli sprwdzony/testowany. Teraz będę go wrzucał do programu głównego. Odczyt 8bit jest wystarczający do określenia położenia palucha i rysika równiez. Układ DS7843 nie angażuje mikrokontrolera, więc sprawa warta była chyba zachodu. Udostępniam ten kawałek programu free z myślą, że może teraz ktoś mógłby go jeszcze uprościć. Powiem, że do końca nie wiem dlaczego działa, ale tak jest napewno.

    Pozdrawiam

    0
  • #12 31 Gru 2010 22:13
    slawekjurek
    Poziom 13  

    Kolego Madergames9 męczę się właśnie z ADS7845 pod BASCOMem i próbowałem skorzystać z Twoich doświadczeń, jednak nie za bardzo kapuję jakie piny tego ADSa są podpięte u Ciebie do jakich portów ATmegi?

    Czy mógłbyś to łopatologicznie wyłożyć, będę wdzięczny :)

    0
  • #13 23 Mar 2011 00:49
    Madergames9
    Poziom 15  

    Och bardzo dawno tutaj mnie nie było.. Czy temat kolega jakoś załatwił w inny sposób..?

    0
  • #14 23 Mar 2011 08:19
    slawekjurek
    Poziom 13  

    Szczerze mówiąc mimo własnych pomysłów, nadal mam z tym problem.
    Poza tym myślę, że może fajnie, gdyby Kolega pomógł, dla potomnych... :)

    0
  • #15 23 Mar 2011 20:53
    Madergames9
    Poziom 15  

    Oki.
    Nie jestem z tych co odsyłają nie wiadomo gdzie (najlepiej na google), więc odpowiem :D. Temat podłączenia był opisywany w jednym z wątków, ale do rzeczy. Mam to podłączone do Atmegi128, więc jakby gdzie indziej miało to podejść to odpowiednio trzeba to zmodyfikować. Więc:

    DCLK - PB0
    CS - PB4
    DIN - PB5
    BUSY - PB6
    DOUT - PB7
    PENIRQ - PG3
    IN3 - PE4
    IN4 - PE5

    Tak to u mnie jest podłączone i działa. Co bym zmienił..?. Napewno podłączenie Pod IN3 i 4 bo jakoś wychodzi, że z tym portem bywają problemy więc warto to wziąść pod uwagę. Reszta pozostaje jak wyżej tzn część programowa. Doszedłem do tego metodą prób i błędów, więc jakby co to wal śmiało jak mogę to pomogę. A dla potomnych to zawsze coś na dobry początek zabawy z tym układem..:D

    0
  • #16 23 Mar 2011 22:05
    slawekjurek
    Poziom 13  

    Wielkie dzięki, dam znać jak coś w końcu sensownie mi ruszy :)

    0