www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD geht nicht, ich Bitte um hilfe


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin Anfänger und habe schon ein Teil der Tutorial "BESTANDEN"

habe ein LCD angeschlossen und Nach langem rumsuchen, lesen und 
probieren compeliert mein Code jetzt ohne Probleme,
dann an der Controller und hat erst nicht funktioniert! wieder lesen 
lesen und lesen, dann mit verschiedene Code in
Assembler probiert (Ini Routinen usw.) und nichts! dann wollte fast 
schon alles zum Fenster WEG SCHMEISSEN zum letzt
habe ich gestern Abend mit dem C Code (von Turorial) probiert und auf 
ein Mal hat funktioniert!

ABER !! wenn ich die Spannung weg nehme und wieder anschließe kommt 
nichts erst wenn ich an den Controller
(Atmega16) 3 bis 5 mal reset drucke kommt an der LCD die "Hallo Welt“!

Heute wollte ich mal wieder testen und nichts, Spannung an reset 
reset... und auch nichts!

jetzt bin ich genau wie am Anfang ohne eine Ahnung was da los ist!


Ausgang Situation:

Atmega16
Quartz 14745600
LCD HD44780 im 4 bit Modus

ich bin für jede Hilfe dankbar!!

bevor ich das ganze weg schmeiße möchte mindestens verstehen warum nicht 
funktioniert!!

besten Dank
Gruß
Martin

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte das übiche timing Problem sein..

Hast Du in lcd-routines.h F_CPU richtig angepasst?
Bist Du sicher, daß der Prozessor richtig resettet?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

danke für deine Antwort.

>> Hast Du in lcd-routines.h F_CPU richtig angepasst?
meinst du den Wert von Quartz in .h oder? wenn dann ja ich habe es in 
der Makefile und in lcd-routines.h angepasst.

>> Bist Du sicher, daß der Prozessor richtig resettet?
ups... da habe ich keine Ahnung bzw. wie kann ich das testen?

wie kann ich hier in Forum 3 Dateien posten oder hängen, so kann ich 
dann die .h und .c hier posten.

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin wrote:

>>> Bist Du sicher, daß der Prozessor richtig resettet?
> ups... da habe ich keine Ahnung bzw. wie kann ich das testen?

Mach als erste Aktion in deinem Programm eine LED an und nach einer
kurzen Wartezeit wieder aus. Dieses Signal erkennst du auf jeden
Fall: Wenn nach dem Reset die LED kurz aufleuchtet, dann hat
der Prozessor resettet.

Das könnte unter Umständen sogar dann dein LCD Problem lösen.
Der Controller am LCD braucht auch nach einem Reset etwas Zeit
um das LCD 'hochzufahren'. Wenn dein Programm mit der Initialisierungs-
sequenz ein klein wenig zu früh anfängt, dann ist das LCD noch
nicht soweit.

Ist aber nur eine Vermutung.
Wenn ein LCD nicht spurt, dann ist eine Verlängerung aller Zeiten
erst mal keine so schlechte Idee.

> wie kann ich hier in Forum 3 Dateien posten oder hängen, so kann ich
> dann die .h und .c hier posten.

Mach 3 Postings draus.

Autor: Dominik Boine (dominik123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe mich auch letztens mit so was rum geschlagen.
Gucke doch mal hier:
http://www.goblack.de/desy/digitalt/aktoren/lcd-hd...

Überprüfe noch mal alle Leitungen am Controller ob er auch richtig 
angeschlossen ist. Den R/W Pin kannst du auch zum Testen auf GND(0V) 
legen (Nur Senden möglich dann). Das hier ist meine Init für einen 
KS0076B aber im 8Bit Modus sollte aber auch für den HD4478 Controller 
gehen.

Quelltext (in C):

void Display_Init(void)
{
_delay_ms(15);                   //Zeit laut Datenblatt
Display_Enable = 0;              //Enable Pin auf 0
PORTD          = 0x30;  //Init 1 //Daten Setzen DB0 bis DB7 bzw. DB3
Display_Enable = 1;              //Enable Pin auf 1 (Daten werden 
Gelesen)
_delay_ms(5);                    //Zeit damit Daten gelesen werden 
können
//-------------------------------
Display_Enable = 0;             //usw...........
PORTD          = 0x30;  //Init 2
Display_Enable = 1;
_delay_ms(5);
//-------------------------------
Display_Enable = 0;
PORTD          = 0x30;  //Init 3
Display_Enable = 1;
_delay_ms(5);
//-------------------------------
Display_Enable = 0;
PORTD          = 0x38;  // Set Function = 8Bit interface, 2 Line<Hier 
4Bit Display,5x7 Dots
Display_Enable = 1;
_delay_ms(5);
//-------------------------------
Display_Enable = 0;
PORTD          = 0x0F;  // Display On = On,Curser On, Blinking on
Display_Enable = 1;
_delay_ms(5);
//-------------------------------
Display_Enable = 0;
PORTD          = 0x01;  // Display Clear
Display_Enable = 1;
_delay_ms(5);
//-------------------------------
Display_Enable = 0;
PORTD          = 0x06;  // Entry Mode Set = Increase, not shifted
Display_Enable = 1;
_delay_ms(5);
Display_Enable = 0;
}//ENDE der Init

Wenn alles geklappt hat Solltest du einen Blinkenden Cursor sehen.


Gruß
Dominik

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Antworte, so fühlt sich man nicht allein mit dem ganzem 
Kram :-) oder?

@ Karl heinz

>> Mach als erste Aktion in deinem Programm eine LED an und nach einer
>> kurzen Wartezeit wieder aus.

alles klar, am andere Port oder?

@ Dominik

>> Überprüfe noch mal alle Leitungen am Controller ob er auch richtig
>> angeschlossen ist.

habe ich etwa 1000 mal gemacht und sollte iO sein da nach dem 
Kompilierung und übertragen des C-Codes auf ein Mal war mein Text am LCD 
ohne ein Hardware eingrifft.

- Quelltext (in C):

- void Display_Init(void)
- {
-_delay_ms(15);                   //Zeit laut Datenblatt

umm... habe von LCD leider kein Datenblatt

anbei mein Code bzw. habe von Tutorial übernommen

Gruß

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
lcd-routines.c.

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
lcd-routines.h.txt

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hauptprogramm.txt

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also jetzt ist wieder Zeit zum testen :-)

ich habe gerade der Zeit der Initialisierung von 15 auf 100ms erhöht 
also
>> _delay_ms(100);
und sieht besser aus wenn die Spannung da ist dan ist mein Text da!

@Karl heinz
>> Mach als erste Aktion in deinem Programm eine LED an und nach einer
>> kurzen Wartezeit wieder aus.

habe ich folgendes gemacht:

int main(void)
{
  PORTB |= (1<<PB1);

    lcd_init();

    lcd_data('T');
    lcd_data('e');
    lcd_data('s');
    lcd_data('t');
    set_cursor(0,2);

    lcd_string("Hola Mundo!");

    while(1)
    {
    }

    return 0;
}

Pin 1 leuchtet, wenn ich reset drucke dann geht er aus und wieder an, 
also ist der reset von Controller in Ordnung oder?

Gruß
Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.