Arduino OLED Display hakt bei zu schneller Werteingabe

OP #6092658
Lesenswert?

Hallo alle zusammen



ich habe folgendes Problem seit einigen Tagen & bin jetzt schlussendlich
zu den Entschluss gekommen, mir mal Rat hier im Forum zu holen:


Ich gebe über ein Drehgeber_Interrupt einfache Positionswerte ein, die 
mir über mein OLED wieder ausgegeben werden sollen.


Oben im rechteckigen Kästchen als INT
Unten im runden Kästchen      als STRING



in beiden fällen habe ich das Problem, das wenn ich eine zu schnelle 
Drehung mit dem Drehgeber mache, das Display hakt, und solche Ausgaben 
wie auf dem Bildern entsteht. Drehe ich nun weiter verschwindet das auch 
sofort wieder, nur indem Moment ist es bisschen ärgerlich weil ich 
zwischenzeitlich auf dem Display abgehackt "Zeichen" sehen muss.



Folgendes habe ich schon probiert:
-Drehgeber wird über ein Interrupt ausgewertet
-Delay sowohl in der Loop als auch (Todsünde ich weiß) in der ISR




Bin dankbar für jede Hilfe !
Angehängte Dateien:
Gast #6092665
Lesenswert?

Damian M. schrieb:
> Bin dankbar für jede Hilfe !

Lies die Hinweise im Kasten oberhalb der bei jedem Posten zu sehen ist.

Insbesondere:
--------------------------------------------------------
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
--------------------------------------------------------

Wenn du das nicht verstehst dann lass das Posten sein.
OP #6092667
Lesenswert?

OMG schrieb:
> Damian M. schrieb:
>> Bin dankbar für jede Hilfe !
>
> Lies die Hinweise im Kasten oberhalb der bei jedem Posten zu sehen ist.
>
> Insbesondere:
> --------------------------------------------------------
> Bitte das JPG-Format nur für Fotos und Scans verwenden!
> Zeichnungen und Screenshots im PNG- oder
> GIF-Format hochladen. Siehe Bildformate.
> --------------------------------------------------------
>
> Wenn du das nicht verstehst dann lass das Posten sein.

ok ok sorry. ganz ruhig.
Wollte dich damit nicht demütigen
Gast #6092669
Lesenswert?

Der Drehgeber Interrupt unterbricht nunmal das zeilenweise Schreiben 
aufs Display, das wird sich nicht ändern lassen.

Während eines zusätzlichen delays, egal wo, wird das Display auch nicht 
fertig gefüllt.

Dazu bräuchtest du zwischen einen Framebuffer, der dann auf Kommando auf 
einen Rutsch ohne weiteres Zutun des Microcontrollers angezeigt wird.
Gast #6092683
Lesenswert?

Damian M. schrieb:
> Wollte dich damit nicht demütigen

Nein, du willst nur zeigen dass du dich an minimale Regeln
im Forum nicht kümmern willst.

Es scheint so als ob die Leute die dir helfen sollen sich
deine "Codierungen" gefälligst selbst zurechtschneidern.

Du bist hier lang genug angemeldet um zu wissen wie und
was man postet.
OP #6092688
Lesenswert?

OMG schrieb:
> Damian M. schrieb:
>> Wollte dich damit nicht demütigen
>
> Nein, du willst nur zeigen dass du dich an minimale Regeln
> im Forum nicht kümmern willst.
>
> Es scheint so als ob die Leute die dir helfen sollen sich
> deine "Codierungen" gefälligst selbst zurechtschneidern.
>
> Du bist hier lang genug angemeldet um zu wissen wie und
> was man postet.

Ich entschuldige vielmals das ich dein Tag so ruiniert habe.
Hätte ich nach den ganzen Jahren die ich hier angemeldet bin nur nicht
vergessen was für eine schwere Tat es ist unbewusst ein falsches Format
hochgeladen zuhaben, dann hätte ich es mir vorhin 2 mal überlegt was zu 
posten.

