mikrocontroller.net

Forum: Projekte & Code Arduino Library für Electronic Assembly DOG Grafik Displays


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bernhard M. (bernhard84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Arduino Library für die Electronic Assembly DOG Grafik 
Displays geschrieben.

Bzw. ich habe die Library, die es vom Hersteller hier 
https://www.lcd-module.com/support/application-note/arduino-meets-ea-dog.html 
gibt, genommen, zusammengefasst, korrigiert und erweitert.

Meine Library gibt es auf github: 
https://github.com/generationmake/DogGraphicDisplay

Sie sollte vom Format auch soweit passen, dass man sie direkt in die 
Arduino-Software einbauen kann und auch die Beispiele an der richtigen 
Stelle erscheinen.

Die Library verwendet den intern Display-Speicher. Somit kann nicht auf 
jedes einzelne Pixel zugegriffen werden, sondern immer nur auf 8 
übereinanderliegende Pixel gleichzeitig und beim schreiben werden dann 
auch immer diese 8 überschrieben. Ich denke, das Prinzip ist bekannt, da 
es bei den meisten einfachen kleinen monochromen Displays so gehandhabt 
wird. Vorteil ist, dass man im Mikrocontroller weniger Speicher benötigt 
und nicht dauernd Daten zum Display gesendet werden müssen. 
Dementsprechend ist auch die Library ausgelegt, dass man nicht in jede 
Zeile schreiben kann, sondern immer nur beginnend bei jeder achten. EA 
bezeichnet das als Page und habe ich in der Library auch so beibehalten.

Meine Ergänzungen haben sich darauf beschränkt, dass ich die Library so 
umgeschrieben habe, dass sie nicht nur mit AVR, sondern zum Beispiel 
auch mit ESP32 oder SAMD controllern funktoniert. Außerdem habe ich die 
bisher getrennten Libraries für DOGM128/DOGM132 und DOGS102 in einer 
zusammengeführt, da die Controller ja sehr ähnlich sind. Schließlich 
habe ich die String-Funktion erweitert, dass der Text zum Beispiel auch 
invertiert oder zentriert dargestellt werden kann. Außerdem kann man bei 
den Strings eine bliebige Position (Offset, positiv, negativ) eingeben, 
sodass man längere Texte horizontal durch das Bild scrollen kann.

Zum Testen habe ich dann auch noch ein Arduino-Shield gebaut, das auch 
mit 3,3V Arduinos kompatibel ist. Die Daten dazu befinden sich hier: 
http://arduhmi.generationmake.de/

Über Kommentare, Anmerkungen und Fragen zur Library würde ich mich 
freuen.

Bernhard

Autor: Jo mei (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Bernhard M. schrieb:
> Über Kommentare, Anmerkungen und Fragen zur Library würde ich mich
> freuen.

Na gut:

- Eine Klassendefinition sollte einen Konstruktor und einen
Destruktor beinhalten, machen heutige Compiler scheinbar
selbst automatisch ohne äusseres Zutun ... früher wurde
der Programmierer dazu gezwungen (?). Den Konstruktor
(bzw. dessen Aufruf) könnte man dann auch zur Initialsierung
verwenden.

- die Sourcen-Formatierung ist miserabel, Blanks und Tabs
wild gemischt. Eine "anständige" Formatierung hat zwei oder
4 Leerzeichen pro Einrückung, und genau nullkommanull Tabs.
Tabs sind immer scheisse sobald die Öffentlichkeit an einer
Source teilhaben darf. Starke Einrückungen verlangen nach
einem immer breiteren Bildschirm. In der Beschränkung liegt
der Meister.

Besonders "nützlich" sind Tabs bei Funktionsdeklarationen:
  void view                (byte direction);

Ist das nicht toll?

Autor: Christoph M. (mchris)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
>- die Sourcen-Formatierung ist miserabel, Blanks und Tabs
>wild gemischt.

Auf GitHub sieht der Code ziemlich sauber aus( Lob ).
Man kann aber Autoformatfunktion der Arduino-IDE

ctrl-t

verwenden, um alles einheitlich zu kriegen.

Autor: Bernhard M. (bernhard84)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Guten Abend,

danke für die Anmerkungen.

Ich habe das jetzt soweit eingearbeitet. Alle Tabs sind jetzt durch zwei 
Leerzeichen ersetzt, so wie es bei Arduino üblich ist.

Außerdem habe ich Konstruktor und Destruktor eingebaut. Auch wenn sie 
nicht viel machen und bei Arduino wohl auch nicht so üblich sind.

Dafür habe ich noch eine begin- und eine end-Funktion eingefügt, so wie 
es bei Arduino üblich ist ( 
https://www.arduino.cc/en/Reference/APIStyleGuide ). Die 
initialize-Funktion kann damit wohl mittelfristig ersetzt werden.

Bernhard

Autor: Christoph M. (mchris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Insgesammt mach alles einen sehr sauberen, struktuierten Eindruck.

Was mich ein wenig wundert, ist die Klassendefinition im Header-File:
class dogGraphicDisplay

normalerweise sollten Klassen immer mit einem Großbuchstaben beginnen.

Autor: Bernhard M. (bernhard84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen Christoph,

da hast du natürlich recht. In dem Objektorientierten und 
Library-Schreiben bin ich halt noch nicht ganz so tief drin.

Ich habs geändert ...

Bernhard

Autor: Jo mei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard M. schrieb:
> Ich habe das jetzt soweit eingearbeitet.

Sehr gut. Ein Unterschied wie Tag und Nacht!

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.