Zeilendefinitionen für 4x20 LCD

OP #2625495
Hallo

Ich hab mir nach dem Tutorial 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung) 
bzw der Erweiterung dazu 
(http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung) 
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:
1
////////////////////////////////////////////////////////////////////////////////
2
// Zeilendefinitionen des verwendeten LCD
3
// die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen passen
4
// bei anderen Zeilenlängen müssen diese Einträge angepasst werden
5
 
6
#define LCD_DDADR_LINE1         0x00
7
#define LCD_DDADR_LINE2         0x40
8
#define LCD_DDADR_LINE3         0x10
9
#define LCD_DDADR_LINE4         0x50

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

mfg thomas
OP #2625602
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:
1
#ifndef F_CPU
2
  #define F_CPU 16000000
3
#endif
4

5
#include <avr/io.h>
6
#include "lcd.h"
7
#include <util/delay.h>
8
#include <stdlib.h>
9
#include "rncontrol.h"
10

11

12
int main(void)
13
{
14
  int i=0, data;
15
  char number[2];
16
  
17
  lcd_init();    //LCD initialisieren
18

19
        while(1)
20
        {
21
    lcd_clear();
22
    data = LCD_SET_DDADR + i;
23
    lcd_command(data);
24
    lcd_string("x");
25
    itoa(i,number,10);
26
    lcd_string_xy(1,1,number);
27
    _delay_ms(200);
28
    
29
    REDO:{};
30
    
31
    if(button()==2)
32
      i++;
33
    else if (button()==4)
34
      i--;
35
    else
36
      goto REDO;
37
  }
38
}
Gast #2625641
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
Gast #2625664
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.