PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Display zeigt nichts an.



KrosseKrabbe
13.10.2011, 15:12
Hallo,

habe zum testen ein Programm geschrieben das gar nichts weiteres macht als am Port B von meinem Atmega48 4 Datenbits zum LCD Display sendet. Hab das ganze mit der Grundlage vom Anfängertutorial auf mikorcontroller.net gemacht. Die Beschaltung sollte soweit korrekt sein. Ich nutze für das Display die Libraries von peter Fleury die ja sehr bekannt sind und wohl auch sehr häufig eingesetzt werden.

Hintergrundbeleuchtung funktioniert. Ich sehe in einer Zeile schwarze Balken die ich mit dem Kontrast (Poti) einstellen schärfer und schwächer stellen kann, habe das ganze so eingestellt das ich die schwarzen balken gerade noch so sehe. Es handelt sich um ein 2x16 Zeilen Display LCD TC1602A-09.

Ich habe unten mal das Programm angehangen.

Zur Frage: Warum sehe ich die Zeichen nicht die ich sende? Nutze ein STK500 Starterkit zum übertragen. Die LED zeigt nach dem übertragen an das alles in Ordnung ist. (Software = AVR Studio 5)



#include <avr\io.h>
#include <avr\interrupt.h>
#include <stdlib.h>
#include <inttypes.h>
#include "lcd.h"

void initial(void)
{
DDRD = 0xff; // PortD Ausgänge
DDRC = 0x00; // PortC Eingänge
DDRB = 0xff;
}


void print4(unsigned int x)
{
unsigned int y;
y=x/1000;lcd_data(y+0x30);x-=(y*1000);
y=x/100;lcd_data(y+0x30);x-=(y*100);
y=x/10;lcd_data(y+0x30);x-=(y*10);
lcd_data(x+0x30);
}


int main(void)
{


int variable = 0;


initial();
lcd_init(LCD_DISP_ON);


while(1)
{


variable = 9876;

lcd_data( 'A' );
lcd_data( 'D' );
lcd_data( 'C' );
lcd_data( '0' );
lcd_data( '=' );
print4(variable);
lcd_gotoxy( 0, 1 );


}
return 0;
}





VIELEN DANK fürs Anschauen!!!

Hubert.G
13.10.2011, 15:39
Wenn du einen schwarzen Balken siehst, dann ist das LCD nicht initialisiert.
In lcd.h die Zuordnung LCD-Pin zu µC-Pin richtig eingetragen?

KrosseKrabbe
13.10.2011, 16:00
Das wird es sein! Guter Tipp. Welchen Pin muss ich da angeben? die Datenleitungen sind angeschlossen am uC: 11,12,13,14. Am LCD Display habe ich die Datenbits DB4,5,6,7 angeschlossen die an Anschluss 11,12,13,14 liegen. Wenn ich in die lcd.h gehe finde und das ganze editiere sieht es so aus (Ausschnitt):



#define LCD_PORT PORTB /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 11 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 12 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 13 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 14 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_RS_PIN 4 /**< pin for RS line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_RW_PIN 5 /**< pin for RW line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_E_PIN 6 /**< pin for Enable line */

Die Datenbits 0-3 liegen frei. Das Problem ist nach der Änderung ist es immernoch genauso wie vorher. habe ich die Pins falsch angegeben?

Hubert.G
13.10.2011, 16:09
Wie kommst du auf 11,12,13,14 , sollte das nicht 0 bis3 sein? Bei mir sieht das so aus:

#define LCD_PORT PORTB /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT PORTB /**< port for RS line */
#define LCD_RS_PIN 4 /**< pin for RS line */
#define LCD_RW_PORT PORTB /**< port for RW line */
#define LCD_RW_PIN 5 /**< pin for RW line */
#define LCD_E_PORT PORTB /**< port for Enable line */
#define LCD_E_PIN 6 /**< pin for Enable line */

KrosseKrabbe
13.10.2011, 16:12
So war es ja Standardäßig eingestellt bevor ich das geändert hatte. Ging ja so nicht.

Hubert.G
13.10.2011, 16:16
So ist es aber sicher richtig.
Das Datenblatt ist sehr dürftig, hast du mal die Einstellung
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
mit einer 1 probiert.

KrosseKrabbe
13.10.2011, 16:23
AH, habe mich bei einer einstellung vertan habe den Enable Pin falsch angegeben .... grrrr

Nun ist das Display gesäubert von Balken... Die gewünschten Zahlen sind dort allerdings nicht zu sehen. Wodran könnte das den nun noch liegen?

KrosseKrabbe
13.10.2011, 16:54
RW liegt bei mir laut dem Schaltungsbeispiel auf GND. Vielleicht liegt ja da der Fehler. habe dort einfach einen freien port angegeben. in diesem Fall PORTB6.

Hubert.G
13.10.2011, 17:02
Dann ist es klar das es nicht funktioniert, R/W ist notwendig zur Busy-Abfrage.

Hubert.G
13.10.2011, 17:05
Da ist die *.h verloren gegangen.
Hier kannst du ohne R/W einstellen.

KrosseKrabbe
13.10.2011, 17:32
Danke.

Funktioniert aber genausowenig. Hab noch den Fehler ausgeglichen, dass ich nen 16 Zeilen Display habe und kein 24er. Außerdem ist mein E an PB5 und nicht an PB6, das habe ich dann auch geändert. Für RW hab ich nun Port 6 angegeben aber der ist ja garnicht angeschlossen. Ansonsten hab ich den Rest so gelassen....

KrosseKrabbe
13.10.2011, 17:34
Achja, ich hab drauf geachtet das ich die neue Datei ins Projekt korrekt eingebunden habe.

Hubert.G
13.10.2011, 17:45
Ich arbeite mit AVR-Studio4, hab nur einen Mega8, Display ist ein TC1602E.
Die Lib funktioniert sicher, schon x-mal verwendet.
Programmierstecker abgezogen? Die Leitungen werden fürs LCD und Prog verwendet.

KrosseKrabbe
13.10.2011, 18:55
Der sagt mir aufeinmal die ganze zeit: Verifying Flash...Failed! Wodran kann das nun wieder liegen habe nichts verändert.

Programmierstecker von SPROG2 auf ISP6PIn habe ich drangelassen. Auch bei abziehen funktionierts nicht

KrosseKrabbe
13.10.2011, 19:07
Ich glaub ich gebs auf. Ich kriege keinen Buchstaben auf das Display. Egal was ich teste. Hab nun auch probiert die RW leitung zu legen und die in der lcd.h richtig zugeordnet. Funktioniert immernoch nicht. Der verify Flash fehler ist nach einem Programmneustart weg.