mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 zwischenspeichern und bei Signal ausgeben?


Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hoppla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe das so: Du wirst dafür bezahlen müssen, wenn Du es nicht selbst 
kannst.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich koennt einen Mega624 mit 2 Uarts, Treibern, Spannungsregler, usw, 
auf einer Leiterplatte fuer 60 Euro in die Runde werfen.

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf

werden auch Daten von der Maschine zum Server übertragen, und wenn ja 
müssen die auch zwischengespeichert werden?

Sascha

Autor: rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(BK): Nein, die Kommunikation geht nur Server -> Maschine.

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.