EA DOG Display an SPI

OP #3394909
Lesenswert?

Hallo zusammen,

ich habe mich neulich im Rahmen meines neuesten Projektes
mit einem DOGM162x-A beschäftigt.
Da es mit der SPI Schnittstelle des ATmega ein kleines Timingproblem,
habe ich die Übertragung kurzerhand über Software emuliert.
Das Ergebnis kann sich im wahrsten Sinne sehen lassen.
Die DOG Serie von EA lässt sich sehr einfach über SPI ansteuern,
das Display kann in SPI Mode nur beschrieben werden, was die 
Programmierung
erheblich vereinfachte.
Ich habe eine PDF Datei ertsellt, wer Intersse hat kann diese
von meiner Homepage herunterladen.

Gruß Ralf

www.ihle-elektronik/Projekte/projekte.html
#3394945
Lesenswert?

@ Ralf Ihle (ritro)

>mit einem DOGM162x-A beschäftigt.

Nette LCDs.

>Da es mit der SPI Schnittstelle des ATmega ein kleines Timingproblem,

Was für eins?

>habe ich die Übertragung kurzerhand über Software emuliert.

Also SPI in Software.

>Das Ergebnis kann sich im wahrsten Sinne sehen lassen.
>Die DOG Serie von EA lässt sich sehr einfach über SPI ansteuern,

Warum nimmst du dann nicht die Hardware-SPI?

>Ich habe eine PDF Datei ertsellt, wer Intersse hat kann diese
>von meiner Homepage herunterladen.

Warum postest du das nicht als Anhang? Oder soll das Schleichwerbung 
sein?

>www.ihle-elektronik/Projekte/projekte.html

Fehler: Server nicht gefunden

Vielleicht eher so?

http://www.ihle-elektronik.de/Projekte/projekte.html

Aber wirklich toll ist dein Dokument nicht.
Gast #3394963
Lesenswert?

Hi

>Da es mit der SPI Schnittstelle des ATmega ein kleines Timingproblem,

Dog-Displays lassen sich wunderbar mit dem HW-SPI ansprechen. Vielleicht 
war es nur der falsche SPI-Mode.

>habe ich die Übertragung kurzerhand über Software emuliert.

Nichts Neues. Aber wenn du nicht die alten Gurken, wie ATMega8/16/32 
u.ä. benutzt, sondern neuere AVRs mit USART, kannst du die Displays auch 
mit der USART im SPI-Mode ansteuern.

MfG Spess
Gast #3394991
Lesenswert?

Hi

>Aber wirklich toll ist dein Dokument nicht.

Kürzer und schneller geht es auch:
1
                      .if use_Soft_SPI
2

3
                      push r16
4
                      ldi r16,8
5
out_spi10:            cbi dog_port,dog_si
6
                      cbi dog_port,dog_clk
7
                      sbrc r18,7
8
                      sbi dog_port,dog_si
9
                      lsl r18
10
                      nop
11
                      sbi dog_port,dog_clk
12
                      nop
13
                      dec r16
14
                      brne out_spi10
15
                      cbi dog_port,dog_clk
16
                      pop r16
17
                      ret
18

19
                      .endif

MfG Spess
#3394998
Lesenswert?

Ralf Ihle schrieb:

> Die DOG Serie von EA lässt sich sehr einfach über SPI ansteuern,
> das Display kann in SPI Mode nur beschrieben werden, was die
> Programmierung
> erheblich vereinfachte.

Na nun, aber das hat einen riesen Nachteil. Wenn die Daten nicht mehr 
ausgelesen werden können, muss das komplette Bild im Speicher gehalten 
werden. Für die kleinen AVRs ist das oft schon zuviel. Falls man alles 
richtig ausgerichtet an den 1-Byte Pixelreihen schreibt (z.B. Text in 
genau der Höhe), kann man das umgehen. Aber allgemein kann man so keine 
freie Grafik auf das Display malen, weil der bisherige Inhalt der Bytes 
die man neu schreibt, nicht mehr bekannt ist.

gruß cyblord
#3395005
Lesenswert?

Ich finds ok, wenn du etwas veröffentlichst. Aber bitte nicht so
1
      ldi rlcd,0x39 ;funktion:n=1, 5x7 dot,is=1

magische Konstanten, wie hier die 0x39, haben im Code so nichts 
verloren. Und davon gibt es noch jede Menge anderer in deinem Code.
Um für jemanden anderen nützlich zu sein, musst du da noch Arbeit in 
deinen Code investieren.

> Da es mit der SPI Schnittstelle des ATmega ein kleines Timingproblem,

Da man die SPI Schnittstelle im ATmega konfigureren kann, kommt mir das 
ein wenig seltsam vor. Kannst du da ein paar Worte darüber verlieren, 
warum es da deiner Meinung nach ein Problem gibt?
Gast #3395015
Lesenswert?

