Hallo, ich habe eine Verpackungsmaschine, die im Durchschnitt etwa alle 3 Minuten ein 20 Byte langes Auftrragsdatenpaket von einem Server per RS232 erhält. Die Maschine benötigt zur ausführung ca. eine Minute, in dieser Zeit werden Daten verworfen. Ich möchte diese nun mit einer Schaltung zwischenspeichern und bei einen High-Puls auf einer Steuerleitung an die Maschine Weiterleiten. Normalerweise wird dieser vom Server ausgewertet, aber wir verwenden eine andere Software die das nicht kann, weiteres habe ich keinen Zugriff auf den Server, es kommt also nur eine Hardwarelösung in Frage. Es sollten etwa 10 Datenpakete gespeichert werden können, also 200 Byte. Falls mehr möglich ist, so wäre das natürlich kein Problem. Die Baudrate ist beidseitig 300, 8 Bits und 1 Stopbit. Wie könnte ich das am Besten realisieren? Reicht dafür ein Ram, oder muss da ein AVR her?
Rolf schrieb: > Die Baudrate ist beidseitig 300, 8 Bits und 1 Stopbit. > Wie könnte ich das am Besten realisieren? Reicht dafür ein Ram, oder > muss da ein AVR her? Ein RAM alleine kann keine seriellen Daten verarbeiten. Also muss ein kleiner Controller her, z.B. ein AVR. Die 200 Byte passen leicht in dessen internen RAM. Musst du noch jemand finden, der dir das realisiert. Kostet beim Profi ein paar 100 Euro. Grüß, Peter
Geringe AVR-Kentnisse habe ich selber auch, ich versuche mal, das zu realisieren. Kann mir jemand ungefähr den dafür notwendigen Programmablauf in Pseudeocode sagen?
Wenn die Steuerleitung auf High geht, sollen übrigens nur die nächsten 20 Bytes ausgegebn werden, der Rest soll im RAM bleiben, biss die Leitung erneut auf low war und wieder auf high geht.
Ich sehe das so: Du wirst dafür bezahlen müssen, wenn Du es nicht selbst kannst.
Ich koennt einen Mega624 mit 2 Uarts, Treibern, Spannungsregler, usw, auf einer Leiterplatte fuer 60 Euro in die Runde werfen.
@Rolf werden auch Daten von der Maschine zum Server übertragen, und wenn ja müssen die auch zwischengespeichert werden? Sascha
Die Hardware kann ich selbst, die Software zum Großteil auch. Mein Lösungsansatz: Der AVR empfängt die Daten und speichert sie der Reihe nach im RAM. Sobald die Steuerleitung der Maschine auf high geht, wird ein externer Interrupt ausgelöst und der erste Wert per UARt ausgegeben. Nur muss ja dann der gesamte RAM um 10 Byte nach verne verschoben werden, hier endet aber mein Wissen, daher wäre ein Pseudocode hilfreich.
(BK): Nein, die Kommunikation geht nur Server -> Maschine.
rolf schrieb: > dann der gesamte RAM um 10 Byte nach verne verschoben werden, nein > hier endet aber mein Wissen, daher wäre ein Pseudocode hilfreich. Stichwort FIFO (Ringpuffer) Grüße, Peter
Na dann sollte z.B. ein ATTiny2313 reichen, an seinem RX kommen die Daten vom Server an - die UART-Empfangsroutine schreibt die Daten in einen Ringpuffer. Wird das Auslösesignal getriggert, so gibt eine Senderoutine die ältesten 20Byte aus dem Ringpuffer über TX aus. Sascha
Peter Roth schrieb: > Stichwort FIFO (Ringpuffer) Das hilft mir weiter: Daten empfangen und in den FIFO schreiben Bei Steuerleitung = 1 über Interrupt den Letzten Wert ausgeben.
@ Rolf (Gast) >Daten empfangen und in den FIFO schreiben Ja >Bei Steuerleitung = 1 über Interrupt den Letzten Wert ausgeben. Naja, ich denke nicht, dass man hier wirklich einen Interrupt braucht. So schnarchlangsam wie das alles läuft ;-) Ausserdem ist es besser, dein Signal von der Maschine solide zu entprellen, gerade im Industrieumfeld. Alles in allem brauchst du nur einen ATtiny2313, einen MAX232 und einen Quarz, 1 MHz ist mehr als genug. MFG Falk
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.