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.
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.