Hi

>Na nun, aber das hat einen riesen Nachteil. Wenn die Daten nicht mehr
>ausgelesen werden können, muss das komplette Bild im Speicher gehalten
>werden. Für die kleinen AVRs ist das oft schon zuviel. Falls man alles
>richtig ausgerichtet an den 1-Byte Pixelreihen schreibt (z.B. Text in
>genau der Höhe), kann man das umgehen. Aber allgemein kann man so keine
>freie Grafik auf das Display malen, weil der bisherige Inhalt der Bytes
>die man neu schreibt, nicht mehr bekannt ist.

Der TO hat das aber für ein DOGM162 geschrieben. Das ist ein 2x16 
Textdisplay. Also 32Byte. So viel Platz ist in der kleinsten Hütte. Für 
die Grafik-Dogs nimmt man halt einen passenden AVR.

MfG Spess
#3395022
Lesenswert?

Karl Heinz schrieb:

> Um für jemanden anderen nützlich zu sein, musst du da noch Arbeit in
> deinen Code investieren.

Ich muss mich korrigieren, nachdem ich den Code weiter durchgesehen 
habe.
Du musst noch MASSIV Arbeit in diesen Code investieren.

Ganz ehrlich: wenn ich Code zukaufen müsste, und ich würde diesen Code 
sehen, dann würde ich mir eine andere Software Bude suchen. Dieser Code 
ist noch nicht mal Durchschnitt.

Nimms nicht persönlich. Das soll kein Angriff auf deine Person sein. 
Aber die Defizite in der Sodtwareentwicklung und Programmierung sind 
mehr als deutlich zu sehen. Ich weiß schon, dass du stolz auf deinen 
Code bist. Aber wenn Lieschen Müller die Steinschlagschäden im Autolack 
mit Nagellack überpinselt, dann ist das für sie ok. Aber für eine 
Autowerkstatt ist das indiskutabel.
#3395125
Lesenswert?

Ralf Ihle schrieb:
> Karl Heinz schrieb:
>> ldi rlcd,0x39 ;funktion:n=1, 5x7 dot,is=1
>
> Diese Konstante stammt aus dem Datenblatt des ST7036!!!!

Soll ich mir die Doku raussuchen?

Da ist mit Sicherheit eine Bitkodierung im Spiel. Das kann ich dir auch 
ohne die Doku studiert zu haben auf den Kopf zusagen.
Jedes gesetzte 1-Bit in 0x39 bedeutet etwas. Das eine Bit ist for 5*7 
zuständig, das andere für n gleich 1 (was auch immer n für eine 
Bedeutung hat), etc. etc.

> Und die ist bestimmt nicht magisch.

Doch ist sie.
#3395128
Lesenswert?

@ Ralf Ihle (ritro)

>kann schon sein, dass ich deiner Meinung nach Defizite habe.
>Aber der Code funktioniert und werde nichts ändern.

Muss du auch nicht. Aber wer schon was veröffentlichen will, muss auch 
die Kritik einstecken.

>Noch zu den Defiziten, ich habe das Programmieren von einem
>Lehrer der alten Schule gelernt.

Baumschule?

>> Aber wirklich toll ist dein Dokument nicht.

>Was erwartest du, es nur eine kurze Abhandlung und wenn es
>jemanden interessiert o.k und wenn nicht ists auch gut.

Es ist nix als schnell hingeschmiert. Interessiert keine Sau. Die, die 
wissen wie es geht interessiert es nicht, weil es schlechter Stil und 
niedrige Niveau ist. Die, die noch was lernen möchten, können es nicht, 
aus den gleichen Gründen.

Ein Stück Datenmüll mehr im Internet.
#3395130
Lesenswert?

Ralf Ihle schrieb:

> kann schon sein, dass ich deiner Meinung nach Defizite habe.
> Aber der Code funktioniert und werde nichts ändern.
> Noch zu den Defiziten, ich habe das Programmieren von einem
> Lehrer der alten Schule gelernt.

Ich hoffe du musstest nichts dafür bezahlen.
Ne, im ernst. Ich sagte schon: das ist nichts gegen dich persönlich. 
Aber objektiv betrachtet ist der Code, sowie der Software Aufbau 
scheisse.
Da sind Code wiederholungen drinnen, die einfach nicht sein müssen - die 
auch nichts bringen ausser den Code in die Länge zu ziehen.

Dafür hast du zwar in den Funktionen brav die benutzten Register 
gesichert (kein Einwand dagegen), aber auf das SREG hast du wieder mal 
vergessen. Dabei wäre das sogar das wichtigere Register, welches man 
sichern sollte, wenn man drauf aus ist, dass die Funktionen möglichst 
wenig den Aufrufer beeinflussen.
#3395153
Lesenswert?

