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
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
@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
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
@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
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
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
PORT_SS |= (1 << PIN_SS); //SPI Slave select ausschalten! Das war damals mein Problem gewesen. Ohne diese Zeile ging es nicht.
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.
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
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.
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
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.
oder Du schließt wie da beschrieben an und spielst das Programm auch ein Beitrag "EA DOGM162 an SPI"
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
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
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
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.
@ 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.
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
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
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
Laut "Schaltplan" sind PB3 und PB5 verkreuzt. Dogm.png: PB3 - SCK PB5 - MOSI Atmega.png PB3 - MOSI PB5 - SCK So wird das nix
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
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 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
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
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.
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
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
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
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
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
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
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.
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.