Attiny Soft-UART Problem

Gast #939076
Lesenswert?
• ▲
▼
Moin!

Es geht um einen ATTiny 25 (4Mhz Quarz) der nun kein UART mitbringt und 
wofür ich mir eine Software UART geschrieben habe. Die UART soll nur 
senden (8N1). Ich habe mir dazu das Diagram auf Wikipedia angeguckt und 
es in ASM nachgebaut. Leider erscheint auf dem Display immer das gleiche 
Zeichen (Pfeil nach oben) oder sonstiger Salat. Ich hab also den 
verdacht, dass irgendwo ein Fehler sitzt.

Der ATTiny ist richtig konfiguriert (Flags)

Die Software UART ist simpel aufgebaut: Startbit senden, 104µS warten, 
Bit für Bit senden (jeweils eine nach rechts schieben und gucken ob das 
zu sendende Bit 1 oder 0 ist), nach jedem gesendetem Bit 104µS warten 
und zuletzt das partitybit und das Stoppbit senden.

Schaut momentan so aus (die vielen NOPs machen das Timing exakt)

Lg,
Frank
Angehängte Dateien:
Gast #939826
Lesenswert?
• ▲
▼
Hallo,

Danke für die Hinweise. Der Hund liegt aber ganz woanders begraben. Auf 
PORTB, 0 kommt immer, wenn der Pin mit sbi auf "1" gesetzt wurde der 
Quarztakt (4Mhz) heraus. Laut Datenblatt ist das unter anderem Timer 
Compare Match. Muss ich morgen mal gucken, ob der per default an ist 
(bzw. gleich im vorraus abschalten).

Daher auch der Zeichensalat (neben 2 ASM-Fehlern). Jeder High-Impuls hat 
"Unterimpulse".

Aber wenn wer spontan aus Erfahrung weiß, woran das liegt, nehm ich die 
Hinweise gerne entgegen ;)

Grüße,
Frank
#939838
Lesenswert?
• ▲
▼
1
;------------------------------------------------------------------------
2
; Transmit char
3
; in:   r29 = char
4
; use:  r29-r31
5

6
putc:   ldi     r31, 10                         ;number of bits
7
        clc                                     ;start bit
8
putc1:  brcs    putc2                           ;       1       2
9
        cbi     PORTB, TX                       ;       2       -
10
        rjmp    putc3                           ;       2
11
putc2:  sbi     PORTB, TX                       ;       -       2
12
        nop                                     ;       -       1  = 5
13
putc3:  ldi     r30, (F_OSC/BAUD - 10)/3        ;       1
14
putc4:  dec     r30                             ;       0
15
        brne    putc4                           ;       -1
16
        sec                                     ;       1
17
        ror     r29                             ;       1
18
        dec     r31                             ;       1
19
        brne    putc1                           ;       2          = 5
20
putc9:  ret

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.