- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 44

Thema: Uno R3 mit 128x64 Pixel Display und Dreh-Encoder grafische Anzeigeprobleme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Vielen Dank!

    Ich habs nun verstanden. Ohne die Hilfe wäre das nicht geworden.

    So:
    Code:
    u8g2.clearBuffer();					// clear the internal memory
     
     
      u8g2.setFont(u8g2_font_unifont_t_symbols);
      u8g2.drawGlyph(3,Cursor+12,0x2192);      //Hier ist der Pfeil
    
      u8g2.setDrawColor(1); /* color 1 for the box */
      u8g2.drawBox(10,8,Bar1,15);
     
      u8g2.setDrawColor(2); /* color 1 for the box */
      u8g2.drawStr(25,20,"Wert 1 = ");  // write something to the internal memory
      u8g2.setCursor(95, 20);
      u8g2.print(Bar1);  // write something to the internal memory
    
    
      u8g2.setDrawColor(1); /* color 1 for the box */
      u8g2.drawBox(10,28,Bar2,15);
     
      u8g2.setDrawColor(2); /* color 1 for the box */
      u8g2.drawStr(25,40,"Wert 2 = ");	// write something to the internal memory
      u8g2.setCursor(95, 40);
      u8g2.print(Bar2);  // write something to the internal memory
    
      u8g2.setDrawColor(1); /* color 1 for the box */
      u8g2.drawBox(10,48,Bar3,15);
     
      u8g2.setDrawColor(2); /* color 1 for the box */
      u8g2.drawStr(25,60,"Wert 3 = ");  // write something to the internal memory
      u8g2.setCursor(95, 60);
      u8g2.print(Bar3);  // write something to the internal memory
      
     
      u8g2.sendBuffer();					// transfer internal memory to the display
      
      delay(250);
    geht es nun. Ich habe einen Pfeil vor dem aktiven Bargraph und alles läuft wie es soll.
    Den Rest konnte ich so lassen.
    Den Font und das Min Max des Wertes passe ich dann erstmal an...

    Danke!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Prima, geschafft!

    MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Super, nun habe ich noch einen EEPROM 24C16P in der Bastelkiste gefunden,
    der jetzt die Werte des Drehencoders beim Drücken der Taste übernimmt.
    Beim Einschalten werden die dann wieder ausgelesen und in die Variablen gesteckt.

    So macht das Spass!

    Nun die Frage dazu:
    Die Speicherzellen des EEPROMs sollte man ja wohl "Im Kreis" nutzen, damit der länger hält.
    Ist ein Siemens:
    – Endurance 10"hoch"6 cycles1)
    – Data retention 40 years1)
    – ESD protection 4000 V on all pins

    Ich werde den nicht ruinieren können. Ich weiß, eine SD-Card mit integriertem Controller nehmen...
    Aber es geht hier ja ums lernen!

    Deshalb trotzdem an die Profis, wie mache ich das mit der Speicherzellenausnutzung?

    -Die Variable für die Adresse hochzählen?
    -Aber wie lese ich dann am Start die Daten ab der "richtigen" (zuletzt gewählten) Zelle aus??

    Da bin ich mit meinem Wissen am Ende.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Wolle62 Beitrag anzeigen
    Deshalb trotzdem an die Profis, wie mache ich das mit der Speicherzellenausnutzung?
    Hallo Wolle62,
    ich hatte die gleiche Frage und gute Antworten darauf bekommen.
    https://www.roboternetz.de/community...-Flashspeicher

    Für mich hat ein ganz einfacher Algorithmus gereicht. Nach Schreiben eine page die folgende komplette page mit einem Muster (hex ff durch Löschen) belegt. Und dann vor dem nächten Schreiben diese von Adresse Null aus gesucht, mit meinen Daten überschrieben und die nächste gelöscht. Also reihum alle Seiten nacheinander beschrieben.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Ja klar, man schreibt eine "Kennung" in die EEPROM Zelle vor den Nutz-Werten und findet die beim Start. Sollte auch gehen oder?
    Das mit dem Uhrenmodul ist auch nicht schlecht.

    Mein Uno sagt mir jetzt schon, dass der RAM knapp ist, da wird die Suchroutine hoffentlich noch mit laufen.
    Auf die Dauer muss da deshalb noch ein Mega her.
    Ich habe auch gerade ein 480x272 TFT in meiner Bastelkiste gefunden. Das geht mit dem Uno auf keinen Fall mehr.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    28.05.2018
    Beiträge
    45
    Ich brauche Hilfe beim Zählen! Ehrlich jetzt!!
    Ich erhalte meine Zahlenwerte ja aus der ISR mit dem Drehencoder erzeugt.

    Variable:
    volatile int Encoderwert;

    setup:
    attachInterrupt(digitalPinToInterrupt(2),Encoderre ad,CHANGE);

    ISR:
    Code:
    void Encoderread(){
    
      if(digitalRead(2)!= digitalRead(3))
      Encoderwert++;
      
     
      
     else Encoderwert--;
    Was da rauskommt ist nun DEZIMAL.
    Ich möchte aber eine Zeit im 10 Minuten Takt hoch und runter zählen lassen.
    Statt 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, usw.
    Also 10, 20, 30, 40, 50, 1:00, 1:10, 1:20, usw bis 23:50 vor- und rückwärts.
    (Den Doppelpunkt und die letzte Null kann ich vor der Ausgabe im Display hinzufügen. Also 110, 120, 130, geht)

    Kann ich das in der ISR direkt umrechnen lassen?
    So etwas wie "if (Encoderwert==6) Encoderwert=10" geht nicht...

    Im Netz gibt es haufenweise Online Rechner "dezimal<>senär" , aber es gibt immer nur die schriftliche Umrechnung in der
    Schulversion davon. Wie macht man das beim Arduino am besten?
    Geht das direkt in der ISR überhaupt?
    Muss die Variable dann "nur "int" sein und nicht noch "volatile"?

    Ich habe echt das Brett vorm Kopf. Ich denke auch (laut Mister Spok) nur zweidimensional, habe ich so den Verdacht.
    Meine Sketche leben immer nur von "wenn, "dann". Auch wenn alles bis auf das zählen perfekt funktioniert.

    Da fehlt mir die Grundausbildung auf dem Gebiet.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo Wolle62,
    Zitat Zitat von Wolle62 Beitrag anzeigen
    Was da rauskommt ist nun DEZIMAL.
    Ich möchte aber eine Zeit im 10 Minuten Takt hoch und runter zählen lassen.
    Statt 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, usw.
    Also 10, 20, 30, 40, 50, 1:00, 1:10, 1:20, usw bis 23:50 vor- und rückwärts.
    (Den Doppelpunkt und die letzte Null kann ich vor der Ausgabe im Display hinzufügen. Also 110, 120, 130, geht)
    bin nicht sicher, ob ich Dich richtig verstehe. Aber angenommen, die Dezimalzahlen 50, 60, 70 ... werden als Minuten angenommen, die in eine Stunden- und Minutenangabe umgerechnet werden sollen, würde ich es zunächst mit Division und der Modulo Funktion versuchen:

    Stunden = Minuten / 60 (da eine Stunde 60 Minuten hat, zeigt der ganzzahlige Anteil vom Ergebnis die Stunden)
    Restminuten = Minuten % 60 (In Restminuten landet durch "modulo" der ganzahlige Rest der Division von Minuten/60)

    Das Ergebnis in Stunden kann Nachkommastellen enthalten. Manche Programmiersprachen lassen da eine Ganzzahl zu, bei der automatisch die Nachkommastellen der Division abgeschnitten werden. Also gleich die ganzzahlige Stundenzeit enthält.

    Dann Ausgabe mit "Stunden : Restminuten"

    Kann ich das in der ISR direkt umrechnen lassen?
    So etwas wie "if (Encoderwert==6) Encoderwert=10" geht nicht...
    Die Rechnnung oben läßt sich in der ISR machen. Duch die Divisionen aber rechenintensiv und könnte zu zeitaufwendig sein. Müßtest Du ausprobieren. Ich bin weder C noch Arduino sprachig aber Variable, die in einer ISR benutzt werden, sollten wohl mit volatile deklariert werden? Schaden tut es nicht.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. Dreh-Encoder gibt "Rückschlag-Impuls" ab - wieso nur?
    Von t0bias im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 03.03.2014, 16:08
  2. Dreh-Encoder und Tasten gleichzeitig abfragen
    Von DerSchatten im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 13.05.2011, 20:16
  3. LCD-Display 128x64 mit dem Controler T6963c
    Von heri im Forum PIC Controller
    Antworten: 8
    Letzter Beitrag: 05.06.2007, 22:04
  4. Funktioniert der Pollin-Dreh-Encoder mit BASCOM?
    Von felack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 27.06.2006, 17:52
  5. Hyundai 128x64 LC-Display
    Von ShadowPhoenix im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 01.12.2005, 21:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests