Forum: Compiler & IDEs Verständnis frage zu AVR-Tutorial: LCD


von Ferdinand (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich versuche gerade ein LCD von Pollin das YL 162-90 an einem ATmega644 
mit 8MHz und dem AVR-Studio 4.18, STK500 an PortB zu betreiben, nun 
sthet ja im TUT 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung 
das man Anpassungen vornehmen muss wen man das LCD an einem anderen Port 
betreiben will und die F_CPU mus ich ja auch noch Anpassen.

Jetzt zu meiner Frage reicht es wen ich das ganze in lcd-routines.h 
anpasse also.:
1
////////////////////////////////////////////////////////////////////////////////
2
// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
3
 
4
#ifndef F_CPU
5
#define F_CPU 8000000
6
#endif
Und hier
1
////////////////////////////////////////////////////////////////////////////////
2
// Pinbelegung für das LCD, an verwendete Pins anpassen
3
// Alle LCD Pins müssen an einem Port angeschlossen sein und die 4
4
// Datenleitungen müssen auf aufeinanderfolgenden Pins liegen
5
 
6
//  LCD DB4-DB7 <-->  PORTB Bit PB0-PB3
7
#define LCD_PORT      PORTB
8
#define LCD_DDR       DDRB
9
#define LCD_DB        PB0
10
 
11
//  LCD RS      <-->  PORTB Bit PB4     (RS: 0=Data, 1=Command)
12
#define LCD_RS        PB4
13
 
14
//  LCD EN      <-->  PORTB Bit PB5     (EN: 1-Impuls für Daten)
15
#define LCD_EN        PB5

Oder muss man sonst noch, wo was anpassen?

Ich habe das ganze Mal probiert der schwatze Balken kommt zum Anfang und 
geht dann auch wider.

Ich hänge mal mein Projekt an Dan kan man sich das ganze mall anschauen.

Danke
By Ferdinand

von Helfer (Gast)


Lesenswert?

Ich sehe im Pinout 
http://www.mikrocontroller.net/attachment/35049/ATmega_Pinout.pdf nix 
was grundsätzlich gegen PB0 bis PB5 spricht.

Die Anpassung von F_CPU solltest du in den Projekt Optionen von AVR 
Studio machen. Die Zeile in lcd-routines.h sollte unerheblich sein, ja 
es wäre wahrscheinlich besser, wenn dort nix stehen würde, so dass bei 
fehlendem F_CPU der Compiler meckern würde.

Weil die Definition von F_CPU in lcd-routines.h später als util/delay.h 
includiert wird ist sie auch witzlos.

test.c:
#include <util/delay.h>
#include "uart.h"
#include "i2c.h"
#include "lcd-routines.h"

von Ferdinand (Gast)


Lesenswert?

Ok ich hab zu danken, nun hab ich immer noch das Problem das ich kein 
txt auf dem lcd sehe wie schon erwähnt ich bekomme den schwarzen Balken 
und Dan geht er nach etwas weniger als einer Sekunde direkt nach dem 
Einschalten weg also vermute ich mal das mein vermute das LCD 
initialisiert und mehr nicht das heißt doch das die Hardware funst, ich 
habe keine Ahnung, wie ich weiter vorgehen könnte, um den Fehler 
einzukreisen?

Danke

by Ferdinand

von Helfer (Gast)


Lesenswert?

Hast du mal die Kontrastspannung geändert?

von Ferdinand (Gast)


Lesenswert?

Hi

Also wen ich am Poti drehe Dan kommen 2 schwarze Balken und wen ich 
wider zurück drehe Dan verschwinden sie.
Das LCD hat mit einer anderen lib schon mal getan allerdings wurde der 
Anschluss für RW mit benutzt jetzt habe ich die Hardware geändert und RW 
auf GND gelegt so wie es in TUT beschrieben ist also ich weis wirklich 
nicht mer eiter den ich wollte schon die lib von mikrocontroller.net 
benutzen die sieht sehr übersichtlich aus.

Danke
by Ferdinand

von Ferdinand (Gast)


Lesenswert?

Hi

Hat den keiner eine Idee einen ansonsten wie ich vor Gehen könnte ich 
hab schon so fiel durch probiert und weis nicht mehr weiter?

by Ferdinand

von Helfer (Gast)


Lesenswert?

Eine LCD Ansteuerung zu Debuggen ist kein schöner Job, besonders wenn 
man noch wenig Erfahrung mit Elektronik/µCs hat und einem die richtigen 
Werkzeuge fehlen. IMHO ist die LCD-Ansteuerung die erste größere Hürde 
beim µC-Einstieg, weil viel Eigeninitiative gefordert ist. Die 
Ferndiagnose und Hilfe ist eigentlich nur bei offensichtlichen 
Schnitzern möglich (falsche Verkabelung o.ä.).
1
int main (void) {
2
  // POS #1
3
4
// Initialisierung des LCD
5
  // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
6
  // verschwunden sein
7
8
lcd_init();
9
10
// Text in einzelnen Zeichen ausgeben
11
  lcd_data( 'T' );
12
  lcd_data( 'e' );
13
  lcd_data( 's' );
14
  lcd_data( 't' );
15
16
  // POS #2

Bei deinem Testprogramm könntest du an POS #1 eine Wartezeit einlegen, 
damit sich das LCD nach dem Einschalten der Schaltung korrekt selbst 
initialisieren kann, ohne dass es durch das nachfolgende lcd_init(); 
gestört wird. Ideal wäre es, wenn die Wartezeit z.B. mit einer Debug-LED 
an einem µC-Pin angezeigt wird.

Wenn deine Spannungsversorgung eher schwachbrüstig für die Schaltung 
dimensioniert ist, solltest du mal versuchen die Zahl der Verbraucher in 
deiner Schaltung zu verringern. Ein nicht zu unterschätzender 
Verbraucher kann das Backlight des LCD sein. Eine Beurteilung der 
Schaltung kannst du bekommen, wenn du den Schaltplan zeigst.

Damit du siehst ob das LCD reagiert, ist es sinnvoll ein kleineres 
Programm zu haben, also im Prinzip eins bis POS #2 und dann eine leere 
Endlosschleife. Dann kannst du auch am Kontrast drehen bis hoffentlich 
das "Test" zu sehen ist.

Beim Wechsel zwischen Flashen und Testen habe ich mir angewöhnt, die 
Schaltung komplett von der Versorgung zu nehmen. Damit kann man 
unerwünschte Effekte die vom ISP-Programmieren kommen ausschalten.

von Ferdinand (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Ich habe einen Fehler finden können (wohl eher durch zufall).
Ich habe einen Quarz mit 8MHz an meinem µC.

Meinem Terminal Verbindung über den UART geht mit Quarz nur das LCD geht 
nicht, wen ich nun den Quarz raus nehme dann geht zwar das LCD aber die 
Verbindung zum UART geht nicht mehr.

Was könnte dort los sein ich hänge noch mal mein Projekt an dann kann 
man es sich anschauen, den mir ist noch kein Fehler aufgefallen.

Das ist doch bestimmt wider irgendetwas Banales (-;
zu mindest weis ich jetzt in welche Richtung ich suchen muss Freu (-:

Danke

by Ferdinand.

von Helfer (Gast)


Lesenswert?

Wenn du deine Schaltung ohne Quarz betreibst - welche Taktfrequenz 
benutzt du: weniger als 8 MHz?

Und die Source bzw. das Projekt speziell der Eintrag bei F_CPU ist auf 
die neue Taktfrequenz geändert? Ohne die Sourceanpassung läuft dein µC 
"worst-case" 8x langsamer als mit Quarz.

Deine Beschreibung weist für mich darauf hin, dass das Timing der 
LCD-Routinen bei 8 MHz zu knapp ist und wichtige Wartezeiten nicht 
eingehalten werden.

In 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung 
gibt es eine zentrale Stelle in der das Timing definiert wird: In 
lcd-routines.h unterhalb des Kommentars
//////////////////////////////////////////////////////////////////////// 
////////
// LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden)

Als ersten Versuch könntest du dort die Zeiten mal hochsetzen. Hast du 
eigentlich meinen Tipp bzgl. Warten bei POS #1 mal getestet?

von Ferdinand (Gast)


Lesenswert?

Hi

Ja dein 1. Tipp habe ich ausprobiert hat aber nichts gebracht.

Ich habe jetzt die Zeiten in der initialisierung immer schrittweise 
angehoben.

Jetzt geht es, hätte ich nie gedacht, dass es an den warte Zeiten Ligen 
kann.

Fielen dank für deine Hilfe.

P.S. hier habe ich noch mal den Code teil den ich geändert habe.

lcd-routines.h
1
////////////////////////////////////////////////////////////////////////////////
2
// LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden)
3
 
4
#define LCD_BOOTUP_MS           100
5
#define LCD_ENABLE_US           100
6
#define LCD_WRITEDATA_US        46
7
#define LCD_COMMAND_US          42
8
 
9
#define LCD_SOFT_RESET_MS1      15
10
#define LCD_SOFT_RESET_MS2      5
11
#define LCD_SOFT_RESET_MS3      5
12
#define LCD_SET_4BITMODE_MS     10
13
 
14
#define LCD_CLEAR_DISPLAY_MS    5
15
#define LCD_CURSOR_HOME_MS      5

Danke
by Ferdinand

von Helfer (Gast)


Lesenswert?

Sehr gut! Und ich finde gut, dass du die Rückmeldung gibst!

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
Noch kein Account? Hier anmelden.