www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny Soft-UART Problem


Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
so auf die Schnelle erkenne ich nicht,
1. wie/wo die Parität berechnet wird.
2. Das Stoppbit hat immer den Zustand des letzten Daten-Bit.
Schau dir das nochmal an.
Gruss

Autor: jogi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ist ein beispiel

Autor: Rüdiger Knörig (sleipnir)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann Dir für solche Fälle nur VMLab empfehlen. Da kann man auf die 
Tasten der Tastatur NRZ-Sequenzen legen und so sein Programm sehr 
komfortabel debuggen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab keine Lust, die ganzen NOPs abzuzählen.
Warum nimmst Du denn nicht einfach nen Timerinterrupt?

Hier mal Sende-UART in Assembler oder C:

http://www.mikrocontroller.net/attachment/36636/i2csniff.zip

Du brauchst nur die Konstanten für Baudrate und Quarz richtig 
definieren, den Rest rechnet die Initroutine selber aus.


Peter

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;------------------------------------------------------------------------
; Transmit char
; in:   r29 = char
; use:  r29-r31

putc:   ldi     r31, 10                         ;number of bits
        clc                                     ;start bit
putc1:  brcs    putc2                           ;       1       2
        cbi     PORTB, TX                       ;       2       -
        rjmp    putc3                           ;       2
putc2:  sbi     PORTB, TX                       ;       -       2
        nop                                     ;       -       1  = 5
putc3:  ldi     r30, (F_OSC/BAUD - 10)/3        ;       1
putc4:  dec     r30                             ;       0
        brne    putc4                           ;       -1
        sec                                     ;       1
        ror     r29                             ;       1
        dec     r31                             ;       1
        brne    putc1                           ;       2          = 5
putc9:  ret

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank wrote:

> Die UART soll nur senden (8N1).
[...]
> und zuletzt das partitybit und das Stoppbit senden.

Nach meinem Verständnis steht "N" für "keine Parität".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.