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

[ATMega16/32] Odbiór DMX - jakiś sprawdzony sposób?

Vampir8 18 Wrz 2009 20:23 1262 1
REKLAMA
  • #1 7032608
    Vampir8
    Poziom 16  
    Witam!
    Próbuje zmusić ATMege16 do odbioru DMX ale jakoś nie bardzo mi to idzie. Przejrzałem już kilka kodów źródłowych różnych odbiorników i próbowałem na ich podstawie samodzielnie oprogramować transmisje ale cały czas coś jest nie tak (odbieram bzdury). Czy ktoś ma jakiś sprawdzony sposób na odbiór DMX?
  • REKLAMA
  • #2 7032802
    NeooeN
    Poziom 13  
    Oto jeden z kodów który wymodziliśmy:
    program testing;
    
    var  received_byte : byte;
         channel : byte;
    
    procedure Recived;  org URXCaddr;       //Procedura obsługująca odbieranie bajtu
    begin
    inc (channel);
    if UCSRB.FE = 1 then channel := 0;
    received_byte := UDR;
    if channel = 2 then PORTA := not received_byte;
    end;
    
    begin
    UBRRH := $00;
    UBRRL := $01;
    UCSRA := $0;
    
    UCSRB.RXEN := 1;          //Odblokowanie przerwania odbioru
    UCSRB.RXCIE := 1;         //Odblokowanie odbiornika
    
    UCSRC.URSEL := 1;         //Zapisywanie do USCRA
    UCSRC.UCSZ0 := 1;         //Ustawienie rozmiaru ramki na 8 bitów
    UCSRC.UCSZ1 := 1;         //j.w.
    UCSRC.USBS := 1;          //Dwa bity stopu
    
    {
    ======================
    Cały powyrzszy kod jest zgodny z następującym kodem w C:
    
    UBRRH = 0x00;
    UBRRL = 0x01;
    UCSRA = 0x0;
    UCSRB = _BV(RXEN);
    UCSRC = _BV(URSEL) | _BV(UCSZ0) | _BV(UCSZ1) | _BV(USBS);
    ======================
    }
    
    SREG.7:=  1;              //Globalne odblokowanie przerwań
    
    DDRA := $FF;              //DDRA = 0xff; Port A jako wyjście
    
      while true do begin
      end;
      
    end.
    Programik w MikroPascalu, postarałem sie troche go okomentować żeby programiści C mieli łatwiej. Teoretycznie przerwanie odbioru sie wykonuje i zlicza kałay i ich wartości ale jak przerobiłem program tak że miałem podgląd wartości na LCD to wychodziło na to że procek wykrywał break przy kilkudziesięciu kanałach (mój układ DMX wysyła pełne 512) a i te kanały które odebrał pokazują bzdury. Ma ktoś jakieś pojęcie do może być nie tak?
REKLAMA