Forum: Compiler & IDEs DOGM - 163 Initialisierung +5V SPI


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.
von Basti S. (m3teor)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich sitze hier schon seit 3 Tagen und versuche ein DOGM163 Display mit 
+5V und im SPI- Mode mit einem ATmega32 zu initialisieren aber es will 
einfach nicht klappen.

1 Frage:
Brauch eine Hintergrundbeleuchtung um Zeichen am Display zu erkennen ?

2 Frage:
Ich benutze die ISP Schnittstelle um meinen ATmega32 zu programmieren, 
kann es sein das das der Fehler ist.

Pinbelegung meiner Schaltung:

PB7 = SCK       -->  Pin29  = CLK
PB5 = MOSI      -->  Pin28  = SI
PB1     -->  Pin 39 = RS
PB0     -->  Pin 38 = CSB

Ich glaube meine Display Initialisierung ist nicht in Ordnung !
Vielleicht hat ja jemand einen Passenden Code für mich ?

Danke schon mal :)

Anbei das Projekt als .rar Datei
  -  Schaltplan
  -  Quellcode .c .h
  -  Layout

Mit freundlichen Grüßen

von Christian D. (chris83)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe mal eine Ansteuerungsroutine für das Display geschrieben, siehe 
Anhang.
Diese läuft bei mir schon längere Zeit einwandfrei.

Ich habe die Pins mal soweit angepasst, allerdings musst du in der 
LCD_DOGM_SPI.h noch die richtige Frequenz bei F_CPU eintragen, mit 
welcher dein Controller läuft.

Grüße
Chris

von Basti S. (m3teor)


Lesenswert?

@chris83

Danke erstmal, und Respekt für die schön übersichtliche Routine.
Leider funktioniert es noch immer nicht obwohl ich die Frequenz meines 
Quarzes angepasst habe.
Ist die Initialisierung für ein 3 Zeilen Display, das im 5V mode 
Betrieben wird ?

Und noch eine allgemeine Frage zu deiner lcd_string Funktion, deine 
while schleife Endet indem sie das Zeichen "\0" bekommt ?

Dann muss der Befehl also so lauten ?
1
 lcd_string("Hello World!\0");



Vielleicht hat ja noch jemand anders eine Idee um zu einer Lösung zu 
kommen?

MfG
m3teor

von Christian D. (chris83)


Lesenswert?

Ah sorry, eben gesehen ist für 3.3V
Du musst folgendes Ändern:

#define LCD_BIAS_SET        0x1D
#define LCD_POWER_CONTROL      0x50
#define LCD_FOLLOWER_CONTROL            0x6C
#define LCD_CONTRAST_SET      0x7C

Die Angaben befinden sich in der .h datei.
So sollte es für 5V initalisiert werden.

das \0 ist das Abschlusszeichen eines String in C.
Es wird aber wenn du ein String über "String Eingabe" eingibts 
automatisch vom Compiler hinzugefügt.

Grüße
Chris

von Basti S. (m3teor)


Angehängte Dateien:

Lesenswert?

@chris83

So jetzt hab ich es mit den Werten kann man das Display initialisieren.
Eine schnellere Lösung hätte ich nicht bekommen können.

Danke :)

MfG
m3teor

von Christian D. (chris83)


Lesenswert?

Man hilft doch gerne :)

Die LCD-Routine ist von den Funktionen her kompatibel zu der Routine aus 
dem Forum hier.

Somit kann durch den Austausch von der .c und .h einfach ein  HD44780 
oder kompatibles Display verwendet werden.

Grüße
Chris

von Dennis B. (dennis_b)


Angehängte Dateien:

Lesenswert?

Ich habe einen ATmega8A und habe versucht ein Hallo Welt aus meinem 
DOGM163 raus zu bekommen.. Leider vergebens.

Habe die Ports auf die meine angepasst und es Compiliert sich soweit und 
aufspielen ist auch kein Problem.

Habe es auch über SPI und 5V verdrahtet.

Bin noch relativ neu in der µC Materie und komme an der stelle leider 
nicht weiter. Vielleicht kann mir hier ja jemand helfen.

MfG

: Bearbeitet durch User
von Daniel C. (cecky)


Lesenswert?

Schaltplan und vollständiges Programm?