Tut mir wirklich wirklich leid
Gast #6092689
Lesenswert?

heic, voll das Bildformat, is klar.

H g schrieb:
> Der Drehgeber Interrupt unterbricht nunmal das zeilenweise Schreiben
> aufs Display, das wird sich nicht ändern lassen.
>
> Während eines zusätzlichen delays, egal wo, wird das Display auch nicht
> fertig gefüllt.
>
> Dazu bräuchtest du zwischen einen Framebuffer, der dann auf Kommando auf
> einen Rutsch ohne weiteres Zutun des Microcontrollers angezeigt wird.
#6092693
Lesenswert?

Vorschlag: warum lädst du die Bilder nicht einfach im JPG-Format hoch, 
wie’s dir nun schon mehrfach nahegelegt worden ist? Ich mein … du 
möchtest doch, dass die Leute sich das anschauen und idealerweise den 
Fehler benennen können, oder? Warum machst du’s ihnen denn nahezu 
unmöglich, die Bilder anzuschauen?
OP #6092696
Lesenswert?

Jack V. schrieb:
> Vorschlag: warum lädst du die Bilder nicht einfach im JPG-Format hoch,
> wie’s dir nun schon mehrfach nahegelegt worden ist? Ich mein … du
> möchtest doch, dass die Leute sich das anschauen und idealerweise den
> Fehler benennen können, oder? Warum machst du’s ihnen denn nahezu
> unmöglich, die Bilder anzuschauen?

Weil hier irgendwas ist dem hochladen nicht ganz so funktioniert wie es 
soll...
OP #6092704
Lesenswert?

Damian M. schrieb:
> Jack V. schrieb:
>> Vorschlag: warum lädst du die Bilder nicht einfach im JPG-Format hoch,
>> wie’s dir nun schon mehrfach nahegelegt worden ist? Ich mein … du
>> möchtest doch, dass die Leute sich das anschauen und idealerweise den
>> Fehler benennen können, oder? Warum machst du’s ihnen denn nahezu
>> unmöglich, die Bilder anzuschauen?
>
> Weil hier irgendwas ist dem hochladen nicht ganz so funktioniert wie es
> soll...

Jetzt geht's !
Angehängte Dateien:
Gast #6092729
Lesenswert?

Null Infos aber aber 80 MB Bilder angehangen, das ist vermutlich schon 
der Rekord für das ganze künftige Jahr. Benutze mal dein Hirn!

Hakim schrieb:
> Das ist keine Antwort, sondern das typische Geschwätz

Dein einziger Beitrag bisher war saudummes Geschwätz:

Hakim schrieb:
> Holz oder Heizöl?

Sei so nett und mache uns vor, wie du es besser machst.!
Gast #6092731
Lesenswert?

H g schrieb:
> Der Drehgeber Interrupt unterbricht nunmal das zeilenweise
> Schreiben
> aufs Display, das wird sich nicht ändern lassen.
>
> Während eines zusätzlichen delays, egal wo, wird das Display auch nicht
> fertig gefüllt.
>
> Dazu bräuchtest du zwischen einen Framebuffer, der dann auf Kommando auf
> einen Rutsch ohne weiteres Zutun des Microcontrollers angezeigt wird.
OP #6092733
Lesenswert?

Stefan ⛄ F. schrieb:
> Null Infos aber aber 80 MB Bilder angehangen, das ist vermutlich schon
> der Rekord für das ganze künftige Jahr. Benutze mal dein Hirn!
>
> Hakim schrieb:
>> Das ist keine Antwort, sondern das typische Geschwätz
>
> Dein einziger Beitrag bisher war saudummes Geschwätz:
>
> Hakim schrieb:
>> Holz oder Heizöl?
>
> Sei so nett und mache uns vor, wie du es besser machst.!

Bitte verzieh dich und geh jemand anderen auf die Nerven.
Du gibst einfach nur ein unnötigen Müll von dir weil du wahrscheinlich
ein einfach unzufriedener Mensch bist. Der selber keine Ahnung hat aber 
gerne
auf andere Ahnungslose rumhakt weil er sich dadurch überlegen fühlt.
OP #6092736
Lesenswert?

