Hallo zusammen,
ich versuche, meine Hardware mit ATxmega128A1 zu programmieren. Ich
benutze ein Display EADOM162W-A, 3.V, 4bit, parallel, ohne
LED-Hintergrundbeleuchtung. Wenn ich den Code hochlade, sehe ich nur
schwarze Kästchen, außerdem sehe ich in meinem Code Spannung am RS-Pin
immer hoch, E-Pin immer niedrig und D4-D7 auch niedrig. Die Spannungen
an diesen Pins schalten nur um, wenn ich sie explizit in 'int main' zum
Umschalten programmiere. Mein Code ist unten angehängt, ich würde mich
über jeden Vorschlag freuen. Ich danke Ihnen.
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
// Define LCD pins
#define LCD_E PIN0_bm // Enable (PC0)
#define LCD_RS PIN1_bm // Register Select (PC1)
#define LCD_D4 PIN3_bm // Data Bit 4 (PC3)
#define LCD_D5 PIN2_bm // Data Bit 5 (PC2)
#define LCD_D6 PIN5_bm // Data Bit 6 (PC5)
#define LCD_D7 PIN4_bm // Data Bit 7 (PC4)
// Helper macros
#define LCD_E_HIGH() (PORTC.OUTSET = LCD_E)
#define LCD_E_LOW() (PORTC.OUTCLR = LCD_E)
#define LCD_RS_HIGH() (PORTC.OUTSET = LCD_RS)
#define LCD_RS_LOW() (PORTC.OUTCLR = LCD_RS)
// Function Prototypes
void lcd_init();
void lcd_send_command(uint8_t cmd);
void lcd_send_data(uint8_t data);
void lcd_send_nibble(uint8_t nibble);
void lcd_print(const char *str);
void lcd_clear();
void lcd_set_cursor(uint8_t row, uint8_t col);
// Initialize the LCD
void lcd_init() {
// Configure LCD pins as outputs
PORTC.DIRSET = LCD_E | LCD_RS | LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7;
_delay_ms(50); // Wait for power stabilization
// Send initialization commands
lcd_send_command(0x39); // Function set: 2-line, extended
instruction set
_delay_ms(5);
lcd_send_command(0x14); // Bias set
_delay_ms(5);
lcd_send_command(0x55); // Power control: Booster ON, Contrast C5,
C4
_delay_ms(5);
lcd_send_command(0x6D); // Follower control: Voltage follower and
gain
_delay_ms(200); // Allow voltage follower to stabilize
lcd_send_command(0x74); // Contrast set (low bits)
_delay_ms(5);
lcd_send_command(0x38); // Function set: Normal instruction set
_delay_ms(5);
lcd_send_command(0x0C); // Display ON: Display ON, cursor OFF, blink
OFF
_delay_ms(5);
lcd_send_command(0x01); // Clear display
_delay_ms(10); // Wait for clear command to execute
lcd_send_command(0x06); // Entry mode set: Increment cursor, no
shift
_delay_ms(5);
}
// Send a command to the LCD
void lcd_send_command(uint8_t cmd) {
LCD_RS_LOW(); // Command mode
lcd_send_nibble(cmd >> 4); // Send high nibble
lcd_send_nibble(cmd & 0x0F); // Send low nibble
_delay_us(100); // Wait for the command to execute
}
// Send data to the LCD
void lcd_send_data(uint8_t data) {
LCD_RS_HIGH(); // Data mode
lcd_send_nibble(data >> 4); // Send high nibble
lcd_send_nibble(data & 0x0F); // Send low nibble
_delay_us(100); // Wait for the data to execute
}
// Send a nibble (4 bits) to the LCD
void lcd_send_nibble(uint8_t nibble) {
PORTC.OUTCLR = LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7; // Clear data
lines
// Set data lines based on nibble
if (nibble & 0x01) PORTC.OUTSET = LCD_D4;
if (nibble & 0x02) PORTC.OUTSET = LCD_D5;
if (nibble & 0x04) PORTC.OUTSET = LCD_D6;
if (nibble & 0x08) PORTC.OUTSET = LCD_D7;
LCD_E_HIGH(); // Pulse E pin
_delay_us(2); // Increased pulse width
LCD_E_LOW();
_delay_us(200); // Increased latch time
}
// Print a string to the LCD
void lcd_print(const char *str) {
while (*str) {
lcd_send_data(*str++); // Send characters in data mode
_delay_ms(2); // Added delay between characters
}
}
// Clear the LCD display
void lcd_clear() {
lcd_send_command(0x01); // Clear display command
_delay_ms(10); // Wait for clear command to execute
}
// Set the cursor to a specific position
void lcd_set_cursor(uint8_t row, uint8_t col) {
uint8_t address = (row == 0) ? col : (0x40 + col);
lcd_send_command(0x80 | address); // Set DDRAM address
_delay_ms(2); // Added delay for cursor set
}
// Main program
int main() {
lcd_init(); // Initialize the LCD
lcd_clear(); // Clear the display
// Write "Hello" to the top row
lcd_set_cursor(0, 0);
lcd_print("Hello");
// Write "World!" to the bottom row
lcd_set_cursor(1, 0);
lcd_print("World!");
while (1) {
// Main loop
}
return 0;
}
Arnab schrieb:> Ich habe den folgenden Code verwendet:
Dann markiere ihn doch auch als Code.
Wichtige Regeln - erst lesen, dann posten!
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
und Formatierung für C-Code
Andreas S. schrieb:> Vieleicht hilft dass Dir auch weiter :
Hab noch was vergessen : das Display ist auf SPI "verdrahtet"
Den Code von Github würde ich als Basis nehmen und den Code
von Dir entsprechend überprüfen / anpassen.
Guten Tag,
leider hat das Display immer noch nicht wie erwartet funktioniert. Es
werden immer noch schwarze Kästchen angezeigt, es wurden verschiedene
Verträge getestet.
Wäre jemand so freundlich, meinen Code zu überprüfen?
Vielen Dank :)
Arnab schrieb:> Wäre jemand so freundlich, meinen Code zu überprüfen?
Bei der Initialisierung sollte man eigentlich erstmal alle Port-Pins
sinnvoll konfigurieren. EN und RS setzt Du z.B. nicht explizit auf
Low-Pegel.
> Wäre jemand so freundlich, meinen Code zu überprüfen?
Nachdem sich niemand meldet, versuche ich es mal, allerdings ohne allzu
große Hoffnung, denn: ich habe hier nur ein Uralt-LCD, 2*16 stellig (ist
wohl ein HD44780).
Damit funktioniert das vorgestellte Programm, wenn ich die 10 Zeilen
nach 'Initialization sequence as per datasheet' ersetze durch
1
lcd_send_byte(0x28,1);
2
lcd_send_byte(0x06,1);
3
lcd_send_byte(0x0C,1);
Dass ich mit einem ATmega4809 arbeite, sollte keine Rolle spielen.
Hallo zusammen, vielen Dank für die vielen Anregungen. Ich habe in der
Lage gewesen, die Zeichen auf dem Display zu sehen, aber es geht zurück
zu schwarzen Boxen Gewinn nach ein paar Millisekunden. Ich habe die
Initialisierung gemäß der Seite 41 von
https://www.lcd-module.com/eng/pdf/zubehoer/st7036.pdf durchgeführt.
Könnte es möglicherweise irgendwelche anderen Probleme im Code geben?
Vielen Dank für Ihre Erkenntnisse.
Crazy Harry schrieb:> Fangen wir mal von vorne an: Deine Beschaltung entspricht nicht der des> DB für 3.3V 4Bit parallel
Meinen Sie, dass die Pins D0-D3 nicht mit 3,3 V verbunden sind?
Ansonsten stimmt der Anschluss mit dem Datenblatt überein.
Arnab schrieb:> Könnte es möglicherweise irgendwelche anderen Probleme im Code geben?> Vielen Dank für Ihre Erkenntnisse.
Du solltest bei der Initialisierung des I/O-Ports zuerst das
Datenregister initialisieren und dann erst die Bits im
Direction-Register setzen. Ansonsten gibt es kurze Impulse, falls im
Datenrigister Bits gesetzt waren.
Grüßle,
Volker
Arnab schrieb:> Ich habe in der> Lage gewesen, die Zeichen auf dem Display zu sehen, aber es geht zurück> zu schwarzen Boxen Gewinn nach ein paar Millisekunden.
So ganz verstehe ich Deine Aussage nicht. Wenn die Zeichen zuerst lesbar
waren und dann verschwinden, würde ich auf eine falsche Einstellung des
Kontrastst tippen.
Respekt, dass Deine Augen "ein paar Millisekunden" auflösen. Bei mir
liegt's in der Größenordnung von hundert Millisekunden. :-)
Grüßle,
Volker
Volker B. schrieb:> So ganz verstehe ich Deine Aussage nicht. Wenn die Zeichen zuerst lesbar> waren und dann verschwinden, würde ich auf eine falsche Einstellung des> Kontrastst tippen.>> Respekt, dass Deine Augen "ein paar Millisekunden" auflösen. Bei mir> liegt's in der Größenordnung von hundert Millisekunden. :-)>> Grüßle,> Volker
Ich meine, dass es nach der Anzeige der Zeichen wieder zu schwarzen
Kästchen wird, sobald ich den Code flashe. Der Unterschied zwischen den
Vout und Vin Pins des Displays ist 2.584 Volt. Könnte dies ein Problem
sein? Ich habe es mit verschiedenen Kontrastwerten im Code versucht,
aber es wird immer noch das Gleiche angezeigt.
Vielen Dank für Ihre Anregungen!
Arnab schrieb:> Ich meine, dass es nach der Anzeige der Zeichen wieder zu schwarzen> Kästchen wird, sobald ich den Code flashe.
Sorry, aber das verstehe ich nicht. Wieso werden Zeichen angezeigt bevor
Dein Code überhaupt ausgeführt wird?
> Der Unterschied zwischen den> Vout und Vin Pins des Displays ist 2.584 Volt. Könnte dies ein Problem> sein?
Ich kenne das verwendete LCD leider nicht. Meine Erfahrungen beziehen
sich auf den 44780 und für diesen scheint mir Deine Initialisierung zu
funktionieren. Der Begriff "Voltage Booster" aus dem Datenblatt deutet
darauf hin, dass es wohl einen Spannungsunterschied geben wird. Ist Vout
höher als Vin?
> Ich habe es mit verschiedenen Kontrastwerten im Code versucht,> aber es wird immer noch das Gleiche angezeigt.
Ich würde die Werte nicht fest in den Code schreiben sondern in einem
Vorversuch, z.B. über die serielle Schnittstelle, eingeben und dann
schrittweise den gesamten Wertebreich "durchspielen", inkl. "booster on"
und "booster off".
Grüße,
Volker
Arnab schrieb:> Initialisierung gemäß der Seite 41 von> https://www.lcd-module.com/eng/pdf/zubehoer/st7036.pdf durchgeführt.
Dort ist angegeben lcd_send_byte(0x30); du machst daraus
cd_send_nibble(0x03);
Das ist sicher nicht das Gleiche.
Wenn du schon Send_nibble() verwenden willst dann so:
Thomas Z. schrieb:> du machst daraus cd_send_nibble(0x03);> Das ist sicher nicht das Gleiche.
Das ist schon korrekt. Bei der Initialisierung wird das LCD immer erst
im 8-Bit-Modus angesprochen, deshalb ohne lcd_send_byte(), was daraus
jeweils zwei Nibbles machen würde.
Das passiert dreimal, um es ggf. auch erstmal sauber aus dem 4-Bit-Modus
zurückzuholen zu können, erst danach wird es dann auf 4-Bit umgeschaltet
und dann nibbleweise angesprochen.
Hmmm schrieb:> Das ist schon korrekt. Bei der Initialisierung wird das LCD immer erst> im 8-Bit-Modus angesprochen, deshalb ohne lcd_send_byte(), was daraus> jeweils zwei Nibbles machen würde.
nö ist eben nicht ok. Im Datenblatt steht ja eindeutig wie das Display
zu initialisieren ist. Da steht nix davon dass man am Anfang nur Nibbles
senden darf.
Wenn also mit lcd_send_nipple() dann etwa so:
1
//3 times functionset
2
lcd_send_nibble(0x03);lcd_send_nibble(0x00);
3
lcd_send_nibble(0x03);lcd_send_nibble(0x00);
4
lcd_send_nibble(0x03);lcd_send_nibble(0x00);
5
...
übrigens ist ein delay() bei lcd_send_nipple() vollkommen überflüssig.
Die delays sind immer nach einem vollständigen cmd notwendig.
Thomas Z. schrieb:> Im Datenblatt steht ja eindeutig wie das Display> zu initialisieren ist. Da steht nix davon dass man am Anfang nur Nibbles> senden darf.
Komisch, der Hitachi 44780 ist mit 4 Nibbles zufrieden, um ihn in den
4-Bit-Modus zu bringen. Es wäre auch unlogisch, 8-Bit-Daten zu fordern,
wenn das LCD nur mit 4 Datenleitungen an die MCU gekoppelt ist.
Da die unteren 4 Datenleitungen nicht beschaltet sind, "sieht" das LCD
bei Ausgabe des 0x03 Nibbles das Byte 0x30. Aber an diesem Punkt würde
mir zu denken geben, dass der Hersteller des hier verwendeten LCD
explizit fordert, die unbeschalteten Datenleitungen auf Vdd zu legen.
> Wenn also mit lcd_send_nipple() dann etwa so:>
1
>//3 times functionset
2
>lcd_send_nibble(0x03);lcd_send_nibble(0x00);
3
>lcd_send_nibble(0x03);lcd_send_nibble(0x00);
4
>lcd_send_nibble(0x03);lcd_send_nibble(0x00);
5
>...
6
>
...mit etwas Glück ignoriert der Controller die unötigen Null-Nibbles.
Grüßle,
Volker
Volker B. schrieb:> Komisch, der Hitachi 44780 ist mit 4 Nibbles zufrieden,
auch beim Hitachi ist es nicht anders. Ich benutzte seit 30 Jahren 3
Functionsets um in den 4 Bit Mode zu kommen. Das war so auch im alten
Hitachi DB beschrieben. Erst die neueren DBs von Hitachi sind da anders.
Nicht umsonst ist das Low nibble dont care. Die haben sich das damals
ganz geschickt ausgedacht.
Beim 3. FunktionSet kann man dann 1 bzw 2 Zeilen einstellen.
Arnab schrieb:> Meinen Sie, dass die Pins D0-D3 nicht mit 3,3 V verbunden sind?> Ansonsten stimmt der Anschluss mit dem Datenblatt überein.
Ja das meine ich. Der Herausgeber des DB hat sich sicher was dabei
gedacht, als es das so gezeichnet hat.
Thomas Z. schrieb:> Nicht umsonst ist das Low nibble dont care. Die haben sich das damals> ganz geschickt ausgedacht.
Der Aussage stimme ich zu, nur Deine Folgerung, dass dann im 4-Bit-Modus
explizit Null-Nibbles anzulegen seien, kann ich nicht nachvollziehen.
Aber, was soll's ich bin glücklich mit meinem Code und Du mit Deinem.:-)
Grüßle,
Volker
Thomas Z. schrieb:> Im Datenblatt steht ja eindeutig wie das Display zu initialisieren ist.> Da steht nix davon dass man am Anfang nur Nibbles senden darf.
Ob Du die Funktion lcd_send_nibble() oder
lcd_send_without_chopping_bytes_into_nibbles() nennst, ist völlig egal.
Es geht darum, was im Endeffekt passiert, nämlich Ansteuerung im
8-Bit-Modus. Erst wenn das LCD sicher im 4-Bit-Modus ist, sendet man
jeweils 2 Nibbles.
Halten wir fest: das zuletzt gezeigte Programm läuft mit HD44780.
Es muss folglich an den Zusatzfunktionen des ST7036 liegen (im
Programm: 0x70, 0x5E, 0x6C) oder an der Hardware(-verdrahtung).
Vielen Dank an alle für die Vorschläge. Nur ein kurzes Update, ich
verband die D0-D3-Pins an die VDD, aber jetzt das Display nicht
einschalten mit dem Code, den ich vor beigefügt. Auch die
Vout-Pin-Spannung ist jetzt weniger als 3,3 V, die um 5,5 V war, während
D0-D3 unverbunden gelassen wurden.
Außerdem zeigte D0-D3 3,28V an, wenn es nicht an VDD angeschlossen war.
> Auch RS(39) und E(36) zeigen 0 Volt an.
Merkwürdig: RS ist mit PC1 des uCs verbunden, und zeigt bei mir nach
Programmende High-Pegel, es erfolgt ja zum Schluss eine Textausgabe,
also Daten, und RS wird nicht mehr explizit zurückgesetzt.
S. L. schrieb:>> Auch RS(39) und E(36) zeigen 0 Volt an.>> Merkwürdig: RS ist mit PC1 des uCs verbunden, und zeigt bei mir nach> Programmende High-Pegel, es erfolgt ja zum Schluss eine Textausgabe,> also Daten, und RS wird nicht mehr explizit zurückgesetzt.
Für den Moment kehre ich zum vorherigen Aufbau zurück, wobei D0-D3 nicht
angeschlossen sind. Das Display ist wieder eingeschaltet, die Zeichen
blinken kurz auf und werden dann zu Kästchen. Auffallend ist, dass die
Zeichenkästen blau sind, der Rest ist schwarz.
Die Spannungen am Rs-Pin zeigen 3,287 V, am E-Pin 0 V. D0-D3
(unverbundene Pins) zeigen 3,244 V
Ein allerletzter Versuch von meiner Seite: was passiert denn, wenn Sie
die ST7036-spezifischen Kommandos weglassen bzw. auskommentieren
('Contrast Control Commands', diese 0x70, 0x5E, 0x6C), d.h. für den
Anfang auf die Reset-Werte des ST7036 vertrauen?
Arnab schrieb:> Ich habe die> Initialisierung gemäß der Seite 41 von> https://www.lcd-module.com/eng/pdf/zubehoer/st7036.pdf durchgeführt.
Und wo ist der Schritt (s. Anlage) ?
Die 3,3V an den unbenutzten Pins sollten schon angelegt werden - steht
ja nicht umsonst im Datenblatt.
Kann es an Deiner Platine / Lötstellen liegen? Sieht ja nicht unbedingt
"Fabrikfrisch" aus :-)
Hast Du das auch wirklich so ("ungewöhnlich") verschaltet?
#define LCD_D4 PIN3_bm // Data Bit 4 (PC3)
#define LCD_D5 PIN2_bm // Data Bit 5 (PC2)
#define LCD_D6 PIN5_bm // Data Bit 6 (PC5)
#define LCD_D7 PIN4_bm // Data Bit 7 (PC4)
Schön wäre es, wenn Du auch Fragen beantworten würdest.
Verwendets Du wirklich einen
Arnab schrieb:> ATxmega128A1
?
Falls ja, wo stellst Du denn den Takt für den X-mega ein? Und woher soll
der kommen? Intern oder extern?
Im Standard läuft der nicht mit 16 MHz.
Hugo H. schrieb:> Schön wäre es, wenn Du auch Fragen beantworten würdest.>> Verwendets Du wirklich einen>> Arnab schrieb:>> ATxmega128A1>> ?>> Falls ja, wo stellst Du denn den Takt für den X-mega ein? Und woher soll> der kommen? Intern oder extern?> Im Standard läuft der nicht mit 16 MHz.
Ja, ich verwende ATxmega128A1, der externe Takt von 16MHz ist in die
Xmega-Hardware integriert.
Arnab schrieb:> der externe Takt von 16MHz ist in die> Xmega-Hardware integriert
Das wäre mir neu - wo steht das? Nach meiner Kenntnis müssen dazu Bits
in Control-Registern eingestellt werden - in der "Startup-Sequenz".
Hier kannst Du Dich schlau machen:
https://www.kampis-elektroecke.de/mikrocontroller/xmega-clock/
Hugo H. schrieb:> Arnab schrieb:>> der externe Takt von 16MHz ist in die>> Xmega-Hardware integriert>> Das wäre mir neu - wo steht das? Nach meiner Kenntnis müssen dazu Bits> in Control-Registern eingestellt werden - in der "Startup-Sequenz".>> Hier kannst Du Dich schlau machen:> https://www.kampis-elektroecke.de/mikrocontroller/xmega-clock/
Der Takt ist hier nicht das Problem. Ein externer 16MHz-Takt wurde an
die MCU angeschlossen. Tut mir leid, wenn Sie mich falsch verstehen.
Trotzdem vielen Dank für die Anregung :)
Leider hat es bisher nicht funktioniert. Das Zeichen erscheint nur kurz
und verwandelt sich dann in Kästchen. Ich kann die Zeichen sehen, wenn
ich das Display aus einem bestimmten Winkel betrachte.
Ich habe die Pins D0-D3 wieder an VDD angeschlossen. Die Lötung ist in
Ordnung und ein 16MHz externer Quarz (HC6035/4-16MHz) ist an die MCU
angeschlossen. Die am E-Pin beobachtete Spannung war niedrig und lag in
allen Testfällen bei 3,286 V.
S. L. schrieb:>> Klingt nach falsch eingestelltem Kontrast.>> Das sehe ich ähnlich, aber meine Frage von gestern nachmittag war keiner> Antwort wert ...
Es hat nicht geklappt..
Ich habe auch bemerkt, dass der E-Pin in allen Testfällen immer 0 Volt
und der Rs-Pin immer hoch war.
> Es hat nicht geklappt..
Da hätte ich gerne das dazugehörige Programm gesehen.
Die von Ihnen zuletzt gezeigte Version mit den wahllos eingestreuten
0x00-Befehlen sieht nicht durchdacht aus.
Ich wollte eigentlich nichts mehr schreiben, aber das kann nicht
funktionieren:
1
// Step 2: 8-bit Mode Initialization (3 times Function Set 0x30)
2
lcd_send_nibble(0x03);lcd_send_nibble(0x00);// First function set
3
_delay_ms(5);// Longer delay after the first command
4
lcd_send_nibble(0x03);lcd_send_nibble(0x00);// Second function set
5
_delay_us(200);// Shorter delay for subsequent commands
6
lcd_send_nibble(0x03);lcd_send_nibble(0x00);// Third function set
7
_delay_us(200);
8
// Step 3: Force 4-bit Mode (0x20)
9
lcd_send_nibble(0x02);lcd_send_nibble(0x00);// Force 4-bit mode
10
_delay_us(200);
Das jeweils 2. "lcd_send_nibble(0x00)" gehört da nicht hin - es wird ein
zusätzlicher Enable-Impuls erzeugt, der (mit Wert 0) nicht in die
Initialisierungs-Sequenz gehört.
Erst nach Einstellung auf 4-Bit-Modus werden jeweils 2 Nibble mit 2
Enable-Impulsen erwartet.
S. L. schrieb:>> Es hat nicht geklappt..>> Da hätte ich gerne das dazugehörige Programm gesehen.> Die von Ihnen zuletzt gezeigte Version mit den wahllos eingestreuten> 0x00-Befehlen sieht nicht durchdacht aus.
Der Code ist beigefügt :)
> Der Code ist beigefügt :)
Ich schrieb "die ST7036-spezifischen Kommandos weglassen ... ('Contrast
Control Commands')", aber das steht nach wie vor drin: step 4..6.
S. L. schrieb:>> Der Code ist beigefügt :)>> Ich schrieb "die ST7036-spezifischen Kommandos weglassen ... ('Contrast> Control Commands')", aber das steht nach wie vor drin: step 4..6.
Leider ist es immer noch so.
Ich möchte mich noch einmal bei allen bedanken, die hier kommentieren,
das hilft wirklich :)
Arnab schrieb:> Ich habe auch bemerkt, dass der E-Pin in allen Testfällen immer 0 Volt> und der Rs-Pin immer hoch war.
Woher kommen denn wohl die Spannungen an diesen PINs?
Schau Dir mal S. 45 im DB an (und in Deinem Code nach).
Arnab schrieb:> Leider ist es immer noch so.
Hast Du denn mal versucht, den Kontrast zu variieren?
Ich habe immer mehr das Gefühl, dass Du gar nicht verstehst, was Du
tust, sondern nur mit Copy&Paste und unseren Anmerkungen ziellos etwas
zusammenwurstelst.
Was soll z.B. das manuelle Zerlegen der 4-Bit-Kommunikation in Nibbles,
wenn Du genau dafür lcd_send_byte() hast?
Drehen wir es um: das angehängte Programm läuft hier auf einem HD44780,
probieren Sie es bei sich aus - vielleicht haben Sie ja Glück.
PS:
Ein-/Ausschalten zwischendurch nicht vergessen.
Hmmm schrieb:> Klingt nach falsch eingestelltem Kontrast.
immer noch und sogar als wenn die Kontrastspannung wegdriftet!
Falsch angeschlossen Lötbrücke irgendwohin?
Arnab schrieb:> Das Zeichen erscheint nur kurz> und verwandelt sich dann in Kästchen.
da muß was faul sein an der Kontrastspannung und das kann man messen!
Hi
>immer noch und sogar als wenn die Kontrastspannung wegdriftet!
Warum sollte die 'wegdriften'?
Ich halte es für eher wahrscheinlich, das durch nachfolgende Befehle die
Kontrastspannung negativ beeinflusst wird.
MfG Spess
Spess53 .. schrieb:> Warum sollte die 'wegdriften'?
so ist die Beschreibung
Spess53 .. schrieb:> Ich halte es für eher wahrscheinlich, das durch nachfolgende Befehle die> Kontrastspannung negativ beeinflusst wird.
auch möglich, da hilft nach dem ersten Print wo noch alles lesbar ist
ein
Aus meiner Sich gibt es 2 Möglichkeiten:
1.)
Hmmm schrieb:> Ich habe immer mehr das Gefühl, dass Du gar nicht verstehst, was Du> tust, sondern nur mit Copy&Paste und unseren Anmerkungen ziellos etwas> zusammenwurstelst.
Dazu kann es Fehler in der Schaltung / auf dem PCB geben, die wir nicht
kennen.
Ferner vermute ich, dass permanent ein Programmer (ggf. aktiv) über ISP
an Port C hängt (parallel zum Display) und dort für "interessante
Effekte" sorgt.
2.)
Troll
Hugo H. schrieb:> Ferner vermute ich, dass permanent ein Programmer (ggf. aktiv) über ISP> an Port C hängt (parallel zum Display) und dort für "interessante> Effekte" sorgt.
Oh, eine KI, die halluziniert? Xmegas werden üblicherweise über zwei
dedizierte Pins programmiert, die nicht mit I/O-Ports geteilt werden.
Der ATxmega128A1(U) besitzt auch noch ein JTAG-Interface, welches aber
an PortB hängt.
Nachtrag: Aber eine Kollision mit der Peripherie an Port C wäre möglich:
TWIC, SPIC, USARTC0 und -C1 sowie TCC0 und -1. Aber der TO wird diesen
Hinweis sicherlich ebenfalls ignorieren. :-(
Grüßle,
Volker
Volker B. schrieb:> Oh, eine KI, die halluziniert? Xmegas werden üblicherweise über zwei> dedizierte Pins programmiert,
Nö, natürliche Dummheit - ja, Du meinst sicher PDI und hast damit Recht.
Dann mit "Clear" und "Display on" und irgendwelchen Ausgaben weiter.
Auf einem 163er Display (habe ich hier und jetzt ausprobiert)
funktioniert das - muss man nicht verstehen ...
Und ja, stammt von hier:
1
// (C) 2020 by Oliver Kuhlemann //
2
// Bei Verwendung freue ich mich ueber Namensnennung, //
Na, da war ja wieder mal ein Minus-Kasper unterwegs :-)
Falls irgendwann jemand nochmal danach sucht nachstehend 2 Hinweise:
Den habe ich gefunden, indem ich eigentlich diesen Thread gesucht habe
Beitrag "gewünschter Code für EADOGM Display"
Und als Anlage habe ich ein kleines Arduino-Beispiel nach "meinem Gusto"
zusammengestellt (bevor ich vorstehenden Link gefunden hatte). Im ST7306
Datenblatt von SILABS wird "empfohlen", das Busy-Flag abzufragen. Dort
gibt es auch Assembler-Beispiele, an die ich mich angelehnt habe. Ich
verwende _delay_us() statt NOP, damit ist die Wartezeit zwar etwas zu
lang, aber immer dem CPU-Takt (der hoffentlich richtig eingestellt ist)
angepasst.
Das Beispiel ist für ein 3-zeiliges EADOGM163.. ausgelegt.