von Düsendieb (Gast)


Lesenswert?

der obige Code ist für den Mega32

Hier ist was für den Mega88

Beitrag "EA DOGM162 an SPI"

von Düsendieb (Gast)


Lesenswert?

PORT_SS |= (1 << PIN_SS);  //SPI Slave select ausschalten!

Das war damals mein Problem gewesen. Ohne diese Zeile ging es nicht.

von Daniel C. (cecky)


Lesenswert?

Düsendieb schrieb:
> der obige Code ist für den Mega32
Woher willst du das wissen? Alles was Dennis angehängt hat war die 
LCD-Lib und die sollte für einen Mega8 passen was die Pins angeht:
#define LCD_SPI_SI    PB3
#define LCD_SPI_SCK   PB5
#define LCD_SPI_CS    PB0

Den Rest seines Programms hat er uns leider veheimlicht.

von Dennis B. (dennis_b)


Lesenswert?

Oh da brauch ich noch viel mehr? Ich hätte gedacht für ein einfaches 
Hallo Welt würde dieses schon reichen... :-/

Stecke leider noch nicht so tief in der Materie... Einfaches LED 
Blinken, Tasten usw. bekomme ich ganz gut hin. Nur hier hänge ich 
irgendwie auf dem Schlauch.
Gibt es ein Tut oder ähnliches zu diesem Thema, was ich bis jetzt immer 
gefunden habe schien mir immer sehr unvollständig.


MfG

von Daniel C. (cecky)


Lesenswert?

Dennis Blubb schrieb:
> Oh da brauch ich noch viel mehr? Ich hätte gedacht für ein einfaches
> Hallo Welt würde dieses schon reichen... :-/

Naja, irgenwo mußt du die Funktionen in der main deines Programms ja 
auch mal aufrufen.

von Dennis B. (dennis_b)


Lesenswert?

Stimmt das macht sinn, danke. Mache mich mal dran. Hoffe bekomm das 
gescheit auf die reihe :D

Eigentlich kann ich in die LCD_DOGM_SPI.c die main funktion mit einbauen 
oder?


Habe die um LCD_DOGM_SPI.c folgendes erweitert, doof nur das das Dispaly 
nach dem Brennen des ATmega8a dunkel bleibt. Oder spielt es eine Rolle 
ob es ein Invertiertes Display ist? DogM163 S-A
1
int main(void)
2
{
3
  lcd_init();
4
  char* string = "Hallo Welt :-)";
5
6
  lcd_string(string);
7
8
  while (1)
9
  {
10
    asm volatile ("nop");
11
  }
12
  return 0;
13
}
MfG

: Bearbeitet durch User
von Daniel C. (cecky)


Lesenswert?

Irgendwie scheint heut zu Tage keiner mehr Lust zu haben einem Fehler 
mal selbst auf den Grund zu gehen. Also ein letzter Versuch zur 
Selbsthilfe:

Wird der Code auch ausgeführt? Bevor du noch fragst wie man das testen 
kann, lass mal eine LED in der while im Sekundentakt blinken.
Dann siehst du ob der Code auch ausgeführt wird, und ob dein Takt 
richtig ist.

Ansonsten, solange du kein vollständiges Programm und keinen Schaltplan 
lieferst bin ich erst mal raus.

von Ich (Gast)


Lesenswert?

oder Du schließt wie da beschrieben an und spielst das Programm auch ein

Beitrag "EA DOGM162 an SPI"

von Dennis B. (dennis_b)


Angehängte Dateien:

Lesenswert?

Habe alles so angeschlossen wie 
Beitrag "EA DOGM162 an SPI"
hier beschrieben... Programm an den ATmega8A angepasst sollte laut Atmel 
Studio 6.1 aus DDB0 DDRB0 machen usw.
Dann noch eine blinkende LED eingefügt um zu schauen ob das Programm 
ausgeführt wird...
LED Blinkt - LCD zeigt nichts an.

Im Anhang alle 3 Dateien.

Danke schon mal für eure Hilfe!
MfG

von jonas biensack (Gast)


Lesenswert?

Erstmal benutzt du unnötigerweise überall viel zu große Datentypen, das 
macht man auf so kleinen Buden nicht.
1
unsigned int i=0;

