Forum: Mikrocontroller und Digitale Elektronik DOGM162_163_4WIRE_SPI_3.3V_5.0V_Initialize_ASM


von Klaus D. (rodo38)



Lesenswert?

Geschätztes Forum,

da ich für das EA DOGM162W-A keine Assembler Software gefunden habe, 
habe ich mich bemüht, sie anhand des Datenblattes zum DOGMxxx und des 
Datenblattes zum Controller ST7036 selbst zu schreiben.
Weil ich damit ein Problem hatte, wurde mir in diesem Forum von einem 
Herrn namens Frank geholfen, s. den Beitrag

Beitrag "LCD DOGM162W-A CDGRAM"

Ich möchte Frank hier nochmals sehr für seine Mühe danken.

Um die Sache etwas zu vervollständigen, habe ich mir noch ein
EA DOGM163W-A gekauft. Die mit 7-Zip komprimierte Datei 
<DOGM162_163_4WIRE_SPI_3.3V_5.0V_Initialize.zip> enthält folgende 
Software:

4WIRE_DOGM162_3_3V
4WIRE_DOGM162_5_0V
4WIRE_DOGM163_3_3V
4WIRE_DOGM163_5_0V
SPI_DOGM162_3_3V
SPI_DOGM162_5_0V
SPI_DOGM163_3_3V
SPI_DOGM163_5_0V

Alles wurde in Studio 4 erstellt.

Die für die 4 Bit Verdrahtung geschriebenen Initialisierungen sind 
jeweils eine Übersetzung des Programms aus dem Datenblatt des ST7030 
Seiten 41 und 42, die für die SPI Verdrahtung geschriebenen 
Initialisierungen sind nahezu 1:1 Umsetzungen der Beispiele aus dem 
DOGMxxx Datenblatt.

Die Software beschränkt sich aber nicht auf die reinen 
Initialisierungen. Nach dem Einschalten der Versorgungsspannung 
erscheint für 2.5 s der Hinweis:

After this: pls.
 wait patiently

Danach werden die Werte von C0 bis C5 (s. Datenblatt) von 000000 bis 
111111 inkrementiert und die LCD_init immer neu aufgerufen.
Es dauert recht lange, bis diese Werte groß genug sind, um auf den 
Displays zu erscheinen, da jeder neue Kontrast 0.5 s angezeigt wird. Bei 
den 6 Cx Werten sind das 32 s, beim 1. Mal entsprechend länger, also 
bitte geduldig warten. Der Vorgang wiederholt sich dann immer wieder. 
Mit der Taste kann das Inkrementieren gestoppt werden, so dass man sich 
den optimalen Wert für den Kontrast leicht merken kann.

Sehr stark abhängig ist der Kontrast von den Werten Rab0, Rab1 und Rab2. 
Bei der Versorgungsspannung von 3.3V beträgt die Ausgangsspannung der 
charge pump am Pin 24 der LCDs gut 6V. Auch diese Spannung hat einen 
starken Einfluß auf den Kontrast. Mittels des Lastwiderstandes R3 wird 
er auf ca. 5V herabgesetzt. Ob der optimale Wert für R3 abhängig ist vom 
jeweiligen Exemplar des LCD, das weiß ich nicht, vermute es aber.

Unter

 \DOGM162_163_4WIRE_SPI_3.3V_5.0V_Initialize\Texte, Bild, 
Schaltplan\Texte ASM\*.asm

stehen die mittels NP++ fürs Drucken optimierten Assembler Texte. Sie 
wurden jeweils zum PDF Printer geschickt. Das Ergebnis steht unter

 \DOGM162_163_4WIRE_SPI_3.3V_5.0V_Initialize\Texte, Bild, 
Schaltplan\Texte PDF\*.pdf

Wie NP++ veranlasst werden kann, fürs Drucken einigermaßen optimale 
Dateien zu erzeugen, habe ich früher mal beschrieben unter

Beitrag "ASM Code drucken mit NP++"

Eine kleine Anwendung für das DOGM162W-A, ein sehr einfaches DVM, ist zu 
finden auf

Beitrag "DVM mit DOGM162W-A, ATMEGA8A, AVRASM"

