Forum: Compiler & IDEs 2ter UART an einem gewönlichen Port


von Markus Meyer (Gast)


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

von Markus Altmann (Gast)


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.

von Michael Wilhelm (Gast)


Lesenswert?

In Atmel App-Note 305 ist eine Software UART beschrieben.

MW

von Rufus T. Firefly (Gast)


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.

von peter dannegger (Gast)


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

von Gerd Kautzmann (Gast)


Lesenswert?

Dann gäbe es (vieleicht) noch die Möglichkeit den UART zu multiplexen
....

von Markus Meyer (Gast)


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

von Markus Meyer (Gast)


Lesenswert?

wo finde ich die Atmel App-Note 305 ? klingt sehr verlokend was sie dort
sagen. der link funktioniert aber nicht.

mfg

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.