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.

Transmisja szeregowa w jedną stronę - wykorzystanie wolnego pinu TXD.

szeri88 09 Lip 2017 22:03 792 3
  • #1 09 Lip 2017 22:03
    szeri88
    Poziom 14  

    Czy jest możliwość wykorzystania (np. do sterowania przekaźnikiem) portu mikrokontrolera oznaczonego jako TXD, jeśli używam transmisji szeregowej do połączenia z drugim mikrokontrolerem? Transmisja jest jednostronna i w tym przypadku pin TXD nie jest wykorzystywany.

    Jednak kiedy inicjuję w BASCOM'ie sprzętowy UART to pin oznaczony jako TXD wchodzi w stan wysoki i nie reaguje na polecenia SET/RESET.

    0 3
  • #2 09 Lip 2017 22:30
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie wiem co robi Bascom, ale technicznie nie ma problemu - wystarczy nie odblokowywać nadajnika UART - procesor to umożliwia.

    0
  • Pomocny post
    #3 09 Lip 2017 22:51
    373522
    Użytkownik usunął konto  
  • #4 11 Lip 2017 23:42
    szeri88
    Poziom 14  

    niveasoft napisał:
    Nie napisałeś jaki to procesor. Przykładowo dla Atmega8/Atmega32 wystarczy gdzieś napisać
    UCSRB.TXEN = 0

    Dla Mega328P UCSR0B.TXEN0 = 0


    Mowa o Atmega16. Instrukcja UCSRB.TXEN = 0 rzeczywiście działa ale tylko do czasu, kiedy nie połączę się z drugą Atmegą.

    Tak wygląda początek programu dla Atmega16 (odbiornik):
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    A tak fragment programu Atmega8 wysyłającej dane:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Obydwa mikrokontrolery połączone są ze sobą masą oraz jedną linią do przesyłu danych (TXD z Atmega8 do RXD Atmega16). Pinu TXD Atmega16 używam do uruchamiania przekaźnika (PK2).

    Problem w tym, że nie mogę kontrolować portu PORTD.1 Atmegi16. Przy takim połączeniu na tym pinie występuje ciągle stan niski. Jeśli usunę instrukcję
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    to na pinie pojawi się stan wysoki.

    Zauważyłem, że przekaźnik załącza się jeśli nie ma połączenia między dwoma mikrokontrolerami lub jeśli w programie Atmegi8 (nadawczej) nie ma żadnych instrukcji związanych z transmisją szeregową (np. Print).

    Dodano po 2 [godziny] 4 [minuty]:

    Znalazłem jeszcze taką informację:

    "Blokowanie nadajnika (ustawienie TXEN na zero) nie będzie miało skutku dopóki trwająca i nie zakończona transmisja jest ukończona, np.: kiedy rejestr przesuwny nadajnika i rejestr buforu nadajnika nie zawierają danych do transmisji."

    Pewnie ma to związek z 6. bitem rejestru USCRA:

    "• Bit 6 – TXC: USART Transmit Complete

    This flag bit is set when the entire frame in the transmit Shift Register has been shifted out and
    there are no new data currently present in the transmit buffer (UDR). The TXC Flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location."

    Czy dobrze rozumiem, że instrukcja UCSRB.TXEN = 0 zadziała dopiero, kiedy na USCRA.TXC pojawi się flaga 1?

    0