Hallo, ich suche für ein Projekt die Möglichkeit einen ATMEGA328P (Arduino Nano) mit einer weiteren seriellen Schnittstelle zu versehen, in Form von Software. Die Geschwindigkeit ist mit 2400 Baud eher unbedeutend. Libs dafür gibt es genügend: - SoftwareSerial - NewSoftwareSerial - AltSoftSerial um nur ein paar zu nenne. Leider können die alle kein Parity und das brauche ich! für die AltSoftSerial gibt es einen Patch, der aber nicht funktioniert :-( Hat jemand einen Tipp?
Olli Z., ja programmiere dir doch eine Bibliothek. Ist doch kein Beinbruch, man liest einfach noch ein Bit ein und verwurstet dann alle gelesenen, bzgl. EVEN oder ODD Parity. Dann kann man entscheiden, ob das Byte gültig ist.
> um nur ein paar zu nenne. Leider können die alle kein Parity und das > brauche ich! > für die AltSoftSerial gibt es einen Patch, der aber nicht funktioniert > :-( > > Hat jemand einen Tipp? Was für Parity brauchst Du denn für wie viele Datenbits? Am einfachsten wäre es, wenn Du beispielsweise 7E1 (even parity, 7 data bits) oder 7O1 (odd parity, 7 data bits) benötigen würdest, denn dann könntest Du die Paritätsprüfung komplett über Deine Anwendung mit 8N1 laufen lassen. Beim Senden mit 8N1 würdest Du dann einfach das letzte Bit selbst so setzen, wie es für 7E1 oder 7O1 erforderlich ist, und dann ganz einfach 8 Bits über 8N1 raushauen. Und beim Empfangen mit 8N1 würdest Du das achte Bit im Byte selbst anhand der ersten 7 Bits ermitteln, und empfangene Bytes dann als ungültig verwerfen, wenn die Parität nicht stimmt. Ein anderes Datenprotokoll als 8N1 brauchst Du erst dann, wenn die Summe aus Daten- und Paritätsbits nicht 8 ergibt, sondern eine höhere Zahl. Z.B. 8E1 oder 9E1. Aber für 7E1 oder 7O1 kannst Du als Protokoll komplett mit 8N1 senden und empfangen, und das Setzen bzw. Prüfen des Parity-Bits vollständig Deiner Applikation überlassen, denn 7 Datenbits plus ein Parity-Bit zusammen sind ja auch 8 Bits, und die werden mit 8N1 übertragen. Völlig ohne Probleme.
Olli Z. schrieb: > Ich brauche 8E1. Das ist natürlich Mist, weil das ohne Start-/Stoppbits schon 9 Bits sind. Wenn das von keiner der üblichen SoftwareSerial-Libraries für Arduino unterstützt wird, bleiben Dir zwei Möglichkeiten: 1. Einen Atmega-Controller verwenden, der mindestens zwei HardwareSerial-Schnittstellen hat. Anstelle eines Arduino Nano z.B. einen Arduino Micro mit einem Atmega32U4 Controller. HardwareSerial unterstützt nämlich auf Atmegas diverse Protokolle, wie auch 8E1. Wenn das aus irgendwelchen Gründen hardwaremäßig nicht möglich ist, einen geeigneten Controller zu verwenden, und auch keine der vorhandenen Software-UART-Emulationslibraries 8E1 unterstützt, bliebe Dir wohl tatsächlich nur, das selbst zu programmieren. Stehen Interrupts auf Deinem System denn weitgehend ohne Einschränkungen zur Verfügung, z.B. Hareware-Interrupts an Aruino Pin-2 und Pin-3, bei bisher nur geringer Interruptbelastung im System (also nicht bereits zigtausend Interrrupts pro Sekunde, oder viele Zeiten mit gesperrten Interrupts im Haupt-Code)? Geht es Dir denn um das Senden mit 8E1, oder um das Empfangen mit 8E1? Oder sogar um beides? Oder könntest Du einen Arduino Micro verwenden?
Jürgen S. schrieb: > Das ist natürlich Mist, weil das ohne Start-/Stoppbits schon 9 Bits > sind. Man kann Software selber schreiben, auch wenn Einbinden und /Copy&Paste/ sich immer mehr verbreiten. Und bis 9 zu zählen, sollte ein ATmega328 locker schaffen. Das ist ja schlimmer, als die unzähligen Threads über Bauteilsuche für EAGLE.
Hallo Jürgen, alles was Du sagst stimmt und wie Du es sagst ist verständlich (würden sich andere doch mal ein Beispiel an Dir nehmen oder besser einfach jichts pisten) Pins wäre frei, Interrupts auch. Ich muss das senden und empfangen können. Meine Programmierkenntnisse sind für eine eigene Serial Lib zu limitiert, auch wenn mir das vom Prinzip her klar ist. Habe schon versucht den Code zu verstehen und anzupassen, leider bislang ohne Erfolg. Und meine Hoffnung auf Unterstützung in dieser Sache schwindet. Scheinbar braucht das sonst niemand. Da muss ich dann wohl doch auch andere Hardware gehen...
Olli Z. schrieb: > Meine Programmierkenntnisse sind für eine eigene Serial Lib zu > limitiert, auch wenn mir das vom Prinzip her klar ist. Habe schon > versucht den Code zu verstehen und anzupassen, Dann nimm dir ein C-Buch und lies die ersten paar Kapitel, setzt dich noch einmal an den Code und wenn du immer noch unklare Stellen findest, poste die hier mit deiner Interpretation. Dann wird dir sicher auch geholfen deine Fehler zu verstehen und weiter zu lernen. Auf Zuruf und ohne genau Spezifikation eine Software geliefern zu bekommen, kannst du aber wahrscheinlich wirklich vergessen. So wie ich auch nicht erwarte, dass mir ein Mechaniker kostenlos die Winterreifen umsteckt, obwohl ich es auch selber tun könnte,... p.s. die AVR Appnotes AVR304, AVR305 könnten dir vielleicht auch etwas weiterhelfen.
Olli Z. schrieb: > Pins wäre frei, Interrupts auch. Ich muss das senden und empfangen > können. > Meine Programmierkenntnisse sind für eine eigene Serial Lib zu > limitiert Und was spricht dann dagegen, gerade wenn Du sowohl senden als auch empfangen möchtest (und das womöglich sogar gleichzeitig im Vollduplexbetrieb), bei der Hardwareauswahl ein Arduino-Board zu wählen, das eine zweite HardwareSerial-Schnittstelle unterstützt, an die Du Dein Gerät leicht anschließen könntest, und das dann - von der Arduino Core-Library - mit 8E1 - mit gepuffertem Senden und Empfangen im Hintergrund unterstützt wird? Beispielsweise ein "Arduino Micro" Board und dann
1 | Serial1.begin(2400, SERIAL_8E1); |
Eben nichts spricht dagegen. Daher sagte ich ja eingangs das Du wohl recht hast. Aber das hier ist doch ein Hobbyforum und etwas Tüftlergeist darf da doch schon mitschwingen...oder ? ;-)
Der ATMEGA328PB hat 2 UARTs. http://www.atmel.com/devices/atmega328pb.aspx http://www.mouser.de/Search/Refine.aspx?Keyword=556-ATMEGA328PB-AU
Peter D. schrieb: > Der ATMEGA328PB hat 2 UARTs. Eine gute Alternative zum Atmega2560. Weiß Du, ob dieser evtl. sogar pinkompatibel mit dem Atmega328P ist? Dann könnte man ihn ja sogar auf dem Arduino-Board einfach austauschen?! Gibt es eine Toolchain-Unterstützung dafür?
Da greift man sich an den Kopf und denkt - Gibt es heute keine Datenblätter mehr ? Da steht doch alles drin. So wie Gehäuse, Pins und dessen Bedeutung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.