Wie programmiere ich ein Schieberegister?

OP #4347054
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?
#4347065
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.
Gast #4347144
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?
#4347178
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.
#4347192
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.
OP #4347284
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.
#4347359
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!
Gast #4347468
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 !!!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.