Forum: Mikrocontroller und Digitale Elektronik EA DOG Display an SPI


von Ralf I. (ritro)


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

von Falk B. (falk)


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.

von spess53 (Gast)


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

von spess53 (Gast)


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

von Peter D. (peda)


Lesenswert?


von Cyblord -. (cyblord)


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

: Bearbeitet durch User
von Karl H. (kbuchegg)


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?

von M. B. (Firma: TH Nürnberg) (ohmen)


Lesenswert?

@cyblord

Das 162 ist kein Grafikdisplay...

von spess53 (Gast)


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

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

M. B. schrieb:
> @cyblord
>
> Das 162 ist kein Grafikdisplay...

Aussage (und mein Zitat davon) sprach von "Die DOG Serie".

gruß cyblord

von Ralf I. (ritro)


Lesenswert?

Karl Heinz schrieb:
> Aber die Defizite in der Sodtwareentwicklung und Programmierung sind
> mehr als deutlich zu sehen.

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.

Gruß Ralf

von Ralf I. (ritro)


Lesenswert?

Karl Heinz schrieb:
> ldi rlcd,0x39 ;funktion:n=1, 5x7 dot,is=1

Diese Konstante stammt aus dem Datenblatt des ST7036!!!!
Und die ist bestimmt nicht magisch.

Gruß Ralf

von Ralf I. (ritro)


Lesenswert?

Falk Brunner schrieb:
> 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.

Gruß Ralf

von Cyblord -. (cyblord)


Lesenswert?

Ralf Ihle schrieb:
> ich habe das Programmieren von einem
> Lehrer der alten Schule gelernt.

Webdesign wohl auch ;-)

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Falk B. (falk)


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.

von Karl H. (kbuchegg)


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.

von Ralf I. (ritro)


Lesenswert?

cyblord ---- schrieb:
> Webdesign wohl auch

Meine Webseite ist vielleicht nicht die schönste und die beste
ich bin auch kein Webdesigner ich bin Elektroniker.
Meine art zu Programmieren ist vieleicht auch nicht elegant, aber
meine Programme funktionieren und das ist das wesentliche.

Gruß Ralf

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Cyblord -. (cyblord)


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

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Ämf (Gast)


Lesenswert?

Meine art zu Auto zu fahren ist vielleicht auch nicht elegant, aber
ich komme immer an und das ist das Wesentliche.

von radiostar (Gast)


Lesenswert?

Ämf schrieb:
> aber ich komme immer an und das ist das Wesentliche.

Nein, ist es nicht. Wie Du fährst, das ist das Wesentliche.

von Ralf I. (ritro)


Lesenswert?

Karl Heinz schrieb:
> Du trittst als Elektronik und µC Spezialist firmenmässig auf. Da stelle
> ich höhere Ansprüche.

Ich muss dich leider verbessern, ich trete nicht als µC Spezialist auf
µC sind mein Hobby und die Routine wird nicht zum Verkauf angeboten.

Gruß Ralf

von Ralf I. (ritro)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.