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

[AVR GCC]Jak ustawić pin, gdy wysyłane są dane (ster. RS485)

xPatryk 04 Kwi 2009 16:27 1768 1
REKLAMA
  • #1 6373653
    xPatryk
    Poziom 15  
    Witajcie,

    w jaki sposób sprawić, by na jednym z pinów pojawiał się stan wysoki/niski, rozpoczynający się od momentu, gdy pojawią się dane do wysłania (od wpisania ich do buforu UDR) i jeśli przez kilka ms nie będzie żadnych nowych danych, z powrotem zmienił swój stan?

    Chodzi o sterowanie układem konwertera RS485 (nadawanie/wysyłanie) przez konwerter USB<>TTL na Attiny2313.

    Fragment instrukcji odpowiedzialnej za nadawanie:



    
           /*    host => device    */
            if( (UCSRA&(1<<UDRE)) && uwptr!=irptr ) {
    
                UDR    = tx_buf[irptr++];
                irptr    &=    TX_MASK;
            }
            if( usbAllRequestsAreDisabled() &&
                ((uwptr-irptr)&TX_MASK)<(TX_SIZE-HW_CDC_BULK_OUT_SIZE) ) {
                usbEnableAllRequests();
            }
    


    Strona domowa projektu: http://www.recursion.jp/avrcdc

    Pozdrawiam i z góry dziękuję za pomoc :)
  • REKLAMA
  • #2 6375297
    Dr.Vee
    VIP Zasłużony dla elektroda
    Jeśli masz wolny timer, to wykorzystaj go jako softwareowego watchdoga - w obsłudze przerwania overflow zeruj pin enable dla konwertera, przed wpisem do UDR zeruj timer + ustawiaj enable.

    Ew. możesz coś kombinować z trybem CTC i pinem OCx, żeby nie polegać na przerwaniu dla wyłączenia bufora.

    Pozdrawiam,
    Dr.Vee
REKLAMA