Philipp K. schrieb:
> Ich würde erstmal Fragen, ist das SPI oder I2C und bei welcher Frequenz?
>
> Der Sketch wäre ganz interessant und welche Library für den Encoder.
> vielleicht kann man mal Testweise einen "Block" zwischensetzen.

Hallo,

I2C und die Frequenz musst du wohl aus dem Code entnehmen, da ich nicht 
weiß woher ich die sonst ablesen kann.


HIER ABER ERSTMAL DER Sketch :
OP #6092738
Lesenswert?

Damian M. schrieb:
> Philipp K. schrieb:
>> Ich würde erstmal Fragen, ist das SPI oder I2C und bei welcher Frequenz?
>>
>> Der Sketch wäre ganz interessant und welche Library für den Encoder.
>> vielleicht kann man mal Testweise einen "Block" zwischensetzen.
>
> Hallo,
>
> I2C und die Frequenz musst du wohl aus dem Code entnehmen, da ich nicht
> weiß woher ich die sonst ablesen kann.
>
>
> HIER ABER ERSTMAL DER Sketch :

Das war der falsche hier noch mal der richtige
OP #6092740
Lesenswert?

Damian M. schrieb:
> Damian M. schrieb:
>> Philipp K. schrieb:
>>> Ich würde erstmal Fragen, ist das SPI oder I2C und bei welcher Frequenz?
>>>
>>> Der Sketch wäre ganz interessant und welche Library für den Encoder.
>>> vielleicht kann man mal Testweise einen "Block" zwischensetzen.
>>
>> Hallo,
>>
>> I2C und die Frequenz musst du wohl aus dem Code entnehmen, da ich nicht
>> weiß woher ich die sonst ablesen kann.
>>
>>
>> HIER ABER ERSTMAL DER Sketch :
>
> Das war der falsche hier noch mal der richtige

"OLED_LCD_Testcode_mit_Drehgeber.ino"


der hier ist es
Gast #6092759
Lesenswert?

Kann nur ich das lesen? schrieb:
> H g schrieb:
>> Der Drehgeber Interrupt unterbricht nunmal das zeilenweise
>> Schreiben
>> aufs Display, das wird sich nicht ändern lassen.
>>
>> Während eines zusätzlichen delays, egal wo, wird das Display auch nicht
>> fertig gefüllt.
>>
>> Dazu bräuchtest du zwischen einen Framebuffer, der dann auf Kommando auf
>> einen Rutsch ohne weiteres Zutun des Microcontrollers angezeigt wird.
OP #6092763
Lesenswert?

H g schrieb:
> Der Drehgeber Interrupt unterbricht nunmal das zeilenweise Schreiben
> aufs Display, das wird sich nicht ändern lassen.
>
> Während eines zusätzlichen delays, egal wo, wird das Display auch nicht
> fertig gefüllt.
>
> Dazu bräuchtest du zwischen einen Framebuffer, der dann auf Kommando auf
> einen Rutsch ohne weiteres Zutun des Microcontrollers angezeigt wird.


Und wie genau bekomme so einen Framebuffer ?
Gast #6092775
Lesenswert?

Damian M. schrieb:
> Und wie genau bekomme so einen Framebuffer ?

Um auch kurzzeitige Artefakte loszuwerden:
Entweder du nimmst ein Display, dass schon einen hat, oder es muss 
zusätzliche Hardware her, z.B. ein weiterer Microcontroller.

Es sollte doch aber auch reichen mit dem Neuzeichnen erst aufzuhören, 
wenn es erfolgreich abgeschlossen ist und kein Interrupt dazwischen 
gefunkt hat.
Gast #6092778
Lesenswert?

