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

[Attiny2313][C] USART. Jednokierunkowa komunikacja.

A.T. 05 Gru 2011 21:28 1732 5
REKLAMA
  • #1 10223056
    A.T.
    Poziom 20  
    Witam
    próbuję obsłużyć komunikację procesora Attiny2313 z komputerem poprzez port RS232. Komunikacja jest jednokierunkowa. Tylko procesor przesyła dane do komputera. Niestety mimo wielu prób nie chce mi to ruszyć. Bardzo bym prosił o sprawdzenie i pomoc w znalezieniu błędu. Poniżej wrzucam kod programu oraz schemat połączeń.
    Z góry dziękuję za pomoc.
    Pozdrawiam
    A.T.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 10225981
    GienekS
    Poziom 32  
    Zamiast tego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Napisz tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • REKLAMA
  • #4 10226306
    kiziu13
    Poziom 17  
    GienekS napisał:
    Napisz tak:
    Kod C:
    UCSRC = (1<<URSEL)|(3<<UCSZ0);

    Nie ma takiego bitu w tym rejestrze, jest UMSEL. Wydaję mi się, że nie jest potrzebna komunikacja synchroniczna, skoro jest jednokierunkowa. Dodatkowo przesuwanie 3 nie sprzyja czytelności. Po to te bity mają nazwę, żeby z nich korzystać.

    Czy zgadza się konfiguracja prędkości, parzystości itd. ?
  • REKLAMA
  • #5 10227871
    A.T.
    Poziom 20  
    Dziękuję za odpowiedzi.
    Kondensator filtrujący nic nie pomógł. Konfiguracja w procku zgodna z tą w komputerze.

    Dodano po 53 [minuty]:

    Dziękuję za pomocne rady. Udało mi się uruchomić komunikację. Przyczyna leżała w załączonym podziale przez 8 częstotliwości taktowania. Wystarczyło wyłączyć fusebit CKDIV8.

    Mam jednak jeszcze jedno pytanie. Nie chcę zakładać nowego tematu i zaśmiecać niepotrzebnie forum, dlatego spytam się w tym temacie i dopiszę zagadnienie do tytułu wątku. Chodzi o wyświetlacz VFD 2x20 znaków sterowany poprzez RS232.
    Z komputera po podłączeniu wyświetlacza można przez Hyper-Terminal pisać na wyświetlaczu. I to samo chcę zrobić na procku. Mam nadzieję że mi się udało(jeszcze nie sprawdzałem). Jednak chciałbym także obsłużyć takie funkcje wyświetlacza jak np. skok kursora w dane miejsce albo wyczyszczenie wyświetlacza. Zamieszczam dokumentację tego wyświetlacza w pliku pdf. Na stronie 6 jest spis funkcji pod nazwą: "Numeric Order Control Codes". I np. pisze tam że aby wyczyścić wyświetlacz trzeba wysłać 0Ch. I jak ja mam to wysłać, żeby wyświetlacz nie wypisał tego na ekranie tylko wyczyścił ekran? Mam po prostu zapisać do bufora UDR wartość 0C(rozumiem że w systemie szesnastkowym ze względu na te h), czyli UDR=0x0C.
    Proszę potwierdzić, jeżeli dobrze zrozumiałem instrukcję lub pomóc to wykonać jeśli robi się to inaczej:)
    Pozdrawiam
    A.T.
  • #6 10228028
    kiziu13
    Poziom 17  
    Zgadza się. Wysyłasz po prostu daną wartość do wyświetlacza i tyle. Jak widać na stronie, kody są do 0x1F, więc kończą się tuż przed pierwszym znakiem drukowalnym, czyli spacją (0x20). Dodatkowo są jeszcze sekwencje kodów, np. do jasności, ale to nic nie zmienia z punktu widzenia wysyłania. Pamiętaj, tak jak piszą na tej stronie u góry, żeby nie wysyłać niezdefiniowanych kodów do wyświetlacza. Najlepiej do wszystkiego porobić funkcje i nie przejmować się, że możesz przypadkiem wysłać nieprawidłowy kod i być może uszkodzić sterownik.
REKLAMA