Forum: Mikrocontroller und Digitale Elektronik Wie programmiere ich ein Schieberegister?


von M. G. (ixil96)


Lesenswert?

Hallo!

Ich möchte auf einem LCD mittels Balkengrafik Messwerte darstellen.
(127 Messwerte = 127 Balken)

ab dem 128. Messwert soll der 1. Messwert aus dem Schieberegister 
rausfallen.
Also ein SR wo ich 127 Bytewerte speichern kann.

Kann mir da wer einen Tip geben, wie ich das mache?

von Jürgen D. (poster)


Lesenswert?

Ich würde es als Ringspeicher auslegen.
mit zwei Zeigern, einer wo der neue Wert geschrieben wird und einer 
womit der Ausgabe begonnen wird.

von Falk B. (falk)


Lesenswert?

@ m. g. (ixil96)

>Ich möchte auf einem LCD mittels Balkengrafik Messwerte darstellen.
>(127 Messwerte = 127 Balken)

>ab dem 128. Messwert soll der 1. Messwert aus dem Schieberegister
>rausfallen.
>Also ein SR wo ich 127 Bytewerte speichern kann.

>Kann mir da wer einen Tip geben, wie ich das mache?

Mit einem Array in Form eines FIFO.

von Gutefrage (Gast)


Lesenswert?

Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur 
Antwort.

Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen 
raus. Was am Ende des Arrays steht müsste dann vorn wieder rein, also 
Addition + 1.

Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber 
nicht in der Fremdsprache "C"...

Wo sind die Übersetzer?

von Gutefrage (Gast)


Lesenswert?

Aber was Du beschreibst würde doch keine Balkengrafik darstellen?!

von Falk B. (falk)


Lesenswert?

@ Gutefrage (Gast)

>Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur
>Antwort.

Dann kannst du auch keine Darstellung in C programmieren.

>Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen
>raus.

?

>Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber
>nicht in der Fremdsprache "C"...

Nicht mal in deutsch ist das verständlich.

Lies den Artikel FIFO wie man sowas mit Pointern und Überlauf machen 
kann.

von Daniel -. (root)


Lesenswert?

Gutefrage schrieb:
> Aber was Du beschreibst würde doch keine Balkengrafik darstellen?!

alles ist relativ.
anstatt Daten zu schieben, schiebst du den Index.

Wie hoch sind die Balken? Ist das ein binärer Wert?
Wenn du viel Speicher hast, würde sich
unsigned char fifo[128]={0}, idxRead=0, idxWrite=0;
anbieten

Wenn die Werte binär sind und du nicht viel Speicher hast,
dann müsste man sich Lösung mit "Bitschieberei" überlegen.
Was aber auch einfach wäre.

von M. G. (ixil96)


Lesenswert?

Daniel -. schrieb:

> Wie hoch sind die Balken? Ist das ein binärer Wert?

also ich verwende für die Darstellung des "Balkens" eine Funktion aus 
der u8glib.
1
u8g_DrawVLine(&u8g, x, y, h);

Damit wird eine vertikale Linie an der Position x, y, mit der Höhe h (in 
Pixel) gezeichnet. In h wird der Messwert dargestellt. Mit jeder neuen 
Messung soll die Linie um 1 Schritt nach links wandern.

von Falk B. (falk)


Lesenswert?

@m. g. (ixil96)

>Damit wird eine vertikale Linie an der Position x, y, mit der Höhe h (in
>Pixel) gezeichnet. In h wird der Messwert dargestellt. Mit jeder neuen
>Messung soll die Linie um 1 Schritt nach links wandern.

Gut. Dann fang mal mit dem direkten, einfachen Ansatz an. Ein Array aus 
127 Elementen, das deine 127 Messwerte enthält. Nach jedem Durchlauf 
kopierst du die um eins nach vorn und speicherst den neuesten Meßwert am 
Ende
1
uint8_t mdata[127];
2
3
  for (i=0; i<126; i++) {
4
    mdata[i]=mdata[i+1];
5
  }
6
  mdata[126]=neuer_messwert;
7
  lcd_neu_zeichnen();

Wenn das alles läuft, kann man das optimieren und das massenhafte 
Umkopieren einsparen, indem man mit einem Ringpuffer arbeitet. Aber das 
erst, nachdem die einfache Version läuft!

von C-Hasser (Gast)


Lesenswert?

Falk B. schrieb:
> @ Gutefrage (Gast)
>
>>Gute Frage, aber meine rudimentären C Kenntnisse reichen nicht zur
>>Antwort.
>
> Dann kannst du auch keine Darstellung in C programmieren.

Behauptete er das?
>
>>Ein entsprechend großes Array mit 2 Multipliziert schiebt die Bitstellen
>>raus.
>
> ?

Na klar Bitschieberei, sollte Falk doch auch kennen!

>
>>Mit deutschen Worten bekomme ich es wohl hin, wenn das so passt, aber
>>nicht in der Fremdsprache "C"...
>
> Nicht mal in deutsch ist das verständlich.

Und schon gar nicht in Eurem Lieblingsdialekt ;-)


>
> Lies den Artikel FIFO wie man sowas mit Pointern und Überlauf machen
> kann.

Imperativ, also mach das !!!

von chris_ (Gast)


Lesenswert?


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
Noch kein Account? Hier anmelden.