Baudrate Converter

Gast #7121143
Lesenswert?
• ▲
▼
Hallo,

im Rahmen der Entwicklung einer Amateurfunk-Relaissteuerung auf Basis 
von Svxlink möchte ich ein kleines Teilprojekt publizieren, das 
eventuell auch für andere Anwendungen interessant ist.

Anforderung:

Baudrate-Konvertierung 1,5 MBaud auf 115,200 kBaud mit integriertem 
receive buffer und Software-Handshake

Problemstellung:

Die erste Version der Svxlink-Relais-Steuerung wurde mit dem Raspberry 
Pi 3 ausgestattet, der aber immer wieder Probleme machte (kaputtes 
Filesystem der SD-Karte).
Da der Pi in dem Zustand im Linux Maintenance Mode hängen blieb, in dem 
kein Netzwerk verfügbar ist, war per Remote kein Netzwerkzugriff 
möglich.

Die wichtigsten Anforderungen an ein neues Design u.a. waren:
- das Linux-OS auch im run level 1 oder 2 (also ohne Netzwerk) zu 
erreichen
- bei Stromausfall den SBC kontrolliert und autark herunterzufahren und 
nicht einfach herunterkrachen zu lassen (erfordert Batteriebetrieb und 
-ladung)
- LCD-Display und Tastenbedienung

In der zweiten Version wurde anstelle des Pi 3 ein NanoPC-T4 verwendet. 
Das u.a. auch wegen der Bootmöglichkeit von der NVME-SSD. Der T4 bietet 
eine serielle Schnittstelle, über die der T4 auch im maintenance mode 
per Telnet erreichbar ist.
Diese Schnittstelle sollte über einen RS232/TCPIP-Converter adaptiert 
werden. Allerdings bietet diese Schnittstelle nur eine recht unübliche 
Baudrate von 1.5MBaud.
Da der TCP/IP-Converter, wie er bei ebay vielfach angeboten wird, nur 
eine maximale Baudrate von 115200 schafft, habe ich kurzerhand einen 
Konverter auf Basis des AtTiny 841 dazwischengehängt.

Realisierung:

- die Taktrate von 12 MHz ist für polling-Betrieb hinreichend hoch, so 
daß keine Interrupts und damit kein Stack nötig ist.
- alle nötigen Variablen werden in den verfügbaren Registern gehalten.
- somit ist das komplette RAM von 512 Bytes für den receive buffer 
verfügbar.
- die gerade Anzahl von 512 Bytes machen die Verwaltung der read/write 
pointer des als Ringpuffer realisierten receive buffers wesentlich 
einfacher.

Daher war es möglich die Software entsprechend minimalistisch zu 
gestalten.

Erreicht der Füllgrad des buffers ein oberes Limit, wird XOFF gesendet 
und bei Erreichen eines unteren Limits wieder ein XON.
Die thresholds ist so gesetzt daß in meinem Anwendungsfall keine buffer 
overflows passieren.

Die gesamte Schaltung funktioniert mittlerweile seit über einem Jahr 
ohne Probleme.

Im Anhang der Sourcecode und die Solution Files für das Microchip 
Studio.
Angehängte Dateien:

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.