mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino: udp.read() - woher kommen die Daten?


Autor: Frank Esselbach (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit einem Arduino und einem kleinen Display eine Art Monitor 
parallel zu einer draußen stehenden LED-Matrixanzeige bauen. Die 
LED-Matrix erhält ihre Daten als RAW-RGB-Block per UDP-Multicast, da 
könnte ich am Arduino bequem die Daten parallel mitempfangen.

Die Auflösung der LED-Matrix beträgt 192x96, was bei RGB über 55kByte 
pro Bild sind. Wenn ich von der Sender-Applikation alternativ für den 
Monitor ein Bild mit halber Auflösung erstellen lasse, bin ich bei 
96x46. In RGB sind das ca. 13KByte - für Arduino immer noch ziemlich 
"sportlich". Wndle ich die 3 Byte RGB für die Übertragung auf insgesamt 
1 Byte (z.B. 3-3-2 Bit), bleiben noch 4,4k ...

Das Problem ist der vermutlich viel zu kleine Speicher des Arduino mit 
ca. 2kByte. Dabei stellt sich mir die Frage, wo kommen die Daten denn 
bei udp.read() eigentlich her? Werden die zwangsweise im RAM des Arduino 
gepuffert oder werden die aus dem Empfangspuffer des Netzwerkchip 
gelesen?

Wenn letzteres, dann könnte es gehen, denn der WIZ5000x hat 16 oder 32 
KByte Buffer ... ein ENC28J60 immerhin 8kByte ...

: Bearbeitet durch User
Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viel TCP Stack wird da nicht vorhanden sein. Warum schaust du nicht im 
Code nach?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank E. schrieb:
> Das Problem ist der vermutlich viel zu kleine Speicher des Arduino mit
> ca. 2kByte.

Dann nimm einen Arduino mit z.B. 96kByte RAM. Das nimmt dir viele Sorgen 
ab.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da UDP ohne Quittung arbeitet, wird es eher das Problem sein, daß Du die 
Daten ausreichend schnell abholst, verarbeitest und dabei möglichst 
wenig Ram brauchst.
Zumindest beim ENC28J60 ist soviel TCP Stack da, wie man in die eigene 
Software einbaut, der hat ja selbst nichts.
Ich habe aus anderen gründen gerade mit den ENC28J60 rumgespielt.
Mit der UIPEthernet-Lib vom Arduino (da steckt fast der komplette 
LWIP-Stack drin)  und dem MQTT-Client den ich benutze sind 23k Flash 
belegt, das stört für die Anwendung nciht weiter, allerdings sind auch 
1,5k Ram belegt und da wird die Luft nach oben schnell dünn.
Die UPD-Daten abholen und direkt zum Display weiterreichen könnte aber 
vielleicht klappen.

Ausprobieren, ein China ENC28J60-Modul bekommt man ab 2,75€, den Arduino 
ProMini ab 1,80€, soviel riskiert man bei einem Fehlversuch alos auch 
nicht.
Wenn man nicht solange auf die Lieferung warten will, landet man ca. bei 
je 5,00€ aus Deutschland.

Gruß aus Berlin
Michael

Autor: Frank Esselbach (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:
> Hallo,
>
> da UDP ohne Quittung arbeitet, wird es eher das Problem sein, daß Du die
> Daten ausreichend schnell abholst, verarbeitest und dabei möglichst
> wenig Ram brauchst.
> Zumindest beim ENC28J60 ist soviel TCP Stack da, wie man in die eigene
> Software einbaut, der hat ja selbst nichts.


Ja ... das ist mir alles weitgehend klar, Hardware habe ich hier. Die 
entscheidende Frage ist aber nicht beantwortet:

Wo holt die Funktion udp.read() die Daten her?

Wird dabei auf den Puffer des Netzwerkchips zugegriffen (dann liegen die 
empfangenen Daten nicht im Arduino-RAM) oder "Nur" auf einen Bereich im 
RAM des Arduino?

Die Daten in einem Loop dort rauszuholen und direkt auf ein Display zu 
scheiben wäre dann mein Ziel.

Ich könnte das nat. auch einfach ausprobieren, aber wozu gibts ein 
Forum, wo evtl. jemand bescheid weiss.

Nochwas: Da ein Ethernet-Frame max. 1500 Bytes transportiert, müsste der 
ENC28J60 (oder der WIZ5000x) sowas wie (de-)Fragmentierung beherrschen, 
was ich eher nicht glaube. Bin deprimiert ...

: Bearbeitet durch User
Autor: Arduino Fanboy (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank E. schrieb:
> Die
> entscheidende Frage ist aber nicht beantwortet:
>
> Wo holt die Funktion udp.read() die Daten her?

Öhmmm....

Karl schrieb:
> Warum schaust du nicht im
> Code nach?

Oder soll ich das für dich tun?

Autor: Frank Esselbach (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Frank E. schrieb:
>> Die
>> entscheidende Frage ist aber nicht beantwortet:
>>
>> Wo holt die Funktion udp.read() die Daten her?
>
> Öhmmm....
>
> Karl schrieb:
>> Warum schaust du nicht im
>> Code nach?
>
> Oder soll ich das für dich tun?

Fremden Programmcode nachzuvollziehgen ist nicht gerade einfach.

NEIN, du sollst nicht für mich nachsehen, vlt. findet sich ja noch 
jemand, der dies auch so schon weiss ...

Forum heisst, Wissen zu teilen (wenn es denn vorhanden ist), nicht für 
andere Arbeit zu machen.

Autor: Arduino Fanboy (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank E. schrieb:
> Fremden Programmcode nachzuvollziehgen ist nicht gerade einfach.

Habe das mal gerade getestet....
Ich finde, so schwer ist das nicht....
Zumindest nicht in diesem Fall.

: Bearbeitet durch User
Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank E. schrieb:
> Nochwas: Da ein Ethernet-Frame max. 1500 Bytes transportiert, müsste der
> ENC28J60 (oder der WIZ5000x) sowas wie (de-)Fragmentierung beherrschen,
> was ich eher nicht glaube. Bin deprimiert ...
Da musst du dir selbst was einfallen lassen, mit UPD sendest du ein 
Paket und gut ist es, ein 2.,3.,... Paket hat keine Beziehung zu 
vorherigen Paketen. Wenn du für deine Übertragung mehr als ein Paket 
brauchst, musst du selbst noch mit reinschreiben was Inhalt des Pakets 
ist damit dein Empfänger das zuordnen kann.

Sascha

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.