Karl Heinz schrieb:

> Da sind Code wiederholungen drinnen, die einfach nicht sein müssen - die
> auch nichts bringen ausser den Code in die Länge zu ziehen.

Nur mal als Beispiel:

Deine Ausgabefunktionen.
Du gibst nacheinander 8 Bit aus. Schön. Aber wie machst du es? Du hast 2 
Code Pfade, je nachdem ob ein 0 Bit oder ein 1 Bit auszugeben ist. In 
jedem der beiden Pfade wird getrennt die SCK Leitung getoggelt und der 
Bitzähler dekrementiert.
Wozu?
Das einzige, worin sich die beiden Code Pfade unterscheiden ist, dass 
einmal die Datenleitung auf 1 gezogen wird und einmal auf 0 gezogen 
wird. Danach sind die beiden Pfade wieder gleich und können in einen 
einzigen zusammengeführt werden. Dein Flussdiagramm zeigt das ganz 
deutlich. Im Flussdiagramm kann man auch abschätzen, dass sich durch 
diese Änderung die Funktion enorm vereinfachen würde. Denn dann fallen 
da einige Komponenten weg, wie zb die 2 Prüfungen, ob die 8 Bit schon 
abgearbeitet sind.


Ein anderes Beispiel:
Du hast 2 Funktionen. Eine für die Ausgabe eines COmmandos. Eine für die 
Ausgabe von Daten.
Worin unterscheiden sich die beiden Funktionen? Einzig und alleine 
darin, dass in dem einen Fall ein Commando Bit gesetzt wird und im 
anderen Fall nicht. Danach sind beide Funktionen wieder identisch.
D.h. die beiden Funktionen haben eine gemeinsame Komponente: die Ausgabe 
von 8 Bit. Zieh diesen Teil heraus, mach eine eigene Funktion daraus, 
die sowohl von der COmmando-Ausgabe als auch von der Datenausgabe 
angesprungen wird und der Code vereinfacht sich schon wieder.

Alleine mit diesen beiden Änderungen, die nicht schwer und sowas von 
naheliegend sind, wirst du in diesem Teil deines Codes über den Daumen 
gepeilt 60% des Codeumfangs los. Und das OHNE das darunter die 
Verständlichkeit des Codes leidet. Ganz im Gegenteil.
#3395160
Lesenswert?

Ralf Ihle schrieb:
.
> Meine art zu Programmieren ist vieleicht auch nicht elegant, aber
> meine Programme funktionieren und das ist das wesentliche.

Ne das war vor 30 Jahren vielleicht mal so. Hauptsache klein (ist bei 
durch reduntanten Code leider nicht gegeben) und läuft auf dieser einen 
Maschine, von einem Profi bedient und eingestellt.
Heute kommt es vor allem auf guten Code an, Wartbarkeit, 
Erweiterbarkeit, Portabilität, Lesbarkeit).
Grade wenn man den Code veröffentlicht. Im stillen Kämmerlein ists 
natürlich grad egal, da sind dann evt. nur die eigenen Ansprüche im weg.

gruß cyblord
#3395167
Lesenswert?

Ralf Ihle schrieb:

> Meine art zu Programmieren ist vieleicht auch nicht elegant, aber
> meine Programme funktionieren und das ist das wesentliche.

Wie schon gesagt.
Für Lischen Müller ist es ok, Steinschlagschäden im Lack mit Nagellack 
zu überpinseln. Wer aber als Autowerkstatt auftritt, an den werden 
höhere Ansprüche gestellt.

Du trittst als Elektronik und µC Spezialist firmenmässig auf. Da stelle 
ich höhere Ansprüche.
Wobei, unter uns Klosterschwestern, die Dinge die ich hier bis jetzt 
angekreidet habe, die würde ich auch von Lieschen Müller verlangen, wenn 
sie mir die Lackreparatur als 'für den den es interessiert' anpreist.


Ich komm mit der Kritik ja nicht, damit ich dich in Grund und Boden 
stampfe. Wie gesagt, nimms nicht persönlich. Nimm es als Ansporn und 
Anregung, was man besser machen kann.
OP #3395249
Lesenswert?

Karl Heinz schrieb:
> Du hast 2 Funktionen. Eine für die Ausgabe eines COmmandos. Eine für die
> Ausgabe von Daten.
> Worin unterscheiden sich die beiden Funktionen? Einzig und alleine
> darin, dass in dem einen Fall ein Commando Bit gesetzt wird und im
> anderen Fall nicht. Danach sind beide Funktionen wieder identisch.

Ist einleuchtend, über diese konstruktive Kritik bin
ich dir dankbar.

Gruß Ralf

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