mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme beim ansteuern eines LCD TC1602A-09 + ATMEGA8


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

Bewertung
0 lesenswert
nicht lesenswert
Also, ich hab hier ein LCD 16*2 und einen ATMEGA 8.
Include verwende ich Peter Fleury's "lcd.h".
Und habe ich die nötigen Einstellungen laut: 
http://www.rn-wissen.de/index.php/LCD-Modul_am_AVR vorgenommen.
Das Ganze soll natürlich im 4-Bit Modus laufen. Bis jetzt bekomme ich 
aber nur 8 Punkte zu sehen. Verkabelt ist, dass ganze wie in dem 
angehängtem Bild. Port ist wirklich PORTC. Die freien Datenleitungen die 
sich im 4-Bit Modus ergeben habe ich nicht auf Masse liegen, oder ist 
das das Problem?
/** 
 *  @name  Definitions for MCU Clock Frequency
 *  Adapt the MCU clock frequency in Hz to your target. 
 */
#define XTAL 8000000              /**< clock frequency in Hz, used to calculate delay timer */


/**
 * @name  Definition for LCD controller type
 * Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.
 */
#define LCD_CONTROLLER_KS0073 0  /**< Use 0 for HD44780 controller, 1 for KS0073 controller */

/** 
 *  @name  Definitions for Display Size 
 *  Change these definitions to adapt setting to your display
 */
#define LCD_LINES          2    /**< number of visible lines of the display */
#define LCD_DISP_LENGTH    16     /**< visibles characters per line of the display */
#define LCD_LINE_LENGTH  0x40     /**< internal line length of the display    */
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
#define LCD_START_LINE3  0x14     /**< DDRAM address of first char of line 3 */
#define LCD_START_LINE4  0x54     /**< DDRAM address of first char of line 4 */
#define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */

#define LCD_IO_MODE      1         /**< 0: memory mapped mode, 1: IO port mode */
#if LCD_IO_MODE
/**
 *  @name Definitions for 4-bit IO mode
 *  Change LCD_PORT if you want to use a different port for the LCD pins.
 *
 *  The four LCD data lines and the three control lines RS, RW, E can be on the 
 *  same port or on different ports. 
 *  Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on
 *  different ports. 
 *
 *  Normally the four data lines should be mapped to bit 0..3 on one port, but it
 *  is possible to connect these data lines in different order or even on different
 *  ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.
 *  
 */
#define LCD_PORT         PORTC        /**< 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    4            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    5            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    6            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    7            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       3            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       2            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        1            /**< pin  for Enable line     */
...


Hier sieht man mein "Programm"
#include <avr/io.h>
#include <stdint.h>
#include <lcd.h>

DDRC = 0xff;

int main(void)
{
   while(1) 
   {
    /* Initialisiere Display, Cursor aus */
    lcd_init(LCD_DISP_ON);

    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
    lcd_clrscr();
        
    /* String auf Display anzeigen */
    lcd_puts("Hello world.");

   }   
}

Ich bekomme gar nichts (bis auf die 8 Blöcke). Es flakert nicht ein 
mal:(.
Kann mir wer weiter helfen?

MFG

Autor: JTR (Gast)
Datum:
Angehängte Dateien:
  • preview image for 1.JPG
    1.JPG
    52,7 KB, 445 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Fast vergessen.

Ich verwende das AVR Studio 4 und den WIN-AVR GCC Kompiler.
Meine "lcd.c" hab ich dem Projektverzeichis hinzugefügt.

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

PORTC beim Mega 8

PC0-5 = ADC0-5
PC6   = RESET
PC7   = ... nicht vorhanden!

mal wieder das Datenblatt ignoriert?

MfG

Autor: JTR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohhhh,
derb.

Danke!!! Werde es gleich probieren :)

Autor: JTR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also es geht YaY. Aber leider nur die ersten 8 Zeichen :(. Woran kann, 
das liegen?
MFG

Autor: Turbotoni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn nen "YaY" ?
Und welche Software verwendest du?

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also bei gingen auch mal nur die ersten 8 Stellen.
Bei mir war damals das Display von Pollin defekt.

Autor: JTR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na Super :(.

Ja muss mich eh nach einem neuen umschaun weil ich 2*16 Zeichen brauch.

Autor: JTR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere Sache.

Ich arbeite ja mit der Fleury Include. Auf dem Display würde ich gern 
eine Float- Zahl (Gleitkomma) darstellen. Wie gehe ich das an?
Es gibt zwar die Funktion "lcd_puts()", aber die Funktion akzeptiert nur 
Strings.....

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Display ist wahrscheinlich nicht defekt. Es ist entweder falsch 
initialisiert worden oder hat eine ungewöhnliche Anordnung im 
Display-RAM!

Gib einfach mal weiter Zeichen aus. Vielleicht erscheinen sie ja 
iregendwann in der Anzeige.

Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JTR schrieb:
> Auf dem Display würde ich gern eine Float- Zahl (Gleitkomma) darstellen. > Wie 
gehe ich das an?

s(n)printf(..) vielleicht?
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

Und dann mit lcd_puts(..) auf Display, vielleicht?

Autor: JTR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Alternative! Danke.

Aber die "sprintf" - Funktion is leider sehr speicherintensiv. Beim 
benützen der Funktion sind 60% meines Flash- Speichers weg :(. Mal 
schaun ob sich, das ausgeht.

http://www.c-for-dummies.com/lessons/float2string/

Hier ist dein Vorschlag etwas besser verständlich ;).

MFG

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.