Forum: Mikrocontroller und Digitale Elektronik Attiny2313 USART Problem


von Jabu (Gast)


Lesenswert?

Moin,
Mein USART mit dem tiny2313 funktioniert nicht! Es kommen zwar Signale 
ins terminal, jedoch die falschen. Arbeite gewöhnlich mit dem Atmega8, 
daher befürchte ich ein Bit falsch gesetzt zu haben oder soetwas. Code 
unten. Ich habe keinen externen Quarz angeschlossen. Ist dies ein muss?


.include "tn2313def.inc"

.def A         = r16

.equ F_CPU = 8000000                            ; Systemtakt in Hz
.equ BAUD  = 9600                               ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille 
Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit 
zu hoch!"
.endif

.org 0x0000
rjmp Start

;---------------------------------------------------

Start:          ldi      r16, HIGH(UBRR_VAL)
         out      UBRRH, r16
       ldi      r16, LOW(UBRR_VAL)
          out      UBRRL, r16

         ldi      r16, (1<<UCSZ1)|(1<<UCSZ0)
         out      UCSRC, r16
           sbi      UCSRB,RXEN
    sbi      UCSRB,TXEN

           ldi    A, LOW(RAMEND)
           out    SPL,A

;-------------------------------------

Main:      ldi     A,'A'
                rcall   senden
                rjmp    Main

;-------------------------------------

Get_RX:    sbis    UCSRA,RXC
    rjmp   Get_RX
          in      A,UDR
    ret


senden:    sbis    UCSRA,UDRE
        rjmp    senden
        out     UDR,A
    ret

von H.Joachim S. (crazyhorse)


Lesenswert?

Es geht eigentlich fast immer schief mit dem internen Oszillator, sobald 
man das Board vom Schreibtisch in die harte Realität bewegt :-)

Der Tiny2313 hat aber noch die DIV8-Fuse, die im Auslieferungszustand 
gesetzt ist. Also Oszillator 8MHz, CPU-Clk 1MHz.

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.