Mit i zählst du nur bis 31, dafür reicht ein uint_8t locker aus.
Also immer vorher den Datentyp bestimmen und nicht einfach alles mit 
einem rießen int abklatschen.
1
uint_8t i = 0;

Desweiteren vermisse ich den Aufruf deiner Ausgabefunktion Disp_Char in 
einer Schleife um den Bildschirmspeicher LCD auszugeben. Das ist alles 
noch ein rießen murks und vollkommen klar dass da nichts ausgegeben 
wird.
Erfülle doch erstmal eine Mindestanforderung, dass du generell Zeichen 
darstellen kannst.

Gruß Jonas

von jonas biensack (Gast)


Lesenswert?

Sorry, so ist richtig:
1
uint8_t i = 0;

von jonas biensack (Gast)


Lesenswert?

Ich sehe gerade beim zweiten Blick du hast die Hauptschleife dafür 
benutzt, na so kann man es auch machen, aber das macht es nur unnötig 
kompliziert. Man würde doch wenn man schon einen Bildschirmspeicher 
nutzt auch eine Funktion update_lcd oder änliches erwarten, die den 
Bilschirmspeicher dann aufs Display überträgt. Das würde ich nicht mit 
in die Hauptschleife reinbauen. Da blickt doch bald keiner mehr durch.

Gruß Jonas

von Düsendieb (Gast)


Lesenswert?

jonas biensack schrieb:
> rießen murks und vollkommen klar dass da nichts ausgegeben
> wird.

mit diesem "Murks" wird aber auf meinem EA Dog was angezeigt.

Ist doch für ein Testprogramm wurscht, ob da zu viele Ressourcen 
verballert werden.

@ Dennis
entspeck mal das Main Programm, damit Jonas es überblickt.

von Daniel C. (cecky)


Angehängte Dateien:

Lesenswert?

@ Dennis

da ich hier noch mein Steckbrett mit meinem DOGM-163 rumstehen hatte, 
hab ich den Code von hier 
(Beitrag "Re: DOGM - 163 Initialisierung +5V SPI") nochmal getestet. 
Ergebnis siehe Bild. Code hab ich auch nochmal mit drangehängt. 
Funktioniert Out-Of-The-Box.

von Dennis B. (dennis_b)


Lesenswert?

Vielen Dank für eure Bemühungen, ich werde es morgen oder nächstes 
Wochenende Testen bin leider nächste Woche auf Montage... :-/

Könnte ich den ATmega8A durch einen 16A austauschen ohne am Code was 
ändern zu müssen?
Vielleicht hat mein 8A auch einen weg....

MfG

von Dennis B. (dennis_b)


Lesenswert?

Seltsam ist habe PB0&1 testweise mit einer LED bestückt und beide 
abwechseln blinken lassen, läuft.... jetzt wüsste ich echt gern mal 
wieso weshalb das kack LCD  nicht läuft. Werde nachher mal ein 
Schaltplan machen und euch den mit reinstellen... verstehe es nicht...


Danke schon mal für eure Hilfe bis jetzt.
MfG

von Dennis B. (dennis_b)


Angehängte Dateien:

Lesenswert?

Hab mal für das Display und für den ATmega 8A einen Schaltplan 
angehangen. Habe meine Schaltung auch nach diesen noch einmal 
Kontrolliert.

MfG

von Daniel C. (cecky)


Lesenswert?

Laut "Schaltplan" sind PB3 und PB5 verkreuzt.

Dogm.png:
PB3 - SCK
PB5 - MOSI

Atmega.png
PB3 - MOSI
PB5 - SCK

So wird das nix

von Dennis B. (dennis_b)


Lesenswert?

Oh mein Fehler beim Plan erstellen... :-/ hab es natürlich richtig rum 
gemacht.
Auf doof hab ich sie auch mal getauscht... Aber hat alles nicht 
geholfen... Jetzt werde ich mir mal ein neues Dogm Ordern... Vielleicht 
ist das ja platt... hab sonst leider keine möglichkeit es zu testen..

MfG

von jo (Gast)


Lesenswert?

Naja Dennis,

dann mach's halt wie du willst.

>jonas biensack schrieb:
>> rießen murks und vollkommen klar dass da nichts ausgegeben
>> wird.