Ich würde mich freuen, wenn diese Informationen für jemanden nützlich 
wären.

Grüße

Klaus

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

>da ich für das EA DOGM162W-A keine Assembler Software gefunden habe, ...

Kann ich nicht wirklich glauben.

>habe ich mich bemüht, sie anhand des Datenblattes zum DOGMxxx und des
>Datenblattes zum Controller ST7036 selbst zu schreiben.

Habe ich auch vor längerer Zeit gemacht. Allerdings als eine Bibliothek 
(Anhang) ohne das ganze drumherum des Hauptprogramms.

Mein Ansatz war etwas anders:

- Alle DOGM-Displays
- Verschiedene SPI-Ansteurungen (USART im SPI-Mode fehlt noch)

Ist nicht vollständig, aber mehr habe bisher nicht gebraucht.

MfG spess

PS: An deinen Textausgaben solltest du noch etwas arbeiten.

von chris (Gast)


Lesenswert?

Hey erstmal ne top Arbeit!!!!!!!!!!!!!!!!

1. am besten unter Codesammlung einstellen

2. wie Spess schreibt als Bibliothek/Includedatei erstellen

3. Schnittstellenanpassung vornehmen und in Datei auskommentieren
   dann hat immer eine Art Beispiel wie der Ersteller es meint
   z.B. PortB = LCD_Port
        ddrb  = LCD_DDR
        pinB  = LCD_Pin
   und man kann es an jeden Controller beliebig anpassen ohne etwas in 
der
   Grunddatei zu ändern.

4. Textdatenbank erstellen als eigene Datei denn kann man diese auch
   gleichzeitig für die anderen Includes nutzen.

5. den Zeichenzähler im Textout auf $ff vergleichen lassen
   z.B. Text: db "Hallo",$ff

das wären so noch Anmerkungen aber sonst find ick did Klasse ;-)

von spess53 (Gast)


Lesenswert?

Hi

>5. den Zeichenzähler im Textout auf $ff vergleichen lassen
>   z.B. Text: db "Hallo",$ff

Null-Terminierte Strings sind eigentlich üblicher.

MfG Spess

von Klaus D. (rodo38)


Angehängte Dateien:

Lesenswert?

Hallo spess53,

danke für Deinen Kommentar.

Deine Assembler Kenntnisse sind den meinen soweit überlegen, dass sich 
jeder Vergleich verbietet.

Deinen Text dog_text.asm habe ich zur dog_text.pdf gemacht und gedruckt. 
Ich bin sicher, vieles lernen zu können. Die Datei dog_text.pdf hänge 
ich hier an.

Du hast Dich auch mit dem DOGM081 beschäftigt. Das habe ich bewusst 
vermieden weil ich keins besitze. Wenn ich etwas nicht ausprobieren 
kann, dann schleichen sich bei mir garantiert Fehler ein.

Deine vielen .if / .endif Statesments sind für mich hochinteressant. Ich 
hatte überlegt, ob ich nur ein Programm statt der 8 Programme schreibe 
und die Auswahl der jeweils richtigen Programmteile bzw. Parameter durch 
das Setzen von Brücken von Inputs nach GND realisiere. 3 Brücken hätten 
dafür ausgereicht. Diese Technik hätte doch zumindest teilweise Deinen 
.if / .endif entsprochen, wenn ich Deinen Programmtext insofern richtig 
verstehe. Weil das Kopieren von Text und die sehr überschaubaren jeweils 
notwendigen Änderungen aber recht wenig Arbeit gemacht haben, habe ich 
es bei den 8 Programmen belassen.

Vieles in Deinem Programmtext verstehe ich (evt. noch) nicht. Beispiel: 
ganz am Anfang steht

SPI_Masterinit: sbi lcct1,lc_cs ; Outputs setzen

1. müssten lcct1 und lc_cs nicht irgendwie zB. mittels .equ definiert 
werden?
2. sind das zwei verschiedene Outputs? Das würde bedeuten, dass man mit 
sbi mehr als einen Output auf 1 setzen kann. Das ist zB. der Assembler 
Hilfe von Studio 4 nicht zu entnehmen.

Und so gibt es viele weitere Fragen.

