Forum: Mikrocontroller und Digitale Elektronik UART in Software mit internen RC


von Michael Dierken (Gast)


Lesenswert?

Guten Tag.

Ich hatte mir überlegt gehabt das ich den "Tackt" für den UART auch mit 
dem interenen RC hingekomme wenn ich an einen Interrupteingang eine 
Quarzgenaue Frequenz anlege und mithilfe dieser die benötigte 
Verzögerung der einzelnen Bits berechne.

Nun ist mir eine andere Idee gekommen bei welcher ich euch gerne fragen 
würde ob das so geht.

Beim Anschließen an den UART macht der Chip garnichts.
Sobald Daten vom Computer über den UART gesendet werden (Ein Bestimmtes 
Zeichen "AA" oder "C1") Erkennt der Chip per Interrupt das etwas 
gesendet wird und misst die Zeit die das Zeichen pro Bit benötigt.

Bei senden wird dann später genau diese Verzögerung verwendet.

Ist das möglich?

(ATmega8 8MHz, ATtiny13V 2,4MHz)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael Dierken schrieb:
> das ich den "Tackt" für den UART auch mit dem interenen RC hingekomme
Geht nicht. Einen "Tackt" bekommst du so nie hin. Du könntest allerdings 
den UART "takt"en... :-/

> Beim Anschließen an den UART macht der Chip garnichts.
> Sobald Daten vom Computer über den UART gesendet werden (Ein Bestimmtes
> Zeichen "AA" oder "C1") Erkennt der Chip per Interrupt das etwas
> gesendet wird und misst die Zeit die das Zeichen pro Bit benötigt.
>
> Bei senden wird dann später genau diese Verzögerung verwendet.
> Ist das möglich?
Das nennt sich "Autobaud" und ist ein uralter Hut. Viele Bootlader 
verwenden diese Funktion...

> Bei senden wird dann später genau diese Verzögerung verwendet.
Du kannst z.B. auch einfach den Timer Reload Wert für den UART berechnen 
und dann den Hardware-UART verwenden.

von Michael Dierken (Gast)


Lesenswert?

Oh.. dann habe ich da ja was schon längst bestehendes Entwickelt ^^ 
Warum kann das nicht total neu und der größte Durchbruch sein?

Naja. Schonmal gut das es geht und sich anscheind auch schon bewährt 
hat. Bei ATmega8 könnte das in Hardware funktionieren, der ATtiny13 hat 
allerdings soweit ich das Datenblatt verstanden habe keinen UART 
weswegen ich das per Software machen würde und dann bei jedem bestimmten 
TimerÜberlauf ein Bit auf seine Reise schicken würde.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael Dierken schrieb:
> Bei ATmega8 könnte das in Hardware funktionieren,
Richtig.

> der ATtiny13 hat
> allerdings soweit ich das Datenblatt verstanden habe keinen UART
> weswegen ich das per Software machen würde und dann bei jedem bestimmten
> TimerÜberlauf ein Bit auf seine Reise schicken würde.
So geht das Senden, das Empfangen ist ein wenig trickreicher. Aber die 
gute Nachricht: auch das mußt du nicht erfinden, das nennt sich 
"Soft-UART"...
Beitrag "Suche Attiny Soft-Uart"

von Michael Dierken (Gast)


Lesenswert?

Werde mir mal deinen Link durchlesen (Will hier nur Hilfe aber keine 
Komplettlösungen ^^)

Wenn ich bei genau 2,4MHz eine Baudrate von 9600 erreichen will müsste 
ich den Timer bis 250 zählen lassen.

Eigentlich sollte der Fehler doch gering genug sein oder? (251 = +0,04%)
Oder habe ich mich da verrechnet?

Als maximum habe ich bei dieser Variante eine Frequenz von 2.448.000Hz, 
was ich aber zunot über die Kalibrierungsbit`s verhindern kann zu 
überschreiten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michael Dierken schrieb:
> was ich aber zunot über die Kalibrierungsbit`s verhindern kann zu
> überschreiten
Das funktioniert eben nur, wenn die Umgebungsbedinungen definiert, 
konstant und reproduzierbar sind. Und idR. möchte man im "echten Leben" 
diese manuelle Korrektur nicht machen, denn die ist z.B. in einer Serie 
aufwendig und kostet Zeit (=Geld).

von Michael Dierken (Gast)


Lesenswert?

Das nehme ich als JA entgegen.

Daher das ich diese Schaltung nur 1-2mal aufbauen will hätte ich kein 
Problem diese Kalibrirung einzustellen, zumal ich sie garnicht genau 
vornehmen würde sondern so das im Temperaturbereich -10 bis 40°C keine 
Überschreitung einer Frequenz von 2,448MHz auftritt.
Ich denke kaum das ich ine 50°C heiße Platine in die Finger nehme und an 
dem Rechner anschließe um diese auszulesen.
Sollte es im Sommer doch mal wärmer werde kann ich ja mal ausprobieren 
wie weit sich der RC nach unten kalibrieren lässt.

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.