Hallo,
Heute ist bei mir mein HD44780 LCD Display angekommen, das ich vor einen
Monat bei Amazon bestellt habe.
Ich habe mich an dieses Tutorial gehalten:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
Das LCD ist richtig angeschlossen. Wenn ich denn Poti(Anschluss Vee(Oder
bei mir V0) und dieser bei 0 Volt ist sind die Balken zusehen wenn
dieser bei 5 Volt ist also nach rechtes gedreht, dann sind die Balken
verschwunden.
Wenn ich mein Breadboard unter 5 Volt setzte dann erscheinen in der
ersten Zeile die Balken ganz kräftig und verschwinden dann wieder. Das
macht ja lcd_init(); Wenn ich diese Methode weg lasse, dann bleiben die
Balken dauerhaft.
Aber wenn ich jetzt mit lcd_string oder lcd_data Zeichen sende werden
diese dort nicht dargestellt.
Was mich ein bisschen verwirt ist dieses hier:
1
//
2
// Anpassungen im makefile:
3
// ATMega8 => MCU=atmega8 im makefile einstellen
4
// lcd-routines.c in SRC = ... Zeile anhängen
5
//
Wo finde ich denn diese Makefile? Und was wird mit lcd-routines.c in SRC
gemeint? Die Datei includieren?
Kann mir da einer helfen?
Lg Felix
Lothar M. schrieb:> Felix N. schrieb:> Wo finde ich denn diese Makefile?>> Welche Toolchain verwendest du? In welcher Version?
Ich nutzte das Atmel Studio 7. Oder was meinst du damit?
Eigentlich sollte es dem LCD egal sein, ob Buchstaben, Zahlen oder
irgendwelche Zeichen angezeigt werden. Probier mal die gleichen
Einstellungen wie bei Zahlen.
Duckundwech
Lothar M. schrieb:> Welche Toolchain verwendest du? In welcher Version?
Hallo nochmal,
Bin nun wieder am Rechner.
Habe grade mal geschaut und Project -> {Projekt-Name} Properties ->
Toolchain
Eine Version kann ich nicht finden. Nutze Atmel Studio in der Version 7.
Hier mal ein Bild davon: http://prntscr.com/a9y4ohDuckundwech schrieb:> Eigentlich sollte es dem LCD egal sein, ob Buchstaben, Zahlen oder> irgendwelche Zeichen angezeigt werden. Probier mal die gleichen> Einstellungen wie bei Zahlen.>> Duckundwech
Hallo!
Das LCD zeigt mir nix an. Also er führt "lcd_init()" aus und dann zeigt
er mir aber nichts an. Also wenn ich "Hallo" sende zeigt er mir nix an.
Felix,
bitte schreibe uns noch den verwendeten
a) Avr µC,
b) die Taktfrequenz und
die einzelnen angeschlossenen LCD Pins.
Pin D4 =
Pin D5 =
Pin D6 =
Pin D7 =
Pin RS =
Pin EN =
Pin RW =
Wie stellst Du den LCD Kontrast ein ?
Dann kann man Dir mal eine einfaches Testprogramm zukommen lassen.
Karl M. schrieb:> Felix,>> bitte schreibe uns noch den verwendeten> a) Avr µC,> b) die Taktfrequenz und> die einzelnen angeschlossenen LCD Pins.>> Pin D4 => Pin D5 => Pin D6 => Pin D7 => Pin RS => Pin EN => Pin RW =>> Wie stellst Du den LCD Kontrast ein ?>> Dann kann man Dir mal eine einfaches Testprogramm zukommen lassen.
Sorry total vergessen
Der Mikrocontroller ist der ATMega328P mit dem Ardunio Bootloader.
Taktfrequenz ist 16 Mhz. diese stimmt auch.
LCD Controller PIN
VSS (Kein PIN) GND
VDD (Kein PIN) +5 Volt
V0 (Kein PIN) Angeschlossen über ein 10K Ohm Poti
RS PD4 am uC
RW (Kein PIN) GND
E PD5 am uC
D0 - D3 Nicht angeschlossen 4 - Bit Modus
D4 PD0 am uC
D5 PD1 am uC
D6 PD2 am uC
D7 PD3 am uC
A (Kein Pin)Auf +3,3 Volt
K (Kein PIN)GND
Denn Kontrast stelle ich über ein 10K Poti ein. Linkes geht dieser auf
GND und der rechte anschluss geht auf +5 Volt. Wenn der Poti bei 0 Ohm
ist dann ist das Display ganz "hell" vom Kontrast her und wenn, ich nach
rechtes drehe nimmt es ab.
Karl M. schrieb:> Hallo Felix,>> hier ist dein Testprogramm mit den obigen Angaben,>> nach 2 Sekunden startet eine Animation, die alle 500ms die Zeile 2 neu> beschreibt.
Hallo Karl.
Bei mir passiert dort nix. Das LCD bleibt Blau(wegen Blacklight). Kannst
du denn Source Code mal schicken?
Felix,
dann teste bitte die Verkabelung und die Versorgungsspannung (+5V).
Sind auch einige 100nF zwischen Vcc-Gnd beschaltet ?
Wie lautete die Bezeichnung des LCD ?
Hallo Felix,
dann setzt die 100nF am Atmel m328p und dem LCD noch ein.
Mein kleines Programm läuft auf meinem Testboard + LCD mit einem
atmega32 wie erwartet.
Das LCD 1602A habe ich in anderen Projekten auch verbaut und sie sind
nur etwas langsamer beim LCD Zeichnupdate.
Die LCD Routine arbeitet mit folgenden Wartezeiten für das LCD Timing:
LCD4_COMMAND_DELAY = 50 µs
LCD4_ENABLE_DELAY = 1 us
LCD4_CLR_DELAY = 2000 µs
Evtl. ist die Kabellänge zwischen LCD und m328p auch zu lang..
Bitte stelle noch einige gute Bilder ein, auf denen man auch etwas sehen
kann. Also bitte mit Licht + Schärfe.
Karl M. schrieb:> Hallo Felix,>> dann setzt die 100nF am Atmel m328p und dem LCD noch ein.>> Mein kleines Programm läuft auf meinem Testboard + LCD mit einem> atmega32 wie erwartet.>> Das LCD 1602A habe ich in anderen Projekten auch verbaut und sie sind> nur etwas langsamer beim LCD Zeichnupdate.> Die LCD Routine arbeitet mit folgenden Wartezeiten für das LCD Timing:> LCD4_COMMAND_DELAY = 50 µs> LCD4_ENABLE_DELAY = 1 us> LCD4_CLR_DELAY = 2000 µs>> Evtl. ist die Kabellänge zwischen LCD und m328p auch zu lang..>> Bitte stelle noch einige gute Bilder ein, auf denen man auch etwas sehen> kann. Also bitte mit Licht + Schärfe.
Hallo nochmal.
Also 100NF an Vcc und GND beim Atmega328p Avcc und gnd kann weg nutze
kein A/D. Und beim LCD ein Kondensator von Vdd(5 Volt) zu Vss(Masse)?
Bilder lade ich morgen mal hoch. Kabellänge sollte eigentlich nicht
zulang sein (20-25 cm).
Felix N. schrieb:> Hallo nochmal.> Also 100NF an Vcc und GND beim Atmega328p Avcc und gnd kann weg nutze> kein A/D. Und beim LCD ein Kondensator von Vdd(5 Volt) zu Vss(Masse)?
Alle Vcc und GND, sowie Avcc und AGnd ! müssen angeschlossen werden.
Jedes Paar erhält auch immer einen 100nF Kondensator.
Aref gehört nicht an Vcc=+5V, sondern nur eine 100nF Kondensator nach
Gnd
> Bilder lade ich morgen mal hoch. Kabellänge sollte eigentlich nicht> zulang sein (20-25 cm).
Doch werden sie sein.
Hier ist eine weiteres Programm, mit anderem Timing:
LCD4_ENABLE_DELAY = 10 us
LCD4_COMMAND_DELAY = 100 µs
LCD4_CLR_DELAY = 5000 µs
Karl M. schrieb:> Hallo Felix,>> dann setzt die 100nF am Atmel m328p und dem LCD noch ein.>> Mein kleines Programm läuft auf meinem Testboard + LCD mit einem> atmega32 wie erwartet.>> Das LCD 1602A habe ich in anderen Projekten auch verbaut und sie sind> nur etwas langsamer beim LCD Zeichnupdate.> Die LCD Routine arbeitet mit folgenden Wartezeiten für das LCD Timing:> LCD4_COMMAND_DELAY = 50 µs> LCD4_ENABLE_DELAY = 1 us> LCD4_CLR_DELAY = 2000 µs>> Evtl. ist die Kabellänge zwischen LCD und m328p auch zu lang..>> Bitte stelle noch einige gute Bilder ein, auf denen man auch etwas sehen> kann. Also bitte mit Licht + Schärfe.
Hallo nochmal.
Also 100NF an Vcc und GND beim Atmega328p Avcc und gnd kann weg nutze
kein A/D. Und beim LCD ein Kondensator von Vdd(5 Volt) zu Vss(Masse)?
Bilder lade ich morgen mal hoch. Kabellänge sollte eigentlich nicht
zulang sein (20-25 cm).
Karl M. schrieb:> LCD4_ENABLE_DELAY = 10 us> LCD4_COMMAND_DELAY = 100 µs> LCD4_CLR_DELAY = 5000 µs
Bin gerade am anderen Rechner. Probiere es morgen alles aus. Glaube
sogar das ich an machen stellen statt _delay_us() _delay_ms()
geschrieben habe. Kann es sein das die Init Phase dann zulange dauert?
Habe aber keine kürzen Kabel.
Hallo,
Ich habe deine andere .hex File auch ausprobiert. Funktioniert nicht.
Ich weis nicht ob es entscheiden ist aber, wenn ich das LCD unter Strom
setzte kommt nur die erste Zeile mit denn Schwarzen Balken hervor. Die
Zweite Zeile nicht.
Ich habe mal einige Bilder angehangen mit Beschreibung.
Ich habe auch mal meine lcd-routines.h und c und main.c Datei
angehangen.
Mfg Felix.(Danke für eure Geduld!)
Felix N. schrieb:> Also 100NF an Vcc und GND beim Atmega328p Avcc und gnd kann weg nutze> kein A/D.
Es ist vollkommen egal, ob Du A/D benutzt oder nicht. Vcc und AVcc
benötigen je 100nF nach Masse. Wenn Du A/D nicht nutzt, kannst Du
höchstens den 100nF an AREF geschaltet nach GND weglassen - schadet aber
auch nicht.
Also: Mind. 2 x 100nF am ATmega sind Pflicht. Es gab hier schon zig
Threads, wo es genau an diesen beiden fehlenden Kerkos lag. Du willst
nicht der 1001ste sein :-)
Felix N. schrieb:> Ich habe mal einige Bilder angehangen mit Beschreibung.
Sieht doch gut aus :-) Dreh mal am Poti. Vielleicht kommt dann etwas.
In dem letzten Bild steht, dass PD3 auch nach DB5 geht. Genau wie PD1?
Olaf K. schrieb:> Felix N. schrieb:>> Ich habe mal einige Bilder angehangen mit Beschreibung.>> Sieht doch gut aus :-) Dreh mal am Poti. Vielleicht kommt dann etwas.>> In dem letzten Bild steht, dass PD3 auch nach DB5 geht. Genau wie PD1?
Sorry, verschrieben PD3 geht an DB7. Wenn ich am Poti drehe ändert sich
nur der Kontrast aber es wird nichts sichtbar.
Frank M. schrieb:> Es ist vollkommen egal, ob Du A/D benutzt oder nicht. Vcc und AVcc> benötigen je 100nF nach Masse. Wenn Du A/D nicht nutzt, kannst Du> höchstens den 100nF an AREF geschaltet nach GND weglassen - schadet aber> auch nicht.>> Also: Mind. 2 x 100nF am ATmega sind Pflicht. Es gab hier schon zig> Threads, wo es genau an diesen beiden fehlenden Kerkos lag. Du willst> nicht der 1001ste sein :-)
Hallo Frank. 100nf von avcc auf gnd genau das gleich bei vcc und gnd und
auch noch 100 nf von aref auf agnd. Zwischen vss und vdd ist auch noch
einer.
...da liegt ein UNO herum, der als "Netzteil" benutzt wird?
Das erste, was ich testen würde, falls ich die grundsätzliche Funktion
des LCD sicherstellen möchte: LCD an UNO anschliessen (Tutorials dazu
gibt's genügend), und "offizielles" LCD-Beispiel (z.B "HelloWorld") per
IDE ausprobieren.
Danach sollte man dann zumindest wissen, ob das LCD tut, und kann sich
den Abblock-Cs und/oder fremden HEX-Files usw. zuwenden...
Jan L. schrieb:> ...da liegt ein UNO herum, der als "Netzteil" benutzt wird?> Das erste, was ich testen würde, falls ich die grundsätzliche Funktion> des LCD sicherstellen möchte: LCD an UNO anschliessen (Tutorials dazu> gibt's genügend), und "offizielles" LCD-Beispiel (z.B "HelloWorld") per> IDE ausprobieren.>> Danach sollte man dann zumindest wissen, ob das LCD tut, und kann sich> den Abblock-Cs und/oder fremden HEX-Files usw. zuwenden...
Das LCD funktioniert. Ich habe das LCD Tutorial im Arduino getestet.
Dort wird alles dargestellt.
Ein "Offizielles" LCD Beispiel für denn atmega328p kann ich nicht
finden. Kennst du da eines?
Karl M. schrieb:> Stimmt die nun noch?
Ja diese stimmen.
Felix N. schrieb:> Das LCD funktioniert. Ich habe das LCD Tutorial im Arduino getestet.> Dort wird alles dargestellt.>> Ein "Offizielles" LCD Beispiel für denn atmega328p kann ich nicht> finden. Kennst du da eines?
damit meinte ich die standardmässig installierten (LCD-)Beispiele der
Arduino-IDE, um das mit dem UNO zu testen - scheint ja demnach zu
funktionieren.
Oben hast du geschrieben, dass du beim Standalone-Atmega328 auch den
Arduino-Bootloader drauf hast - dann wäre es evtl. das einfachste, wenn
du den UNO benutzt, um den exakt selben Sketch auf deine
Breadboard-Schaltung zu schieben:
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
Jan L. schrieb:> damit meinte ich die standardmässig installierten (LCD-)Beispiele der> Arduino-IDE, um das mit dem UNO zu testen - scheint ja demnach zu> funktionieren.> Oben hast du geschrieben, dass du beim Standalone-Atmega328 auch den> Arduino-Bootloader drauf hast - dann wäre es evtl. das einfachste, wenn> du den UNO benutzt, um den exakt selben Sketch auf deine> Breadboard-Schaltung zu schieben:> https://www.arduino.cc/en/Tutorial/ArduinoToBreadboardPete K. schrieb:> Kann es sein, dass Du Dein UNO flasht, aber nicht das Teil auf dem> Steckbrett?
Mein UNO Board flasht das ganze auf denn Chip. Der Chip sitzt auf denn
Breadboard. Ich nutze das Atmel Studio weil ich bereits Vorkenntnisse in
C habe.
Ich würde auch gerne das Atmel Studio weiter benutzen.
Felix N. schrieb:> Mein UNO Board flasht das ganze auf denn Chip. Der Chip sitzt auf denn> Breadboard.
Hmm, dann lass doch mal eine LED auf dem Steckbrett nebenher blinken.
Bei jedem Flashen ein andere Rhythmus (1 sek, 2 sek etc.).
Pete K. schrieb:> Hmm, dann lass doch mal eine LED auf dem Steckbrett nebenher blinken.> Bei jedem Flashen ein andere Rhythmus (1 sek, 2 sek etc.).
Okay mache ich aber, was auf was willst du hinaus?
Felix N. schrieb:> Das LCD funktioniert. Ich habe das LCD Tutorial im Arduino getestet.> Dort wird alles dargestellt.
Dann hast Du ja kein Software-Problem, sondern musst nur den
Controller-Typ umstellen und neu flashen.
Pete K. schrieb:> Entweder der Controller funktioniert nicht oder das Flashen klappt> nicht.
Der Controller funktioniert. Wenn ich die Rythmus auf 500ms einstelle
wegen:
An - Delay(500) - Aus - Delay(500) = 1 sec. Dann blinkt diese ein mal in
der Sekunde. Wenn ich das auf 2000 stelle dann ist sie 2 sekunden an und
2 sekunden dann wieder aus.
Also das funktioniert. Das Flashen klappt auch seit 2 Monaten
Problemlos.
Pete K. schrieb:> Dann hast Du ja kein Software-Problem, sondern musst nur den> Controller-Typ umstellen und neu flashen.
Was meinst du mit Controller-Typ umstellen?
Hier mal ein Bild vom Atmel Studio: http://prntscr.com/aacxdu
Felix N. schrieb:> Aber wenn ich jetzt mit lcd_string oder lcd_data Zeichen sende werden> diese dort nicht dargestellt.
Welch ein Trauerspiel mit inzwischen mehr als 2 Dutzend Beiträgen und
immer noch ohne jegliche Lösunf - ja nicht einmal mit dem geringsten
systematischen Vorgehen.
Also:
Laß du erstmal das LCD weg und schreib dir ein oder mehrere kleine
Testprogramme.
Hast du nen funktionablen seriellen Port an deinem µC, den du vom PC aus
per Terminalprogramm erreichen kannst?
Wenn ja: dann kannst du alle Testroutinen zusammenfassen.
Sonst:
1. Testprogramm: die 4 Datenbits von 0 bis 15 durchzählen und ausgeben.
Mit Oszi angucken. Auch prüfen, ob die anderen Portpins nicht in
Mitleidenschaft gezogen werden.
2. Test zuerst RS, dann E, dann R/W einzeln wackeln lassen,
oszillografieren und ebenfalls nachschauen, ob alle anderen Portpins so
bleiben wie sie sollen
Damit hättest du erstmal abgetestet, ob das, was du mit dem LCD
überhaupt anstellen willst, an den Pins richtig ankommt.
3. Schreib dir passende Low-Level-Funktionen zum Setzen und Löschen der
Steuersignale (RS, E, R/W) und der 4 bit breiten Datenausgabe. Und
probiere sie aus.
4. Guck in die Doku zum Controller und programmiere deine Setup-Routine
und die Zeichenausgabe-Routine selber. Damit du weißt, was tatsächlich
abgeht. Normalerweise funktioniert das Display ab da tadellos.
W.S.
W.S. schrieb:> Welch ein Trauerspiel mit inzwischen mehr als 2 Dutzend Beiträgen und> immer noch ohne jegliche Lösunf
Nun ja, auf dem UNO funktioniert das LCD ja. Hatte ich zumindest so
verstanden.
Pete K. schrieb:> Nun ja, auf dem UNO funktioniert das LCD ja. Hatte ich zumindest so> verstanden.
Okay, ich kann jetzt zu 100 % sagen. Das ich was falsch mache mit dem
Code Beispiel von Avr-gcc vom Mikrocontroller.net.
Ich habe mal im Internet nach "LCD Tutorial Atmega328p" gesucht und
dieses gefunden:
http://web.alfredstate.edu/weimandn/programming/lcd/ATmega328/LCD_code_gcc_4d.html
Dort funktioniert es das Display zu beschreiben.
Ich werde die Ports mal Manual setzten.
Felix N. schrieb:> Also 100NF an Vcc und GND beim Atmega328p Avcc und gnd kann weg nutze> kein A/D.
Der AVCC heißt nur so, damit er sich von VCC unterscheidet. Ob du A/D
benutzt oder nicht, spielt keine Rolle. Da hängen auch andere Ports mit
dran.
W.A. schrieb:> Der AVCC heißt nur so, damit er sich von VCC unterscheidet. Ob du A/D> benutzt oder nicht, spielt keine Rolle. Da hängen auch andere Ports mit> dran.
Der ist auch mit Storm versorgt
Felix N. schrieb:> Ein "Offizielles" LCD Beispiel für denn atmega328p kann ich nicht> finden. Kennst du da eines?
Auf IMHO jedem Arduino mit ATmega328p läuft das Hello-World-Beispiel der
Arduino LCD Library. Warum sollte es gerade auf deinem ATmega328p nicht
laufen?
Hallo,
ich habe grad mal kurz in deine Soircen geschaut. So wie es aussieht
sind die falsch.
Vielleicht habe ich auch was übersehen. Wie gesagt ich habe nur kurz
rein geschaut.
Meiner Meinung nach setzt du die Steuersignale nicht richtig.
Du verwendest die Funktion lcd_data('irgendwas'); Da wird das Zeichen
auf den Port geschoben aber die Daten werden nicht vom LCD übernommen,
da du das E Signal nicht richtig bedienst.
Das kann so nichts werden. Vergleich mal die Source und vor allem
beschäftige dich VORHER nochmal wie du die Daten richtig an das Display
senden musst. Also wofür sind die Daten, Kommandos und so weiter.
Vor allem solltest du deine main ändern. Du musst erst deinen Cursor
setzten und dann das richtige Datum auf die Adresse schreiben. Dann wird
es auch angezeigt.
Gruß, Jens
Jens schrieb:> Hallo,>> ich habe grad mal kurz in deine Soircen geschaut. So wie es aussieht> sind die falsch.> Vielleicht habe ich auch was übersehen. Wie gesagt ich habe nur kurz> rein geschaut.>> Meiner Meinung nach setzt du die Steuersignale nicht richtig.> Du verwendest die Funktion lcd_data('irgendwas'); Da wird das Zeichen> auf den Port geschoben aber die Daten werden nicht vom LCD übernommen,> da du das E Signal nicht richtig bedienst.> Das kann so nichts werden. Vergleich mal die Source und vor allem> beschäftige dich VORHER nochmal wie du die Daten richtig an das Display> senden musst. Also wofür sind die Daten, Kommandos und so weiter.>> Vor allem solltest du deine main ändern. Du musst erst deinen Cursor> setzten und dann das richtige Datum auf die Adresse schreiben. Dann wird> es auch angezeigt.>> Gruß, Jens
Hallo Jens,
Werde ich morgen mal machen.
Übrings der Code ist der von dem Tutorial von Mikrocontroller.net nur
ohne die Kommentare
Muss man RS auf High setzten dann senden und dann wieder auf low
setzten?
RS setzt du auf Low, bevor du ein Kommando sendest.
Und du setzt es auf High, bevor du Daten (Text) sendest.
Deine Fotos vom Zustand vor und nach der initialisierung lässt vermuten,
dass die Initialisierung klappt. Nur das Senden von Text nicht. Schau
also mal genau hin, was du mit der RS Leitung machst.
Du könntest an RS und E zwei Leuchtdioden anschließen und das Timing
viiiiiiieeeel langsamer machen. Dann kannst du mit bloßen Auge sehen, ob
diese beiden Steuerleitungen richtig bedient werden.
Dem Display ist ja ziemlich egal, wie schnell oder langsam es
angesteuert wird - solange es nicht zu schnell ist.
Hallo Felix,
Du hast zwei Testprogramm mit unterschiedlichem Timing,
Wenn diese laufen, ist deine Hardware in Ordnung.
Somit würde ich alle Bauteile und Steckverbinder neu stecken und dann
die Verbindung mit einem DMM über eine Durchgangsprüfung (Ohm)
verifizieren.
Hier ist ein weiteres für den Atmega328p @16MHz, ich habe das Timing
noch weiter verlangsamt.
DataSetupTime = 10 µs
EnableTime = 10 µs
CommandDelayTime = 150 µs
ClearDelayTime = 5000 µs
Und folgende Pins im 4Bit Modus definiert:
Lcd4Bit D4 = pd0 (PORTD)
Lcd4Bit D5 = pd1 (PORTD)
Lcd4Bit D6 = pd2 (PORTD)
Lcd4Bit D7 = pd3 (PORTD)
Lcd4Bit RS = pd4 (PORTD)
Lcd4Bit EN = pd5 (PORTD)
Karl M. schrieb:> Hallo Felix,>> Du hast zwei Testprogramm mit unterschiedlichem Timing,>> Wenn diese laufen, ist deine Hardware in Ordnung.> Somit würde ich alle Bauteile und Steckverbinder neu stecken und dann> die Verbindung mit einem DMM über eine Durchgangsprüfung (Ohm)> verifizieren.>> Hier ist ein weiteres für den Atmega328p @16MHz, ich habe das Timing> noch weiter verlangsamt.>> DataSetupTime = 10 µs> EnableTime = 10 µs> CommandDelayTime = 150 µs> ClearDelayTime = 5000 µs>> Und folgende Pins im 4Bit Modus definiert:> Lcd4Bit D4 = pd0 (PORTD)> Lcd4Bit D5 = pd1 (PORTD)> Lcd4Bit D6 = pd2 (PORTD)> Lcd4Bit D7 = pd3 (PORTD)> Lcd4Bit RS = pd4 (PORTD)> Lcd4Bit EN = pd5 (PORTD)
Hallo Karl.
Dieses Testprogramm funktioniert leider auch nicht. Die Balken werden
angezeigt und verschwinden kurz danach wieder(init) dann kommt aber
kein Text.
Mit diesen Beispiel:
http://web.alfredstate.edu/weimandn/programming/lcd/ATmega328/LCD_code_gcc_4d.html
Funktioniert es Problemlos. Ich kann aber kein Unterschied zwischen
lcd_out und lcd_write_4 finden.
mfg felix.
Nun,
lcd_write_4(bdata) schreibt ein Nibbel - 4Bit - auf das LCD, wobei die
LCD Pinanordnung und die jeweils verwendeten Port hier frei wählbar
sind.
So wie bei meiner Bibliothek auch.
lcd_out(data) aus
#
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
hingegen, schreibt das Nibbel an eine feste Bitstelle von Port
>LCD_PORT< mit einer festgelegten Reihenfolge.
Ich schreib ja schon es liegt an der Kabellänge !
Wenn meine korrekten Testprogramm bei dir nicht laufen, dann liegt es an
deiner Hardware.
Erst wenn, z.B. das letzte Testprogramm mit nochmal verlängertem Timing,
bei Dir funktioniert, würde ich mich an das schreiben einer eigenen LCD
Bibliothek machen.
Der Autor von
#
http://web.alfredstate.edu/weimandn/programming/lcd/ATmega328/LCD_code_gcc_4d.html
hat schon das Datenblatt gelesen und sich auch Gedanken über das Timing
des EN Signals gemacht.
Es ist scheinbar wirklich der Controller im Ar*** gewesen. Nachdem ich
die Kabel gegen Max: 10cm lange Draht brücken ausgetauscht hatte. Und
ein neuen Controller von meinen anderen 3 genommen habe. Funktioniert es
Problemlos.
Aber wodurch kann man so ein Controller zerstören. Der ist mir zwar das
ein oder andere mal runter gefallen aber vieles andere(PWM, LED, etc...)
Funktioniert ja.
Gut der hat jetzt ca. 2 Monate alles mit gemacht. Staubsauger,
Runterfallen, Pins verbogen. Weis ja nicht wie die Lebens dauer aussieht
von so einen uC
@Karl .M
Also deine anderen Tests funktionieren nun auch. Kannst du trotzdem mal
dein Source Code hochladen?
//EDIT: Der controller scheint wohl er ein anderes Problem zu haben.
Denn ich ich LEDs an die Port d hänge funktionieren die auch problemlos
Felix N. schrieb:> Gut der hat jetzt ca. 2 Monate alles mit gemacht. Staubsauger,
Du nimmst den zum Staubsaugen? Jetzt bin ich aber interessiert wie man
das macht;-)
> Runterfallen, Pins verbogen. Weis ja nicht wie die Lebens dauer aussieht> von so einen uC.
Die Atmegas sind eigentlich sehr robust. Ich habe hier welche die seit
ca. 8 Jahren im Dauerbetrieb laufen. Kaputt habe ich noch nie einen
bekommen.
Eigentlich wurde schon alles gesagt:
Leitungslänge bei Displays so kurz wie möglich.
Ansteuerzeiten des Enable-Impuls variieren.
Hallo,
mir ist auch schon mal ein atmega an einem Eingangs-Pin kaputt gegangen.
Dort war der 1-Wire Ein-/Ausgang eines seriellen Bootladers (Fastboot
2.0). Davor eine einfache Pegelanpassung RS232 Pegel Tx/ RX auf den
1-Wire Ein-/Ausgang.
Fehleranalyse war damals am Prototyp:
Es muss die negativen Spannungen des RS232 gewesen sein, als die ext.
Clamp Diode, um negative Spannungen ab-/umzuleiten, sich gelöst hatte.
Felix N. schrieb:> Es ist scheinbar wirklich der Controller im Ar*** gewesen.
:-/
Ich würde ihm nochmal eine Chance geben.
Bei 'Steckbrett' fällt mir vorher noch ein:
- Kabelbruch
- schlechte Kontakte
Ralf G. schrieb:> Ich würde ihm nochmal eine Chance geben.> Bei 'Steckbrett' fällt mir vorher noch ein:> - Kabelbruch> - schlechte Kontakte
Ich werde ich veruschen mal zu "retten"
Thomas F. schrieb:> Du nimmst den zum Staubsaugen? Jetzt bin ich aber interessiert wie man> das macht;-)
Habe ihn mehrmals beim Staubsaugen aufgesaugt.
Pete K. schrieb:> Vielleicht lag es doch an den zu langen Kabeln?
Ne, bei denn anderen Controller waren die Kabel 20-25 cm lang kein
Problem. Funktionierte alles super.