Falls Du bereit sein solltest, mir solche Fragen zu beantworten: Meine 
E-Mail Adresse ist rodo38@gmx.net. Die in mikrocontroller.net vorhandene 
Adresse ist nicht mehr gültig. Ich kann sie aber auch nicht durch die 
gültige ersetzen.

Schönen restlichen Sonntag

Klaus

von Klaus D. (rodo38)


Lesenswert?

Hallo chris,

vielen Dank für das Lob.

Hallo chris, hallo spess53,

Eure Kommentare sind gekommen, als ich die Antwort auf den ersten 
Kommentar von spess53 geschrieben habe. Vielen Dank dafür.

Manches von dem, was chris geschrieben hat, verstehe ich schon, anderes 
leider nicht. Ich bin aber begierig, zu lernen.

Ich denke, auf diesem Weg ein vernünftiges Frage - Antwort Spiel zu 
betreiben, das wäre wohl kaum möglich.

Solltest Du, chris, bereit sein, Fragen von mir zu beantworten: Meine 
E-Mail Adresse ist rodo38@gmx.net.

Diesen Beitrag unter Codesammlung einzustellen sollte ich evtl. erst ins 
Auge fassen, wenn Fachleute wie Ihr nicht mehr so viele Fehler und 
Probleme sehen.

Nochmals vielen Dank für Eure Zeit und Eure Mühe

Klaus

von spess53 (Gast)


Lesenswert?

Hi

>Deine Assembler Kenntnisse sind den meinen soweit überlegen, dass sich
>jeder Vergleich verbietet.

Mindestens ein lustige Stelle hast du mit Sicherheit noch nicht bemerkt.

>Du hast Dich auch mit dem DOGM081 beschäftigt.

Nein. Aber die Angaben aus dem Datenblatt stimmen halbwegs. Eigentlich 
habe ich immer nur leicht Anpassungen am Kontrast gebraucht.

>Deine vielen .if / .endif Statesments sind für mich hochinteressant.

Das Ganze wird in der dog_text.inc konfiguriert. Die dog_text asm wird 
nicht angefasst. Für ein Projekt arbeite ich mit einer Kopie der 
dog_text.inc im Projektverzeichnis.

Es gibt erst mal generell für jede Funktion generell ein '.if use_xyz' 
Statement mit dem diese Funktion ein oder abgeschaltet (nicht 
assembliert) wird.

Andre Statements beziehen sich auf unterschiedliche Prozessoren und/oder 
verschiedene SPI-Modes.

>Vieles in Deinem Programmtext verstehe ich (evt. noch) nicht. Beispiel:
>ganz am Anfang steht

>SPI_Masterinit: sbi lcct1,lc_cs ; Outputs setzen

>1. müssten lcct1 und lc_cs nicht irgendwie zB. mittels .equ definiert
>werden?

Ja. Siehe dog_text.inc

>2. sind das zwei verschiedene Outputs? Das würde bedeuten, dass man mit
>sbi mehr als einen Output auf 1 setzen kann. Das ist zB. der Assembler
>Hilfe von Studio 4 nicht zu entnehmen.

Welche Stelle meinst du? Das Ganze ist unter Studio 4 geschrieben. (Was 
sonst).

MfG Spess

von Klaus D. (klaus38)


Lesenswert?

Hallo spess53,

ja, so ist das, wenn man wie ich zu dumm ist, die Beiträge intelligenter 
Menschen (womit natürlich Du gemeint bist), vollständig durchzulesen.

Im Zusammenhang mit Deiner Datei 'dog_text.inc' ist der Programmtext in 
'doc_text.asm' gar nicht mehr geheimnisvoll und auch für mich gut 
verständlich.

Natürlich ist Dein Programm deutlich professioneller als meins. Trotzdem 
werde ich für meine Person dabei bleiben, in einem vergleichbaren Fall 
auch weiterhin eine Anwendung dafür zu schreiben. Ich kenne mich halt 
und weiß, dass ich nie an Alles denke, wenn ich es nicht ausprobiere.

------------------------------------------------------------------------

Hallo chris,

soweit ich das bis jetzt verstehe, werden Deine Punkte 1. bis 4. von den 
Beiträgen von spess53 vom 07.06.2015 18:26 'dod.text.asm' und 
'doc_text.inc' optimal erfüllt.

Dein Punkt 5. macht mir aber Kopfzerbrechen. Ich glaube, dass ich genau 
das tue, nur verwende ich statt $FF die Dezimalzahl 255. Soviel ich zu 
wissen glaube, ist es aber gleichgültig, ob man eine der Formen BIN, HEX 
oder DEZ benutzt zur Darstellung einer Zahl. Ob das auch für OKT gilt, 
das weiß ich nicht.

Vermutlich habe ich nicht verstanden, was Du mir sagen willst.

------------------------------------------------------------------------

An Euch Beide: Ganz herzlichen Dank für Eure Mühe, Eure Zeit und das an 
mich vermittelte Wissen,

Klaus

von chris (Gast)


Lesenswert?

Hallo,

Klaus D. schrieb:
> soweit ich das bis jetzt verstehe, werden Deine Punkte 1. bis 4. von den
> Beiträgen von spess53 vom 07.06.2015 18:26 'dod.text.asm' und
> 'doc_text.inc' optimal erfüllt.

jo das stimmt wohl, ich bezog mich aber auf deine Routinen.

Klaus D. schrieb:
> Dein Punkt 5. macht mir aber Kopfzerbrechen. Ich glaube, dass ich genau
> das tue, nur verwende ich statt $FF die Dezimalzahl 255. Soviel ich zu
> wissen glaube, ist es aber gleichgültig, ob man eine der Formen BIN, HEX
> oder DEZ benutzt zur Darstellung einer Zahl. Ob das auch für OKT gilt,
> das weiß ich nicht.

Ohhhh ja habs übersehen und hast Recht. Die Form der Zahlendarstellung 
ist nur zu einer begrenzten Art egal. Vor allem wenn man einzelne Bits 
setzen muss bietet es sich an. z.B.:

.equ LCD_portX = Portd
.equ Enable    = 6
.equ Zeile1    = $00+16

LCD_enable:
sbi    LCD_PortX,  Enable ; Enable High
nop           ; kurz warten
nop
nop
cbi    LCD_PortX,  Enable ; Enable High
ret

Hierbei hat man den Vorteil man deklariert es sich in der Hauptdatei und 
kann es auf sein Projekt zügig anpassen.

Aus deiner Textausgabe werde ich nicht richtig schlau. Denn es reicht 
doch die Unterroutine TextOut einmal anzulegen und bei dem Aufruf des 
Textes
1. Adresse des LCD laden und zum Lcd schicken an dem der Text beginnen 
soll
2. TextDatenbankAdresse laden
3. Textout aufrufen
4. Ende Sub

werbe1:  ldi    temp1, Zeile1       ;LCD-Adresse
  rcall     lcd_DDR_AdrX        ;senden
  ldi     ZH,high(out0*2)
        ldi     ZL,low(out0*2)      ;DB-Txt laden
        rcall     txt_out             ;Txt ->> LCD senden
  ret

von Klaus D. (klaus38)


Lesenswert?

Hallo chris,

Du hast mit Deiner Kritik an meinem Programmierstil absolut recht. 
Insbesondere werfe ich mir selbst vor, dass ich nahezu gleiche 
Prozedur-Texte immer wieder schreibe, atatt sie nur einmal zu schreiben 
und dann immer wieder mit den jeweils geänderten Parametern zu benutzen. 
Copy und Paste sind halt so einfach.

Früher war dieser Stil aber auch hilfreich: Z.B. bei Modernisierungen 
von Elektroniken von Materialprüfmaschinen habe ich die dafür zu 
ändernden Programmteile (in VB) in einem ähnlichen Stil geschrieben. Der 
war dann so einfach zu verstehen, dass die Programmierer des jeweiligen 
Kunden praktisch niemals Nachfragen hatten.

Hier muß ich noch an mir arbeiten.

Vielen Dank für die Kritik, insbesondere, wenn sie so fundamentiert ist 
wie Deine und dann auch noch mit bestens verständlichen Vorschlägen 
angereichert ist, wie es auch besser ginge.

Klaus

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.