alternative UART-Pins am ATMEGA328P

OP #7607684
Lesenswert?

hallo; in der Arduino-IDE kann man ja mit der Bibliothek SoftwareSerial statt der Standard-UART-Pins 0 und 1 zwei beliebige andere digitale Pins verwenden. Ich habe versucht, aus der Bibliothek schlau zu werden, was alles getan werden muss, um dies zu erreichen, aber das übersteigt momentan noch mein C++ Verständnis. Mit Assembler bin ich aber mittlerweile sehr vertraut. Für die Standard-Pins 0 und 1 konnte ich ein AVR-Assembler-Programm schreiben, das Zeichen sendet und - über die RX-Interrupt-Routine - Zeichen empfängt. Wo genau - in welchem Register - kann ich denn angeben, dass ich z.B. Pins 2 und 3 statt 0 und 1 verwenden möchte ? Und ich muss dann statt der RX-Interrupt-Routine den Pin-2-Interrupt verwenden, oder ? Im Datenblatt habe ich zu diesem Thema, andere Pins als die Standard-Pins für UART zu verwenden, nichts gefunden. Hat jemand schonmal diese Sache in Assembler programmiert und kann mir ein Beispielprogramm schicken ? Oder ein vereinfachtes C++Programm, das übersichtlich nur die nötigsten Programmzeilen enthält ? Oder vielleicht kurz das Prinzip erklären, wie dem Mikrocontroller mitgeteilt wird, dass er zwei andere Pins als 0 und 1 für UART verwenden soll ? Das wäre sehr hilfreich. Vielen Dank

#7607690
Lesenswert?

Michael S. schrieb:

Wie gesagt, bin ich in C++ nicht so bewandert ...

Es geht rein um das semantische Verständnis des Namens der Bibliothek.

Mit C-Verständnis hat des nichts zu tun.

Das Geheimnis verbirgt sich hinter dem Wortteil "Software" - keine HW-Register, die man konfigurieren kann, kein HW-USART, dass einen Interrupt auslöst.

Michael S. schrieb:

Oder vielleicht kurz das Prinzip erklären, wie dem Mikrocontroller mitgeteilt wird, dass er zwei andere Pins als 0 und 1 für UART verwenden soll ?

Kurz, das geht beim ATmega328 nicht mit Hardwareunterstützung. Das Datenblatt verschweigt dir nichts.

OP #7607696
Lesenswert?

OK - hat jemand für diese C++Software ein Pendant in Assembler das er mir zuschicken kann ? Oder hat jemand vielleicht Lust alles aus dieser Bibliothek so zu extrahieren und in EINEN einzigen Sketch zu packen - ohne Bibliotheksaufrufe, Klassen und Methoden, sondern einfach als prozedurales Programm mit Unterprogrammen ? Das könnte ich dann relativ leicht in Assembler umsetzen, aber mit der objekt-orientierten Schreibweise in C++ habe ich noch so meine Probleme. Vielleicht hat jemand Lust, dieses Projekt mit mir gemeinsam zu entwickeln ? DU bis ein C++Crack und schreibst alles um in ein einziges prozedurales Programm, und ICH transformiere es in Assembler, und WIR präsentieren das dann gemeinsam auf Github ?

#7607702
Lesenswert?

Michael S. schrieb:

ICH transformiere es in Assembler

Hast du die Unterhose über der Jeans und ein T-Shirt an, auf dem "CoMpIlErMaN" steht?

Ich mein, ernsthaft, wenn du so gut in Assembler bist, dürfte es doch ein Klacks sein, ein paar Bits rein- oder rauszuschieben? Und, noch viel schlimmer: ich hab keine Ahnung vom ATMega-Assembler, aber ganze 30 Sekunden gebraucht, um passenden code zu finden... Ich hab einfach "atmega software usart in assembler" in die Adressleiste gehackt. Ich hab also direkt ein T-Shirt bestellt mit "h4XX0rm4n"...

Michael S. schrieb:

genauso sowas habe ich gesucht

"Gewollt". "Gesucht" hast du das sicher nicht.

OP #7607707
Lesenswert?

Trotz aller Gehäßigkeit, Jens, trotzdem danke, denn durch deinen Hinweis habe ein weiteres Assemblerprogramm gefunden, echt gut. Ich habe tatsächlich die falschen Suchbegriffe verwendet, mich zu sehr auf die Alternativen zu den Standardpins in der Suchanfrage konzentriert und nichts passendes gefunden. UART für ATTINY, das ist der Schlüssel - danke. ich wünsche allen noch einen schönen Abend. Gute Nacht

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren