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

[Atmega8][bascom] Problem z szeregowym przesyłaniem danych.

karlos79 12 Lis 2008 21:34 1286 2
REKLAMA
  • #1 5731780
    karlos79
    Poziom 33  
    Witam
    Mam dwa kontrolery połączone ze sobą dwoma liniami i za pomocą poleceń shiftin/out udało mi się je ze sobą "dogadać".
    Problem w tym, że nie do końca.
    Otóż, kontroler wysyła daną typu word- drugi ma ją odebrać i wyświetlić na LCD.
    No i tak się dzieje, tylko dlaczego odbiorca wyświetla wartość o połowę mniejszą niż wysłał nadawca?
    Tłumacząc obrazowo:
    Wysyłam daną o wartości 300, wyświetla się wartość 150.
    Jak wyślę 0, to wyświetli się 0. Jak wyślę 1, to wyświetlą się totalne głupoty.
    Proszę o jakieś podpowiedzi, bądź sprawdzone sposoby.
    Uprzedzam, że nad problemem pracuję już jakiś czas i google też pytałem.
    Niestety nic nie udało mi się znaleźć.
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 5731844
    BoskiDialer
    Poziom 34  
    Prawdopodobnie podczas inicjalizacji pojawiają się zmiany na przewodach, co powoduje rozsynchronizowanie się nadajnika i odbiornika - nie ma wyraźnego końca bajtu, więc utrata jednego impulsu zegara (lub nadmiarowy impuls) spowoduje przesunięcie się danych pomiędzy nadajnikiem a odbiornikiem. Wyglądać to będzie tak, że wszystkie bajty będą przesunięte o pewną liczbę bitów w prawo, wysunięte bity będą się przenosić do kolejnych bajtów. Musisz opracować sposób na synchronizację - własne funkcje shiftin/out, na początku wysłać 0x01, na końcu pare zer, w odbiorniku z początku oczekiwać na jedynkę i dopiero odbierać dane (lub inny sposób synchronizacji).
  • #3 5731901
    karlos79
    Poziom 33  
    Witam
    Synchronizację staram się rozwiązać za pomocą trzeciego pinu. Jeden kontroler ustawia go na 0, drugi to wykrywa i czeka na dane. Po zakończeniu transmisji z powrotem pin w stan wysoki- koniec transmisji.
    Postaram się wykombinować coś w/g Twojej propozycji.
    Pozdrawiam
    P.S
    Już wszystko jest dobrze :)
    Pomyliłem się w ustawieniu polecenia schiftin

    SHIFTOUT pin_danych , pin_zegarowy , zmienna , [opcje- tutaj był błąd].
    Już wszystko działa poprawnie.
    Bardzo dziękuję za pomoc.
REKLAMA