2ter UART an einem gewönlichen Port

Gast #179508
Lesenswert?
• ▲
▼
Hallo

ich arbeite an einem Projekt wo ich zwei UART-Schnittstellen brauche.
ich möchte den ATmega 32 verwenden, dieser verfügte aber leider nur
über eine UART schnittstelle (diese brauche isch schon für ein GPS
Modul).

ist es möglich eine 2te Schnittstelle an einem 'gewöhnlichen' port
(z.B. Port B oder C) zu implementieren? vieleicht gibt es einen andere
lösung... bin offen für jede anregung.

besten dank für euere antworten im voraus

markus
Gast #179509
Lesenswert?
• ▲
▼
Wieso bist du auf den mega32 fixiert?

2 U(S)ARTS sind im mega162, mega64 oder mega128 vorhanden.

Es gibt natürlich schon eine Möglichkeit einen UART rein
Softwarebasiert zu realisieren, hab ich auch schon gesehen (weiß leider
nicht mehr wo) finde ich nur relativ umständlich.
Gast #179511
Lesenswert?
• ▲
▼
Bascom-AVR enthält eine einfach zu nutzende Unterstützung für
Software-UARTs, die mit nahezu jedem Portpin genutzt werden kann.
So sind auch mehr als zwei Schnittstellen insgesamt möglich.
Allerdings ist so eine Lösung nicht mehr sonderlich performant, vor
allem, wenn's ums Empfangen auf so einer Schnittstelle geht.
Gast #179512
Lesenswert?
• ▲
▼
Das ist nicht schlimm.

Allerdings ist bei 115200Baud die Auslastung der CPU schon heftig und
andere Interrupts müssen verdammt Rücksicht nehmen.

Die Software-UART sollte also immer die langsamere sein. Einfacher
wirds auch, wenn nur Halb-Duplex nötig.

Der Eingang sollte vorzugsweise der ICP sein, mindestens aber ein
externer Interrupt. Zum exakten Senden ist ein OC1x Pin ideal.
T1 sollte also nicht als PWM benötigt werden.


Das Prinzip ist einfach, der ICP erkennt das Startbit und merkt sich
die Startzeit. Zu der Startzeit 1,5 * Bitzeit addieren und in ein
OC1x-Register laden. Dann bei jedem Compare-Interrupt 1*Bitzeit
addieren und den Pin einlesen bis alle 8 Bits drin sind.

Senden ist ähnlich, zu dem anderen Compare immer 1*Bitzeit addieren und
im Interrupt das "set on compare", bzw. "clear on compare" je nach
dem zu sendenden Bit auslösen.

Da T1 ja ständig durchläuft ist er als Haupttimer (Overflow-Interrupt)
weiterhin verwendbar.
Bei Halp-Duplex ist auch noch der andere Compare-Interrupt frei.


Peter
Gast #179514
Lesenswert?
• ▲
▼
how... das dies so schnell geht hätte ich nicht gedacht!!! super
vorschläge, ich schaue mir mal den code im Atmel App-Note 305 an und ob
es mit dem Multiplexen geht (hab ich noch nie verwendent...).

besten dangg für die schnellen antworten.

melde mich wieder

mfg markus

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.