Hallo zusammen,
ich habe ein Problem mit einer Skalenanzeige eines DOG-M Displays. Zur
Anzeige eines Sensorwerts soll in der 2.Zeile eben eine Skala
eingerichtet angezeigt werden.
Ich erzeuge dafür eine eigenes Zeichen mit folgender Funktion (ich weiß,
das würde auch eleganter gehen):
void set_character_DOGM162 (uint8_t characterNumber, uint8_t data0,
uint8_t data1, uint8_t data2, uint8_t data3, uint8_t data4, uint8_t
data5, uint8_t data6, uint8_t data7)
{
Disp_Command (0x38);
Disp_Command (0x40+(characterNumber<<3));
Disp_Char(data0); //Pixel die gesetzt werden sollen
Disp_Char(data1);
Disp_Char(data2);
Disp_Char(data3);
Disp_Char(data4);
Disp_Char(data5);
Disp_Char(data6);
Disp_Char(data7);
Disp_Command (0x39); // Instruction Set Tabelle 1
}
Im Hauptprogramm frage ich es dann folgenermaßen ab:
if (Leitwert != 0)
{
Disp_Command(0x80 + 0x40); // Cursor auf 2. Zeile, Spalte 1
Skala = round(Leitwert/3.875); //3.75
if (Skala > 16)
{
Skala = 16;
}
for (i=0; i<Skala ; i++)
{
Disp_Char(5);
}
...
}
Das Problem ist, dass es, manchmal zu einen eigenartiges Effekt kommt.
Und zwar wird, wenn die Skala weiter ausschlägt, die erste Zeile mit
befüllt, allerdings nicht richtig, sondern nur mit minimalen Kontrast,
siehe auch Bild anbei. Setze ich anstatt des eigenen Zeichens ein
Standard-Zeichen, erscheint in der ersten Zeile nichts, auch bei
größeren Ausschlägen.
Hat jmd. ne Ahnung, welcher Effekt das sein könnte?
Danke für die Antwort. Müsste ich das Layout dann anpassen, um das
Übersprechen der Segmentleitungen zu verhindern? Wenn die Skala nur zur
Hälfte ausschlägt, dann sieht man nichts in der oberen Zeile.
Stefan schrieb:> Danke für die Antwort. Müsste ich das Layout dann anpassen, um das> Übersprechen der Segmentleitungen zu verhindern?
Du sprichst von den Datenleitungen, die Segmentleitungen verlaufen ja
nur auf dem Display - zwischen dessen Controller und LCD.
> Wenn die Skala nur zur> Hälfte ausschlägt, dann sieht man nichts in der oberen Zeile.
Da kannst du nicht viel machen außer der Kontrast zu verringern, lass
mal in der 1. Zeile was anzeigen dann fällt es weniger auf.
Sascha
Sascha W. schrieb:> Da kannst du nicht viel machen außer der Kontrast zu verringern, lass> mal in der 1. Zeile was anzeigen dann fällt es weniger auf.
Ich habe den Kontrast kleiner gemacht, tatsächlich zeigt sich der Effekt
nun weniger. Gegen das Übersprechen der Segmentleitungen kann man
mittels eingefügter Bauteile oder per Software nichts machen?
Es ist schon eigenartig, dass sich dieser Effekt bei unterschiedlichen
Display-Inidviduen mal zeigt, mal nicht.
Hallo Stefan,
diese kontrastarme, graue Darstellung ist nicht normal für die EA DOG
Displays. Es sieht so aus, als würden in der 1. Zeile andere,
selbstdefinierte Zeichen stehen, die aber dort immer wieder gelöscht
oder durch Leerzeichen überschrieben werden.
Auch der extrem schwach sichtbsre Cursor (oder ein selbstdefinierter
Block) am Ende der 1.Zeile ist merkwürdig.
Halte dein Programm doch mal an (Breakpoint) und schau was dann auf dem
Display steht.
Ralph
Es ist eben eigenartig, dass es bei Ersatzdisplay, die ich einbaue nicht
zu diesem Effekt kommt. Manchmal, meistens direkt nach dem flashen einer
neue Firmware gibt es keine Probleme, dann nach einen Neustarts des
Systems taucht es wieder auf und geht nicht mehr weg. An der Sowftware
kann es doch auch nicht liegen, sonst würde es ja auf allen Displays
nicht funktionieren. Ein Einzeldefekt kann es aber auch nicht sein, da
ich das Problem schon bei mehreren neuen Displays hatte.
Ich bin wirklich ratlos...
Und was passiert, wenn du bei einem Display das diesen Effekt nicht
zeigt den Kontrast hochdrehst (absichtlich leicht übersteuerst)?
... und mal den Breakpoint einbauen ...
Ralph
Ralph T. schrieb:> ... und mal den Breakpoint einbauen ...
ich leider aktuell keine Möglichkeit für einen Hardware-Debug, oder wie
könnte man das sonst durchführen?
Ralph T. schrieb:> Und was passiert, wenn du bei einem Display das diesen Effekt nicht> zeigt den Kontrast hochdrehst (absichtlich leicht übersteuerst)?
Dann wird alles einfach nur dunkler, und der Effekt noch stärker
sichtbar.
Stefan schrieb:> ich leider aktuell keine Möglichkeit für einen Hardware-Debug, oder wie> könnte man das sonst durchführen?
Indem Du anstelle eines Breakpoints im Code da eine Endlosschleife setzt
und auch Interrupts deaktivierst. Watchdog muß dann natürlich auch
abgeschaltet sein.
Nop schrieb:> Indem Du anstelle eines Breakpoints im Code da eine Endlosschleife setzt> und auch Interrupts deaktivierst. Watchdog muß dann natürlich auch> abgeschaltet sein.
Danke für den Hinweis, ich hab's folgenermaßen verwirklicht:
for (i=0; i<Skala ; i++)
{
Disp_Char(5);
if (i==12)
{while(1){};}
}
In der oberen Zeile erscheinen leider auch die Zeichen in den gleichen
Spalten als in der unteren Zeile.
Ich habe das selbstkreierte Zeichen jetzt noch angepasst, um den
Kontrast innerhalb einer Zelle zu reduzieren.
Allerdings ist das auch keine Lösung, da in der oberen Zeile wieder ein
Schatten entsteht. Der Kontrast ist auch schon auf fast niedrigster
Stufe.
Lässt sich dieser Effekt auch nicht verhindern?
Die Erste Zeile muss an dieser Stelle leider leer bleiben.
Olaf schrieb:> Stimmt deine Betriebsspannung?
Müsste stimmen, habe in der Display-Initialisierung 5V eingestellt, und
tatsächlich verwende ich auch 5V.
spess53 schrieb:> Wie sieht denn deine Initialisierung genau aus?
// Veränderliche Variablen
//*******************************************
#define F_CPU 8000000UL //Clockspeed in Hz
#define DDR_SPI DDRB // DD-Register des SPI-Ports
#define DD_MOSI DDB3 // Port/Pin des MOSI
#define DD_SCK DDB5 // Port/Pin des SCK
#define DD_RS DDRB // DDR von RS
#define PORT_RS PORTB // Port an dem RS ist
#define PIN_RS PB1 // Pin an dem RS ist
#define DD_CSB DDRB // DDR von CSB
#define PORT_CSB PORTB // Port an dem CSB ist
#define PIN_CSB PB0 // Pin an dem CSB ist
#define VOLTAGE 5 // Voltage auf 5 oder 3 Volt
#define CONTRAST 0x75 // Von 0x73 bis 0x7F Hexadezimal >>74
//*******************************************
void InitDisp(void)
{
PORT_RS &= ~(1 << PIN_RS); //low
_delay_ms(300);
int BIAS,PWR,FOLLOW;
if (VOLTAGE == 5)
{
BIAS = 0x1c;
PWR = 0x51;
FOLLOW = 0x6a;
}
else
{
BIAS = 0x14;
PWR = 0x55;
FOLLOW = 0x6d;
}
Disp_Command(0x39); // Function Set ; 8 Bit; 1Zeile, Istr.Tab 1 0x31
Disp_Command(BIAS); // Bias Set
Disp_Command(PWR); // Power Control
Disp_Command(FOLLOW); // Follower Control
Disp_Command(CONTRAST); // Kontrast setzten
Disp_Command(0x38); // Instruction Table 0 setzten 0x30
Disp_Command(0x0c); // Display ein, kein Cursor, kein Blinken
Disp_Command(0x01); // Disoplay löschen
_delay_ms(50); // Auf Display warten
Disp_Command(0x06); // Entry Mode set - Display wartet auf Eingabe
_delay_ms(25); // Auf Display warten
}
Stefan schrieb:> Ich habe das selbstkreierte Zeichen jetzt noch angepasst, um den> Kontrast innerhalb einer Zelle zu reduzieren.> Allerdings ist das auch keine Lösung, da in der oberen Zeile wieder ein> Schatten entsteht. Der Kontrast ist auch schon auf fast niedrigster> Stufe.
siehst du mit noch weniger dann nichts mehr?
Wenn ich mich recht erinnere war doch der Kontrast über 2 Register
einzustellen!
Sascha
Sascha W. schrieb:> Wenn ich mich recht erinnere war doch der Kontrast über 2 Register> einzustellen!
Ich habe noch ein wenig gegoogelt, da ist es auch nur mit einem Register
verwirklicht.
Stefan schrieb:> Sascha W. schrieb:>> Wenn ich mich recht erinnere war doch der Kontrast über 2 Register>> einzustellen!>> Ich habe noch ein wenig gegoogelt, da ist es auch nur mit einem Register> verwirklicht.
zeig doch mal deinen Code zur Initialisierung. Du hast das Display mit
8-Bit angeschlossen?
Sascha
Es handelt sich um das DOG-M 162, die anderen Display waren vom selben
Typ.
Aber weil das Problem immer wieder mal auftaucht, kann's auch kein
Defekt sein.
Stefan schrieb:> Disp_Command(0x39); // Function Set ; 8 Bit; 1Zeile, Istr.Tab 1 0x31> Disp_Command(BIAS); // Bias Set> Disp_Command(PWR); // Power Control> Disp_Command(FOLLOW); // Follower Control> Disp_Command(CONTRAST); // Kontrast setzten> Disp_Command(0x38); // Instruction Table 0 setzten 0x30> Disp_Command(0x0c); // Display ein, kein Cursor, kein Blinken> Disp_Command(0x01); // Disoplay löschen> _delay_ms(50); // Auf Display warten> Disp_Command(0x06); // Entry Mode set - Display wartet auf Eingabe> _delay_ms(25); // Auf Display warten
BIAS ist wo definiert?
PWR ist wo definiert?
FOLLOW ist wo definiert?
Spess53 hat Dich nach der Initialisierung gefragt oder? Warum rückst Du
nicht komplett damit heraus?
Ich denke, es geht ihm um den Unterschied zwischen der 3,3V und der 5V
Initialisierung ...
Stefan schrieb:> int BIAS,PWR,FOLLOW;>> if (VOLTAGE == 5)> {> BIAS = 0x1c;> PWR = 0x51;> FOLLOW = 0x6a;> }> else> {> BIAS = 0x14;> PWR = 0x55;> FOLLOW = 0x6d;> }Dieter F. schrieb:> Spess53 hat Dich nach der Initialisierung gefragt oder? Warum rückst Du> nicht komplett damit heraus?
BIAS, PWR und FOLLOW sind ja im Code schon drin und definiert, in
Abhängigkeit von der Spannung.
Es ist natürlich an sich nicht unvernünftig gewisse mögliche Ursachen
auszuschliessen. Aber es ist auch vernünftig sich klarzumachen, auf
welchen Annahmen diese Schlussfolgerungen beruhen und sie zu verwerfen,
wenn es nötig wird. Das wird dann nötig, wenn nach Ausschluss alles
Unmöglichen nichts mehr übrig bleibt. (Arthur Conan Doyle lässt grüssen
und den Spruch "Nichts ist trügerischer, als eine offensichtliche
Tatsache" finde ich auch sinnig).
Also mal ganz von vorne und sieh bitte erst einmal von Einwänden gegen
die Fragen ab. Wenn hier jemand absoluten Unsinn von Dir verlangt, gibt
es ohnehin einen kollektiven Aufschrei:
1. Schaltplan inklusive Stromversorgung
2. Foto vom Aufbau
3. Vollständiger Programmcode (der das Problem zeigt) (Ggf. nicht
notwendige Teile entfernen (Anwendung) aber das Ergebnis muss
compilierbar und lauffähig sein).
Schön wären:
Link auf das Datenblatt vom Display.
Und da Du verschiedene Displays hast von denen einige gehen und andere
nicht, noch Informationen über die Charge (ggf. Fotos von je einem
Display das geht und das nicht geht, von allen Seiten - mindestens alles
was Text oder Zahlen sind).
Stefan schrieb:> Es handelt sich um das DOG-M 162
Ja aber was für eines? Sieht aus wie ein w-a, die sind bekannt für
Kontrastprobleme, deswegen nehm ich lieber die grünen, auch wenns nicht
so hip ist.
Hast Du wahrscheinlich einfach eine schlechte Charge erwischt...
@Stefan,
in meinem Datenblatt steht für die Follower Settings 0x69 (5V) + 0x6D
(3.3V).
Das kannst du mal noch probieren, die Einstellung beeinflusst die
Bereitellung der verschiedenen LED-Spannungen.
Sascha
Sascha W. schrieb:> in meinem Datenblatt steht für die Follower Settings 0x69 (5V) + 0x6D> (3.3V).> Das kannst du mal noch probieren, die Einstellung beeinflusst die> Bereitellung der verschiedenen LED-Spannungen.
Das ändern auf 0x69 setzt bei nur den Kontrast deutlich nach unten, ich
muss dann in den Kontrat-Einstellungen auf max. gehen, damit dsa Display
gut aussieht. Der Effekt ist immer noch da.
Timm T. schrieb:> Ja aber was für eines? Sieht aus wie ein w-a, die sind bekannt für> Kontrastprobleme, deswegen nehm ich lieber die grünen, auch wenns nicht> so hip ist.
Ich habe das weiße in Verwendung.
Stefan,
ich möchte nochmal auf die Hardware eigehen:
(1) "..verschiedene Displays, manche gehen, manche nicht" verwendest du
dabei immer die gleiche Ansteuer-Elektronik? Evtl. sogar das gleiche
Board?
(2) sind die Displays gesockelt oder eingelötet?
(3) kannst du den Schaltplan posten ?
(4) versorgst du das Disoplay mit 3,3V oder 5V?
(4) welche Spannungen misst du an den Pins 26-27 (bitte direkt am
Display oben messen).
(5) welche Spannung zwischen den Pins 24 und 27?
Ralph.
Ralph T. schrieb:> (1) "..verschiedene Displays, manche gehen, manche nicht" verwendest du> dabei immer die gleiche Ansteuer-Elektronik? Evtl. sogar das gleiche> Board?
Es handelt sich dabei immer um die selbe Ansteuerelektronik. Das Board
ist dabei unterschiedlich, der Effekt kommt aber immer wieder vor. Es
ist gut möglich, dass es sich auch um einen Fehler in der
Ansteuerelektronik handelt.
(2) sind die Displays gesockelt oder eingelötet?
Prinzipiell gesockelt, und in der Tat habe ich schon öfter festgestellt,
dass hier die Kontaktierung nicht so zuverlässig ist. Bei eingelöteten
Displays tritt das Problem aber auch auf.
Ralph T. schrieb:> (3) kannst du den Schaltplan posten ?
Schaltplan anbei
Ralph T. schrieb:> (4) versorgst du das Disoplay mit 3,3V oder 5V?
5V
Ralph T. schrieb:> (4) welche Spannungen misst du an den Pins 26-27 (bitte direkt am> Display oben messen).> (5) welche Spannung zwischen den Pins 24 und 27?
Kann ich leider erst später messen, die Werte liefere ich nach.
Mir erschliesst sich im Moment nicht, wofür du einen 1k Widerstand in
MOSI hast. Dem Display macht die Programmiererei über ISP nichts aus, es
zeigt höchstens ein wenig Müll an, aber die Flanken werden dabei nicht
besser, zumal SCL solch einen Widerstand nicht hat.
Mein Vorschlag wäre, den 1k durch eine Brücke zu ersetzen, oder in beide
Leitungen zum Display einen gleich grossen Widerstand zu setzen. Das
können aber auch 100 Ohm oder so sein - nötig sind sie nicht, da MOSI am
DOGM nie zum Ausgang wird.
Da die Pins des Displays sehr dünn sind (0,5x0,3mm), sind "normale"
Buchsenleisten nicht geeignet (0,64x0,64mm). Gut passen IC-Sockel, die
gibt es auch 1-reihig. Bekannt als "Präzisionssockel" oder "gedrehte
Sockel".
Könnte nämlich sein dass das Display zwar scheinbar läuft, sich aber
fremdversorgt. da passieren manchmal merkwürdige Dinge und für die
fremdversorgenden Ein-/Ausgänge ist es langfristig ungesund.
Ralph T. schrieb:> Könnte nämlich sein dass das Display zwar scheinbar läuft, sich aber> fremdversorgt. da passieren manchmal merkwürdige Dinge und für die> fremdversorgenden Ein-/Ausgänge ist es langfristig ungesund.
Was ist mit fremdversorgt gemeint?
Das nicht alle Pins, die an 5V dran sein müssten, auch wirklich
verbunden sind?
Stefan schrieb:> Ok, Danke für den Hinweis. Interessant ist es eben auch, das es nicht> immer auftritt, und bei einem neuen Display es teils gar nicht auftritt.Ralph T. schrieb:> Könnte nämlich sein dass das Display zwar scheinbar läuft, sich aber> fremdversorgt.
wenn das Erste nicht defekt ist scheint das Zweite unempfindlicher
gegen Störung zu sein.
Ich tippe auf ungenügende Stromversorgung oder klaren
Anschaltungsfehler.
EA DOG hatte ich auch mal, sind die VCC wirklich nah und genug gepuffert
bzw. mit Abblockkondensatoren versorgt.
Stefan schrieb:> Was meinst du mit Anschaltungsfehler?
na was wohl, nicht die richtige VCC / GND erwischt, nicht alle,
schlechte Kabel Lötverbindung usw.
oder sowas
Ralph T. schrieb:> Da die Pins des Displays sehr dünn sind (0,5x0,3mm), sind "normale"> Buchsenleisten nicht geeignet (0,64x0,64mm). Gut passen IC-Sockel, die> gibt es auch 1-reihig. Bekannt als "Präzisionssockel" oder "gedrehte> Sockel".
Die habe ich bei meinen EA DOG Versuchen genutzt und hatte nie Probleme,
das jemand anderes benutzt muss ich erst mal realisieren.
Ralph T. schrieb:> Da die Pins des Displays sehr dünn sind (0,5x0,3mm), sind "normale"> Buchsenleisten nicht geeignet (0,64x0,64mm). Gut passen IC-Sockel, die> gibt es auch 1-reihig. Bekannt als "Präzisionssockel" oder "gedrehte> Sockel".
Wären diese hier auch geeignet?
Der Lochdurchmesser beträgt hier allerdings 0,7mm. Die sind aber auch
"gedreht".
http://cdn-reichelt.de/documents/datenblatt/C140/DS_MPE_115.pdf
Nein, passen nicht - sind für einen quadratischen Pin mit 0,64mm
Kantenlänge gemacht (siehe Datenblatt). Da machen die Pins von Display
keinen ordentlichen Kontakt.
Hi
>da hast du nun grad die billigste gezeigt, diese meide ich wo ich kann>ich muss bei Sockel und Kotakte nicht sparen um jeden Preis!
Na und? Ich habe damit schon etliche DOG-Displays kontaktiert. Für meine
Display-Testplatinen habe nur solche Fassungen in Einsatz. Und die
Fassungen dieses Typs auf meinem STK500 sind nach 15jährigem Gebrauch
immer noch so fest, das ich ich die ICs aushebeln muss. Die mit den
gedrehten hätte ich in der Zeit mindestens 2..3 mal wegen ausgeleierter
Kontakte wechseln müssen.
MfG Spess
spess53 schrieb:> Und die> Fassungen dieses Typs auf meinem STK500 sind nach 15jährigem Gebrauch
vielleicht gibt es dort unterschiedliche Qualitäten, ich habe mir diese
Nutzung dieser Kontakte vor über 30 Jahren abgewöhnt, sie sind einfach
auch mal gammelig geworden, vielleicht nicht wenn man die Erstbestückung
nie wieder anfässt, vielleicht bei optimaler Lagerung und Betrieb, aber
bei mir sind diese zur Fehlerquelle gewiorden, jedenfalls dieser Typ.
Mag sein das es unterschiedliche Qualitäten gibt die ich aber mit dem
Auge nicht sehe, deswegen nein für mich.