Halllo Zusammen, ich schlage mich seit einigen Tagen mit LCD Ansteuerung herum. Jezt bin ich soweit dass der Code ohne Fehler und ohne Warnungen kompeliert wird und auf den uC übertragen werden kann. Leider passiert immer noch nichts am LCD. :-( Könnte bitte jemand einen Blick auf den Code werfen? Habe ich eventuell einen Fehler in der lcd-routines.h bei der Pinbelegung gemacht? Ich wäre sehr dankbar dafür. Meine Hardware: - AVR Dragon (JTAG) - Pollin ATmel Evaluationboard - Pollin ADDON Board - ATMega16 - AVR-Studio ------------------------------------------------------------------------ Der Code ist folgender: befindet sich im Anhang. ------------------------------------------------------------------------
Die lcd-routines.h habe ich auch mal verändert zu (siehe Code) ohne dass es irgend etwas gebracht hat. ----------------------------------------------------- void lcd_data(unsigned char temp1); void lcd_string(char *data); void lcd_command(unsigned char temp1); void lcd_enable(void); void lcd_init(void); void lcd_home(void); void lcd_clear(void); void set_cursor(uint8_t x, uint8_t y); #define F_CPU 16000000 #define CLEAR_DISPLAY 0x01 #define CURSOR_HOME 0x02 #define LCD_PORT PORTA #define LCD_DDR DDRA #define LCD_RS PB2 #define LCD_EN PB0
Hi, welches Display hast du und wie is das verdrahtet? Ich hatte auch lange probleme und kann evtl. helfen... gruß matthias
Ich habe das Pollin Adon Board origilan aufgebaut. Da muss nichts verdrahtet werden so weit ich das verstanden habe. Ich hände mal das Datenblatt des Addon-Boards an. Als Display kommt ein TC1602A-08 (hehört zum Addon-Board dazu). Vielen Dank.
Mathias schrieb: > #define LCD_PORT PORTA > #define LCD_DDR DDRA > #define LCD_RS PB2 > #define LCD_EN PB0 sollte LCD_PORT und LCD_DDR nicht auch auf PORTB / DDRB gesetzt werden ?
Ich kenke LCD_PORT gibt an welche Ports die Daten (4bit bzw. 8bit) übertragen. Bei Pollin Addonboard sind das die Pins am Port A. Oder täusche ich mich total?
Hast du mal das Testprogramm von Pollin da reingeflasht? Dann auch mal am Kontrast rumgedreht? Im Basicprogramm steht folgende Pinbelegung #if _chip = 18 'Mega16 Lcd_db4 Alias Portb.2 Lcd_db5 Alias Portb.3 Lcd_db6 Alias Portb.4 Lcd_db7 Alias Portb.5 Lcd_e Alias Portb.6 Lcd_rs Alias Portb.7 Also andere Pinbelegung als im Tutorial!
hier definierst Du aber PORT A sollte dann doch wohl PORT B sein > #define LCD_PORT PORTA > #define LCD_DDR DDRA
hmm,.... zu diesem Display "TC1602A-08" finde ich leider kein vernüftiges Datenblatt in dem die Zeiten und die Befehlcodes für z.B. 4-Bus angegeben sind. Ich habe deine Init-Funktion eben mit meiner verglichen und ich habe hinter den lcd_clear() am Ende noch eine Wartezeit von 5ms. Ich glaube, das hat mir geholfen. ansonsten habe ich diese links gefunden, vielleicht sind sie für dich ja interessant (sie sind über dein display): http://home.iae.nl/users/pouweha/lcd/lcd0.shtml#visible_ddram http://www.rn-wissen.de/index.php/Bascom_und_LCD%27s#Sonderfall:_LCDs_mit_mehr_als_80_Zeichen http://www.roboternetz.de/phpBB2/printview.php?t=47810&start=0 Gruß, Matze
@holger Was bedeutet das konkret für mein Programm? Ich habe die Pins ja über die lcd-routines.h eingestellt. Habe ich etwas übersehen?
define LCD_PORT PORTB #define LCD_DDR DDRB #define LCD_RS PB4 #define LCD_EN PB5 #define LCD_DB4 PB0 #define LCD_DB5 PB1 #define LCD_DB6 PB2 #define LCD_DB7 PB3 DB4 bis DB7 des LCD sind mit PB0 bis PB3 des AVR verbunden
>@holger >Was bedeutet das konkret für mein Programm? Das es nicht funktionieren kann. >Ich habe die Pins ja über die lcd-routines.h eingestellt. Ja, und zwar falsch. Brenn erstmal das Testprogramm von Pollin da rein um zu sehen ob das Display damit funktioniert. Dann sehen wir weiter.
Das Pollin-Addon-Board siehe vor, mit den Jumpern folgende Verbindungen zu machen: - AVR Port A Pin 0..7 - LCD DB0..7 - AVR Port B Pin 0 - LCD Enable - AVR Port B Pin 1 - LCD R/W - AVR Port B Pin 2 - LCD RS (ohne Gewähr; vgl. Schaltplan Addon-Board und Evaluation-Board) Die lcd-routines.c/.h, die hier herumgeistern gibt es in zwei Versionen. Beide nutzen nur E(nable), DB4..7 und RS. DB0..3 wird nicht genutzt, R/W muß immer low sein. Die beiden Varianten unterscheiden sich darin, ob alle genutzten Pins (DB4-DB7, RS, E) auf einem Port liegen müssen (ursprüngliche Version, Peter Danegger?), oder ob die genutzten Pins über mehrere Ports verteilt werden können. Die erste Version kannst du nicht nehmen mit dem Addon-Board, wenn nur die Jumper gesteckt werden. Dem Auszug aus der Headerdatei von Ingo Laabs zufolge hast du diese Version. Mit dieser Version musst du die Pinbelegung für DB4..7 und Enable und RS in der Headerdatei sinnvoll setzen, die Jumper ziehen und durch Drahtbrücken passend zur Headerdatei ersetzen. Oder: du nimmst die Version, bei der die Pins frei über Ports verteilt werden können und kannst dann die Jumper nehmen. Die Jumper für DB0..3 kannst du weglassen. R/W kannst als Jumper setzen und musst dann aber in deinem Programm dafür sorgen, daß es immer low ist, oder du lässt den Jumper für R/W weg und steckst eine Drahtbrücke von Masse zum LCD-Pin R/W. Ich habe eine bei mir mit dem Addon-Board gelaufene Version gestern erst hier abgestellt: Beitrag "Atmel Addonboard - LCD ansteuerung" Da steht im Kommentar auch drin, was verbunden werden muß (ohne die Jumper).
oder bist du der von gestern? Hast du das denn mal probiert, oder kommt die Frage jetzt jeden Tag?
ich denke, er is das von gestern. mal schauen, ob wir morgen wieder von ihm lesen werden :) aber als ich angefangen habe, war ich auch noch so... :)))
Ja, ich bin der von Gestern. Werde mich jetzt anmelden und habe dann auch einen konstanten Namen :-) Nein, die Frage kommt natürlich nicht jeden Tag. Die verschiedenen Versionen und die recht komplexe Materie (zumindest am Anfang) haben mich dazu bewegt die Frage noch einmal zu stellen. Ich fange an durchzubliken. Allerdings noch nicht ganz.
Außerdem sehe ich gerade, daß bei dir F_CPU auf 8000000 steht. Der Atmega16 auf dem Pollin-Board läuft aber doch mit 16 MHz, oder nicht? Dann muß F_CPU auf 16000000 stehen. Wobei sich die Frage stellt, ob du die Fuses überhaupt so gesetzt hast, daß er mit dem externen Quartz (16MHz) läuft; wenn nicht, müsstest du das auch nachholen - sonst läuft er mit etwa 1 MHz ab Werk.
Dann lies dir doch bitte mal meinen Quelltext von gestern durch, da steht im Kommentar, was wie verdrahtet werden muß. Wenn du das machst und die lcd-routines.h entsprechend einstellst, sollte es klappen - und falls Kontrast und F_CPU stimmen und die Fuses natürlich. Immerhin läuft das bei mir so auf dem Addon-Board. Aber nicht darüber stolpern, daß die Anschlüsse auf dem Addon-Board ziemlich dusselig beschriftet sind: "PA Pin1" ist beim AVR Port A Pin 0; "PA Pin2" ist Port A Pin 1 usw.; entsprechend auch für die anderen Ports.
DANKE @ ALL und vor allem @ Klaus. Das LCD gibt Lebenszeichen von sich nachdem ich es verdrahtet habe selbst verdrahtet habe (ohne JUMPER). Jetzt kann ich das Programm von Klaus anfangen zuverstehen und an meine Bedürfnisse anpassen. Nochmals Danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.