Forum: Mikrocontroller und Digitale Elektronik Hilfe bei C - Routine für LCD


von Steffi Wevering (Gast)


Lesenswert?

Hallo,
habe mir einen ATMega16 besorgt und ein 2x24 LC Display besorgt und es
angeklemmt,
nun weiß ich folgendes aus den Tutorials die ich auf dieser seite
gefunden habe, mehr habe ich leider noch nicht rausgefunden, da die
ganzen beispiele in asm sind, wenn ihr mir helft, werde ich daraus ein
tutorial für c-code und display erstellen, habe schon zwei tage lang
versucht was auszugeben, diese seite war bisher die hilfreichste.
also hier mein programm, welches auch die Pinbelegung enthält:

/*
  Port  Display
  PD0
  PD1    RS
  PD2    RW
  PD3    E
  PD4    D4
  PD5    D5
  PD6    D6
  PD7    D7
*/
#include <avr/io.h>
#include <stdint.h>

void main(void)
{
DDRA  =  0xff;    //Port A als Ausgang definieren
PORTA  =  0xFF;    //alles  aus
DDRD  =  0xff;    //Port D als Ausgang definieren
PORTD  =  0xFF;    //alles  aus

while(1)
{
  /*Routine um das Display zu initialisieren, d.h.*/
  /*Enable auf High, RW auf Low und RS auf High  */

  PORTD &= ~(1 << PD3);    //PD3 (E)  auf high
  PORTD &= ~(0 << PD2);    //PD2 (RW) auf low
  PORTD &= ~(1 << PD1);    //PD1 (RS) auf high
  }
}

So weiter bin ich leider noch nicht gekommen, ok ich koennte vielleicht
noch die Initial-Routine ausserhalb der while schleife legen, wenn das
display immer an sein sollte.
aber wie könnte ich jetzt einfach nur den Text:"Hallo!" auf dem
Display erscheinen lassen ??

wäre euch echt dankbar, ist alles sehr neu für mich, ich bastle wie
gesagt auch aus den beiträgen nen c-tut für lcd routinen !!
DANKE, Steffi W

von Karl H. (kbuchegg)


Lesenswert?

Such im Google nach 'Peter Fleury'
Auf seiner Web-Site findest Du fertige LCD-ansteuer-
Funktionen in C.
In lcd.h gibst Du Deine Port-Konfiguration bekannt, stellst
nach die Taktfrequenz ein und ... fertig.

D.h. solange Dein Display einen Standard-Controller benutzt.

von Florian (Gast)


Lesenswert?

Kannst auch mal das Programm bei mir anschauen:
http://www.blafusel.de/misc/atmega8_io.html#6 Ist nicht ganz so
aufgebläht und vielleicht mehr was für den Einstieg.

von Winne (Gast)


Angehängte Dateien:

Lesenswert?

Siehe Anhang

Zwar 8bit modus aber das prinzip wird klar.

von Steffi Wevering (Gast)


Lesenswert?

Hi Winne,
vielen Dank für die super *.h Datei, die ist echt sehr übersichtlich
gehalten und sehr vielseitig, nur habe ich leider keinerlei ahnung, wie
ich diese auf mein 4bit-modus display anpassen müsste....?
ich habe erstmal versucht so mit dem 8bit-modus was auszugeben, geht
aber nicht, hier mein programm

#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>
#include <batron.h>

void main(void)
{
  LCD_Open();
  //LCD_Cursor_On();
  LCD_Write_Str('Hallo');
}

von Steffi Wevering (Gast)


Lesenswert?

klappt irgendwie alles nicht, ich glaub mein lc display is defekt

von Steffi Wevering (Gast)


Lesenswert?

Bitte, sagt mir doch was ich falsch mache

von Steffi Wevering (Gast)


Lesenswert?

Habe ich das denn jetzt wenigstens richtig verdrahtet nach folgendem
schema, welches in der lcd.h steht (hier der auszug)

#define LCD_PORT         PORTA        /**< 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      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     */

also wie folgt habe ich es angeschlossen (die pin sachen brauch ich
doch nur, wenn ich vom displ lesen will oder ??)

D4 an PORTA0, D5 an PORTA1, D6 an PORTA2, D7 an PORTA3, RS an PORTA4,
RW an PORTA5, E an PORTA6

müsste doch so richtig sein oder ??

von Steffi Wevering (Gast)


Lesenswert?

:)
ratet mal, da steht was aufm display !!
riesenfreude, es klappt !!! :)
Danke für die vielen heissen Tipps !!

von Simon K. (simon) Benutzerseite


Lesenswert?

Nich immer sofort aufgeben ;)

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.