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
@ 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.
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
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
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
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?
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
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
M. B. schrieb: > @cyblord > > Das 162 ist kein Grafikdisplay... Aussage (und mein Zitat davon) sprach von "Die DOG Serie". gruß cyblord
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
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
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
Ralf Ihle schrieb: > ich habe das Programmieren von einem > Lehrer der alten Schule gelernt. Webdesign wohl auch ;-)
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
@ 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.
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.
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
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
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
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
Meine art zu Auto zu fahren ist vielleicht auch nicht elegant, aber ich komme immer an und das ist das Wesentliche.
Ämf schrieb: > aber ich komme immer an und das ist das Wesentliche. Nein, ist es nicht. Wie Du fährst, das ist das Wesentliche.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.