>mit diesem "Murks" wird aber auf meinem EA Dog was angezeigt.

Hab ich hier ja auch geschrieben, das es funktionieren kann.

>Ich sehe gerade beim zweiten Blick du hast die Hauptschleife dafür
>benutzt, na so kann man es auch machen, aber das macht es nur unnötig
>kompliziert. Man würde doch wenn man schon einen Bildschirmspeicher
>nutzt auch eine Funktion update_lcd oder änliches erwarten, die den
>Bilschirmspeicher dann aufs Display überträgt. Das würde ich nicht mit
>in die Hauptschleife reinbauen. Da blickt doch bald keiner mehr durch.

Es ging mir auch mehr darum die früh ab schon mal einen Hinweis zu 
geben, wie man bestimme Programmiertechnische Probleme organisiert.

Man entkoppelt keine iterativen Prozesse und übergibt das Inkrementieren 
der Ausgabe der Mainschleife. Was soll das bringen? Was ein Scheiss.
Sorry.

Gruß Jonas

>Gruß Jonas

von Dennis B. (dennis_b)


Lesenswert?

Von oben das habe ich ja auch wieder verworfen und nutze das von Daniel 
C. da dies mit Foto beweis läuft und das erstmal mein Hauptanliegen ist.
Ich wollte ein laufendes Programm um es dann nachvollziehen und 
verstehen kann.
Prgrammieren tu ich mit Atmel Studio 6.2.

Ich bin erst wieder am Anfang des Programmierens.
Ich habe ein Projekt was ich gern als Leitfaden nehmen würde:

Ein LCD z.b. das DOGM 162/163 später vielleicht ein Grafisches.
Temperatur und Luftdruck sollen ausgelesen werden über einen ST20m 
Tempfühler und der Luftdruck über einen MPX5700AP mit je Min Max 
Anzeige.

Da ich dieses als Ziel habe bleibe ich auch beim Programmieren am Ball, 
was bei meinen früheren Anläufen nie wirklich geklappt hat durch das 
fehlende Ziel.

Jonas danke für einen Tip würde mich aber freuen wenn du es mehr für 
einen Anfänger erklären könntest.

Ich bin dankbar über eure bisherige Hilfe!

MfG Dennis

: Bearbeitet durch User
von Dennis B. (dennis_b)


Angehängte Dateien:

Lesenswert?

So nach einer längeren Pause, Beruf bediengt melde ich mich mal zurück.

Nachdem ich jetzt einen Fehler gefunden habe wieso es nicht geht (China 
USBasp), habe ich mir einen Atmel avrisp mk2 gekauft.

Wenn ich jetzt einen neuen ATmega8A in der Schaltung Programmiere mit 
dem Code von Daniel C. s.o..
Pin Belegung und Beschaltung ist sorgfältig Kontrolliert.
Nach dem erfolgreichen Programmieren ist das Display zwar irgendwie an, 
es wird aber nichts angezeigt. :-/

Programmiert hab ich mit dem AVRISP mkII mit 125kHz.

Wenn ich nach dem Programmieren die 5V kurz Trenne zum "neustart", 
bleibt das Display aus.

MfG

von Daniel C. (cecky)


Lesenswert?

Dennis Blubb schrieb:
> Pin Belegung und Beschaltung ist sorgfältig Kontrolliert.
> Nach dem erfolgreichen Programmieren ist das Display zwar irgendwie an,
> es wird aber nichts angezeigt. :-/

Ich kann nicht erkennen welcher DOGM163-Typ es ist, aber es ist nicht 
das von dir erwähnte DOGM163 S-A. Wenn du schon ein Backlight 
verwendest, dann benutze es auch. Keine Ahnung ob bei dem Typ ohne 
Backlight was zu lesen ist. Außerdem könntest du auch noch mit dem 
Kontrast rumspielen.
Und abschließen kann es hilfreich sein, das Startupdelay zu erhöhen.
Variiert bei mir je nach Spannungsquelle.

von Dennis B. (dennis_b)


Lesenswert?

Habe ein neues W-A besorgt, ablesen kann man bei dem Typen auch ohne 
backlight - hatte es schon ein paar mal das beim programmieren des 
Controllers mir wilde Kombinationen an Symbolen angezeigt worden sind.

