Forum: Mikrocontroller und Digitale Elektronik DMX Senden die zweite


von Rene (Gast)


Lesenswert?

hallo,

ich versuche jetzt schon mehrere Tage einem AT Mega 8515 das Senden
beizubringen aber ich bin am Ende und weiß nicht so recht weiter.
köntet Ihr euch mal meine geistigen ergüsse ansehen. Frequenz 8Mhz

Initialisiert habe ich so:
UART:            ldi      TEMP,0x01
                 out      UBRRL,TEMP
                 sbi      UCSRB,RXCIE   ;Enable RX Interrupt
                 sbi      UCSRB,UCSZ2   ;Enable 9-Bit Mode

                 sbi      UCSRB,RXEN    ;Enable RX-UART


    ldi      temp, 0x00
    out     UBRRH, temp
    ldi      temp, (1<<URSEL)|(3<<UCSZ0)|(1<<USBS)
    out     UCSRC, temp ;
    sbi  UCSRB,UDRIE   ;enable irqs                             sbi
  UCSRB,TXEN     ;enable USART TxD

PortD:           ldi      TEMP,0xDE
                 out      DDRD,TEMP
                 ldi      TEMP,0x21
                 out      PORTD,TEMP


der Aufruf über den Timer0  Interrupt der  vorher noch PWM macht.

                 lds temp,Sendrate
                 inc temp
           sts Sendrate,temp  ; Sendrate erhöhen Zähler
                 SBIC PINA,1
     rjmp ausgang     ;wenn DIP 10 on dann weiter
                 SBIC PINA,0
     rjmp ausgang
     sbi portD,2      ;RS 485 auf Senden umschalten

DMXweit:         lds temp,Flag
                 cpi temp,1
           breq alles_gesendet ;Flag gesetzt? alles gesendet?
                 rjmp ausgang



alles_gesendet:   cbi portD,1        ;Reset eileiten


                 lds temp,reset_breake    ;
                 inc temp
     sts reset_breake,temp
           cpi temp,4           ; Breake länge
     breq Breake_ende
     rjmp ausgang

Breake_ende:      nop
                  nop
            nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
            nop
      nop
      nop


                 sbi  PortD, PD1 ;bis jetzt 88uS

     ldi  YH, high(RAMSTART);Ram Adressen zurücksetzen
     ldi  YL, low(RAMSTART)

     ldi  temp, MARK_LENGTH  ;Mark warten
MAB_loop:
               dec  temp
               brne  MAB_loop

         sbi     UCSRB,TXEN       ;enable USART TxD
         sbi  UCSRB, UDRIE  ;enable data empty irq

         clr  temp   ;send start byte (=0)
         out  UDR, temp
                                            ;Sendrate neu laden
                      sts    flag,temp              ;Flag zurüchsetzen

ausgang:        inc dimm_count

    out  SREG,SREG_BACK
    lds temp,zwsp_temp
    lds status,zwsp_status
                reti

Der TX Interrupt sieht so aus:

TX_SEN: in  SREG_BACK,SREG
    push  temp

                cpi  YL, low(RAMSTART +CHANNELS +1)
    brne  sb1  ;all ch send?
          cpi  YH, high(RAMSTART +CHANNELS +1)
    brne  sb1


    cbi     UCSRB, TXEN
    cbi  UCSRB, UDRIE
    sbi     portD,1
                ldi     temp,0x01           ; Flag setzen
    sts     Flag,temp
    clr     temp
    sts     sendrate,temp
    sts     reset_breake,temp
          rjmp  sb_finish

sb1:
    ld    temp, Y+
    out    UDR,temp

sb_finish:
    pop    temp
    out    SREG,SREG_BACK
    reti

von Rene (Gast)


Lesenswert?

Hallo,

Habs hinbekommen es lag an der Uart Initialisierung.

Mfg
Rene

von HendrikHoelscher (Gast)


Lesenswert?

Wie kommst Du auf 9n2 ?!?

Mach 9n1 und werte Chr8 als 1.SB aus oder nimm 8n2.

von HendrikHoelscher (Gast)


Lesenswert?

Außerdem scheint das noch eine ziemlich fühe Version meiner TxD-Routine
zu sein.

Bevor jmd. das copy&pasted&verzweifelt, bitte evtl. kurz nach der
aktuellen Version schauen:
http://www.hoelscher-hi.de/hendrik/light/ressources.htm

Eigentlich hatte ich deshalb auch das direkte Mirrorn und Posten von
meinem Kram untersagt. (Links sind doch OK, ich mach habe ja auch keine
Werbung und bekomme für die Visits kein Geld...)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.