www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeilendefinitionen für 4x20 LCD


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Thomas P. (thomas_p52)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo

Ich hab mir nach dem Tutorial 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tu...) 
bzw der Erweiterung dazu 
(http://www.mikrocontroller.net/articles/Erweiterte...) 
eine LCD Steuerung zusammengebastelt, funktioniert so weit auch gut, bis 
auf die Positionen....

Im Header File kann man ja die Zeilendefinitionen einstellen, und sind 
auch schon für ein 4x16 LCD da, nur wie siehts da mit einem 4x20 aus? 
Die ersten zwei Zeilen werden richtig angezeigt, nur Zeile 3 am Ende von 
Zeile 1 bzw. Zeile 4 am Ende von Zeile 2. Auch mit meinem Code ändert 
sich nichts an der Sache. Es bleibt genau gleich wie beim 4x16 Code

Wie gehört es richtigerweise?

4x16:
////////////////////////////////////////////////////////////////////////////////
// Zeilendefinitionen des verwendeten LCD
// die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen passen
// bei anderen Zeilenlängen müssen diese Einträge angepasst werden
 
#define LCD_DDADR_LINE1         0x00
#define LCD_DDADR_LINE2         0x40
#define LCD_DDADR_LINE3         0x10
#define LCD_DDADR_LINE4         0x50

und meine Version 4x20:
////////////////////////////////////////////////////////////////////////////////
// Zeilendefinitionen des verwendeten LCD (4x20)
 
#define LCD_DDADR_LINE1         0x00
#define LCD_DDADR_LINE2         0x40
#define LCD_DDADR_LINE3         0x14
#define LCD_DDADR_LINE4         0x54

mfg thomas

Autor: Hans Peter B. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Eine Supererklärung für dein Problem findest du unter
http://www.sprut.de/electronic/lcd/index.htm

Hans Peterhttp://www.sprut.de/electronic/lcd/index.htm

Autor: Thomas P. (thomas_p52)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo

Hab grad eine Lösüng gefunden :D

Ich hab mir ein Programm geschrieben, mit dem ich Zeichen für Zeichen 
durchgehe und hab so die richtigen Adressen herausgefunden, diese darf 
ich aber nicht hexadezimal addieren sondern normal, dezimal:

Line1: 0
Line2: 40
Line3: 20
Line4: 84

Dies kann ich aber komischerweise nicht in den defines eintragen, 
sondern muss es direkt ins lcd.c eintragen. Weiß jemand warum?

Abfrageprogramm:
#ifndef F_CPU
  #define F_CPU 16000000
#endif

#include <avr/io.h>
#include "lcd.h"
#include <util/delay.h>
#include <stdlib.h>
#include "rncontrol.h"


int main(void)
{
  int i=0, data;
  char number[2];
  
  lcd_init();    //LCD initialisieren

        while(1)
        {
    lcd_clear();
    data = LCD_SET_DDADR + i;
    lcd_command(data);
    lcd_string("x");
    itoa(i,number,10);
    lcd_string_xy(1,1,number);
    _delay_ms(200);
    
    REDO:{};
    
    if(button()==2)
      i++;
    else if (button()==4)
      i--;
    else
      goto REDO;
  }
}

Autor: H. P. Bolliger (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
itoa() heisst integer to ASCII und erwartet bei dir die Zählvariable i 
als int. Darum wäre es einfacher i direkt in einen ASCII-char zu wandeln
Hans Peter

Autor: Thomas P. (thomas_p52)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ok, dass wär auch möglich, aber ich stell mir die Frage warum ich die 
Werte direkt ins lcd.c File schreiben muss, und nicht wie eigentlich 
vorgesehen über die #define Anweisung im lcd.h machen kann....

mfg thomas

Autor: H. P. Bolliger (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Also wenn, wie du in der Eingangsfrage beschrieben hast, die 
Definitionen in LCD.h mit Hex-Werten funktionieren, dann sollten auch 
Integer-Werte kein problem darstellen. -> Die Verzögerungswerte weiter 
oben sind auch in dezimal eingetragen!
Wobei bei den, mit deinem Abfrageprogramm ermittelten Adressen, kann der 
Wert für Linie 2 nicht stimmen - der sollte 64 dez betragen.
Hans Peter

Autor: Thomas P. (thomas_p52)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo
Doch, der Wert stimmt, es funktioniert ;)

Das Problem ist, ich kann dort eintragen was ich will, ändern tut sich 
nichts....

mfg thomas

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net