werde heute Abend noch mal alles neu verdrahten und es mit dem delay 
ausprobieren.

Vielen dank für eure Hilfe bis hierhin schon mal.

MfG

von Dennis B. (dennis_b)


Angehängte Dateien:

Lesenswert?

Also entweder bin ich zu doof oder ich habe irgendwas übersehen...

Habe das Programm so genommen wie es mit Foto Beweis läuft, in 
AtmelStudio 6.2 in ein neues GCC C Executable Projekt eingefügt und mit 
dem AVRISP mkII auf den ATmega8A geflasht.
Ergebnis siehe in dem Thread oben.

Jetzt hab ich die BOOTUP_US von 30, Stück für Stück bis auf 300 
angehoben geflasht - das gleiche Ergebnis.

Hab es jetzt mal mit meinem geupdateten USBasp und AVR Burn-O-Mat 
probiert, das Ergebnis habe ich Angehangen. Der Curser blinkt nur...
Mache ich den Strom ab und wieder dran, bleibt es wieder dunkel und es 
tut sich nichts... :-/


MfG und danke schon mal für eure Hilfe.

: Bearbeitet durch User
von Dennis B. (dennis_b)


Lesenswert?

Allein wie kann es schon sein das man mit 2 verschiedenen Programmern 2 
verschiedene Ergebnisse bekommt?

Weiß da denn keiner weiter? Das kann doch nur ein Detail sein.?!

Wie kann das Programm in der gleichen Konfiguration denn bei mir nicht 
richtig laufen?

MfG

von Christoph K. (chriskuku)


Lesenswert?

Auch wenn der Strang schon recht alt ist, frage ich trotzdem noch mal 
Folgendes hier. Open gibt es die LCD_DOGM_SPI.h. Die enthält einige 
#defines, u.a. folgende Zeilen:
1
// Set Function --------------- 0b001xxxxx
2
#define LCD_FUNCTION_FOR_INI    0x30
3
#define LCD_FUNCTION_8uint8_t_2LINE_IT0 0x38
4
#define LCD_FUNCTION_8uint8_t_2LINE_IT1  0x39
5
#define LCD_FUNCTION_8uint8_t_2LINE_IT2  0x3B

Was sollen diese eingestreuten 8uint8_t_2LINE Dinger? Zwar sind Namen 
Schall und Rauch, aber was ist damit gemeint? Das sieht mir mehr nach 
einem "Editierunfall" aus.

: Bearbeitet durch User
von Christian D. (chris83)


Lesenswert?

Tja was soll ich sagen :)
Die sind unabsichtlich darein gerutscht.
Bevor ich damals diese Werte als Defines gemacht habe, waren es 
Variablen.
Ist wohl zuviel Copy&Past ;)

Grüße
Christian

von Christoph K. (chriskuku)



Lesenswert?

Christian D. schrieb:
> Tja was soll ich sagen :)
> Die sind unabsichtlich darein gerutscht.
> Bevor ich damals diese Werte als Defines gemacht habe, waren es
> Variablen.
> Ist wohl zuviel Copy&Past ;)

OK, was wären denn die sinnvollen Namen, um zu verstehen, was LINE_IT0 
bedeutet? Ich fange gerade erst an, mich mit dem DOGM 163 Display 
herumzuschlagen und bin auf diesen Beitrag gestoßen.

Leider sehe ich noch nichts auf dem Display. Habe es an einen STM32F103 
(blue pill) angeschlossen und kämpfe noch mit der Initialisierung.
Muß ich den CSB (CS) mit jedem Command toggeln?

Habe auch mal die für STM32F103 modifizierte dogm.c angehängt. Sie ist 
zwar noch im statu nascendi aber vielleicht sieht jemand schon 
irgendeinen krassen Fehler?

Nach den ersten 8 Commands kommen dann nach 50ms noch die restlichen 3 
der insgesamt 11 Stück.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Hat sich erledigt. Habe den Aufbau noch mal mit einem anderen Display 
gemacht, noch mal das Steckbrett neu aufgebaut und plötzich geht's. 
Hatte vielleicht irgendeinen Wurm in der Verdrahtung des Displays, das 
ich ja vorher im 4bit-Mode betrieben hatte.

Beitrag #7413192 wurde von einem Moderator gelöscht.
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.