Forum: Mikrocontroller und Digitale Elektronik frage zur uart!!!


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ralph (Gast)


Lesenswert?

hallo!
habe schon wieder eine frage.
wie kann ich denn bei der datenübertragung eine pause von 4bit
erzeugen?
mit einem atmega8!

kann mir da jemand helfen?
dachte an eine schleife oder so, aber wie bekomm ich da die zeit von
4bit hin?

von Frank Linde (Gast)


Lesenswert?

Die Bitzeit kannst Du aus der Baudrate errechnen und die Pause für 4 Bit
kannst Du entweder mit einem Timer oder mit einer Schleife realisieren.
In Assembler ist die Zeitbestimmung mit der Schleife einfach, weil Du
die Zeit für jeden einzelnen Befehl anhand der Befehlsliste ermitteln
kannst. Einfaches Beispiel:

nop
nop
nop
nop

Damit vertrödelt der Prozessor 4 Taktzyklen (was nicht identisch mit
Deiner 4-Bit-Pause ist).

Gruß, Frank

von Oliver (Gast)


Lesenswert?

Hallo Ralph,
aus welchem Grund brauchst du denn die Verzögerung und soll die
Verzögerung zwischen den einzelnen Bytes sein?

Gruß Oliver

von Ralph (Gast)


Lesenswert?

hi oliver!

ja, die pause soll immer zwischen jedem byte entstehen und is 4 bit
lang. also in meinem fall ca 400microsecunden.

hast du eine idee?

von Steffen Burr (Gast)


Lesenswert?

Hallo!

Ich denke mit dem Hardware UART geht das nicht. Da hilft nur, das UART
selber per Software zu erzeugen ...

Dann ist es einfach!

von Ralph (Gast)


Lesenswert?

ja, das mag sein. aber ich bin noch ein anfänger und kann es leider
nicht. habe es jetzt geschafft, dass das signal ausgegeben wird. fehlen
eben nur noch die pausen und das antriggern des signals.

von Ralph (Gast)


Lesenswert?

gibt es da eine möglichkeit ein beispielprogramm irgendwo
herzubekommen??? damit ich mir das anschauen kann???

von Hubi (Gast)


Lesenswert?

@Ralph
Hi,
bei den Links findest du einen Verweis auf den AVR delay loop
genearator, ein kleines Windows-Programm, das dir nach Vorgabe der Zeit
ein Stück Assembler-Code generiert. Den kannst du dann in dein Programm
mittels Drag/Drop importieren.

von Steffen Burr (Gast)


Lesenswert?

@Ralph:

Tut mir leid, vergiss das mit dem Software UART!
Ich habe etwas überlesen. ich dachte, du willst nach jedem BIT 4 bit
Pause machen. Du hast aber Byte geschrieben.

Das geht natürlich auch mit dem Hardware UART, einfach mittels nops
nach dem Senden eines Bytes das Senden des nächsten verzögern. Eben wie
oben beschriben.

Ich werd die Beiträge nächstes Mal genauer lesen!

Grüße
Steffen

von Peter D. (peda)


Lesenswert?

Du setzt einfach einen Timerinterrupt mit der Länge von 14 Bitzeiten auf
und in diesem startest Du dann immer das Senden des nächsten Bytes.

Alternativ könntest Du, wenn schon 2 Bitzeiten Pause reichen würden,
die UART auf 9 Bit + 2 Stopbits setzen.


Peter

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]
  • [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.