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

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

szeri88 09 Lip 2017 22:03 1227 3
REKLAMA
  • #1 16578018
    szeri88
    Poziom 14  
    Posty: 163
    Pomógł: 11
    Ocena: 2
    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.
  • REKLAMA
  • #2 16578084
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Nie wiem co robi Bascom, ale technicznie nie ma problemu - wystarczy nie odblokowywać nadajnika UART - procesor to umożliwia.
  • REKLAMA
  • Pomocny post
    #3 16578120
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16581936
    szeri88
    Poziom 14  
    Posty: 163
    Pomógł: 11
    Ocena: 2
    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: VB.net
    Zaloguj się, aby zobaczyć kod


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

    Kod: VB.net
    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: VB.net
    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?
REKLAMA