Jack V. schrieb:
> Hakim schrieb:
>> Das ist keine Antwort
>
> Das ist leider die einzige Antwort, welche die zur Verfügung gestellten
> Informationen mit einiger Sicherheit erlaubt. Alles Andere wäre
> grundlagenlose Spekulation, und daher nicht zielführend.

Dann wäre die Antwort "42" wohl korrekt!
Gast #6092813
Lesenswert?

@ Damian

Ich denke das Programm-Konzept ist zu einfach um erfolgreich zu sein.

Um kurz zusammenzufassen, was ich zu erkennen meine:
1. Du reagierst per Interrupt auf Drehgeberbewegungen.
2. Du setzt unmittelbar die Ausagebvariable
3. Das geschieht unabhängig davon, ob die vorherige Ausgabe schon fertig 
ist, oder nicht. Du wiederholst in der loop-Funktion einfach nur immer 
wieder die Ausgabe mit dem momentanen Wert der Variablen.
4. Die Ausgabe erfolgt auch, wenn sich der Variableninhalt nicht 
geändert hat.

Ist-Zustand:
In gewissen Fällen werden zwei Fragmente (oben und unten) von zwei 
verschiedenen Ziffern ausgegeben.

Man kann nach der Programmkonstruktion und der Anzeige annehmen, dass 
sich der Inhalt der Variablen während der Anzeige durch den Interrupt 
verändern kann. Der Variableninhalt aber fortlaufend von der 
Anzeigefunktion benutzt wird um die Pixelzeilen zu adressieren. Daher 
wirkt sich eine Änderung des Variableninhalts sofort , wenn die 
Anzeigefunktion nach dem Drehgeberinterrupt fortfährt, aus.

Offenbar wird die I2C-Kommunikation nicht entscheidend gestört (obwohl 
klar ist, dass sie durch den Drehgeber-Interrupt unterbrochen wird).

Soll-Zustand
Die sofortige Übertragung des veränderten Variableninhalts gilt es zu 
verhindern. Und zwar so, dass die Drehungen einerseits fortaufend und 
ohne Lücken erfasst werden, die Anzeigefunktion aber so kurz wie möglich 
unterbrochen wird. Umgekehrt darf, während der momentane 
Variablenhinhalt verarbeitet wird, keine Änderung daran stattfinden. 
Vorteilhaft wäre auch, dass die Anzeige nur dann neu aufgebaut wird, 
falls sich der Variableninhalt geändert hat.

Lösung:

Hast Du vielleicht eine Idee dazu?


P.S. Die Reaktionen würde ich an Deiner Stelle ausschliesslich nach 
ihrem sachlichen Inhalt beurteilen und auswerten. Diskussionen über Stil 
und Ton sind erfahrungsgemäß in der Regel sinnlos.
Wenn ich auch sehe, dass Du formale Fehler gemacht hast, bedaure ich 
dennoch, dass so mit Dir umgegangen wird.
Beitrag #6092891 wurde von einem Moderator gelöscht.
OP #6092914
Lesenswert?

>
> P.S. Die Reaktionen würde ich an Deiner Stelle ausschliesslich nach
> ihrem sachlichen Inhalt beurteilen und auswerten. Diskussionen über Stil
> und Ton sind erfahrungsgemäß in der Regel sinnlos.
> Wenn ich auch sehe, dass Du formale Fehler gemacht hast, bedaure ich
> dennoch, dass so mit Dir umgegangen wird.



Vielen Vielen dank :)
OP #6092916
Lesenswert?

Hugo H. schrieb:
> H g schrieb:
>> SPI
>
> Nix SPI
>
>
1
> Initialize display with the I2C address of 0x3C
2
>
>
> Ich tippe auf Hardware (neben der grottigen Drehencoder-Abfage) - z. B.
> fehlende Pull-ups o. ä.
>
> Es könnte auch schlicht das Display defekt sein. Mal probiert in den
> oberen Bereich etwas zu schreiben oder einen Punkt / eine Linie in die
> oberen 2 Zeilen zu setzen?

Mein Drehgeber hat schon verbaute Pull-Up Widerstände

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren