Anzeige Display

Gast #4859510
Lesenswert?

Hallo Gemeinde
möchte die Adresse eines Gerätes auf dem Diplay mit I2C darstellen. Dazu 
geb ich Daten ein:
1
#define adr1_w 0x40        // Adresse I2C 0x40
Die Anzeige soll damit kommen:
1
lcd_putcharlc(4,10,(adr1_w));

Habe das gleich auch mit

lcd_printlc
lcd_printlc_P
lcd_printlcc
lcd_printlcc_P

getestet. Kommt immer eine Fehlermeldung. Was ist falsch?
Ausgabe eines Textes geht ohne Probleme
Proramm in C Atmega
LG Pl
Gast #4859591
Lesenswert?

Benutze dieses Teil dazu:
1
bool lcd_printlcc(uint8_t line, uint8_t col, char *string) {  
2
    
3
    if (!lcd_gotolc(line, col)) return false;
4
      
5
  while(*string) {
6
    lcd_putchar(*string++);
7
    col++;
8
    if(col > LCD_COLS) {
9
      line++;
10
      col = 1; 
11
        if(line > LCD_LINES) {
12
          line = 1;
13
        }
14
            lcd_gotolc(line, col);
15
    }
16
  }
17
  return true;
18
}
#4859613
Lesenswert?

Zum Beispiel durch den Einsatz von sprintf(...). Diese Funktion wandelt 
eine Zahl in einen String um.
Du könntest Dir auch eine Funktion schreiben, die eine Ganzzahl in einen 
Hexstring wandelt oder eine Zahl (0..15) in (0..F).


Ohne zusätzliche Funktion sieht es Quick'n'Dirty so aus:
1
lcd_putcharlc(4,10,'0');
2
lcd_putcharlc(4,11,'x');
3
lcd_putcharlc(4,12,(adr1_w & 0xF0) < 0xA0 ? ('0'+(adr1_w>>4  )) : ('A'-10+(adr1_w>>4  )));
4
lcd_putcharlc(4,13,(adr1_w & 0x0F) < 0x0A ? ('0'+(adr1_w&0x0F)) : ('A'-10+(adr1_w&0x0F)));
#4859624
Lesenswert?

Paul schrieb:
> Was ist falsch?

Du rufst
1
bool lcd_printlcc(uint8_t line, uint8_t col, char *string)
mit
1
lcd_putcharlc(4,10,0x40);
auf und wunderst dich über einen Fehler ?

Erwartest du, daß eine 4-Zeichen-Folge "0x40" ausgegeben wird
oder erwartest du, daß ein @ ausgegeben wird ?

lcd_putcharlc wäre für die Ausgabe eines @ richtig,
du wolltest wohl lcd_putcharlcc aufrufen.

Besorge dir mal ein C Grundlagenbuch.

Aber nein, lcc passt nicht zu lc, an statt zu verschweigen was du 
verwendest, könntest du es wenigstens mal nennen:

https://www.mikrocontroller.net/attachment/280346/i2clcd.c

Aus einem
1
#define adr1_w 0x40
wird niemals eine 4-Zeichen Folge "0x40" ausgegeben.

Zumindest eine Umwandlung wie durch
1
char text[8];
2
text[0]='0';
3
text[1]='x';
4
itoa(adr1_w,text+2,16)
5
lcd_putcharlcc(4,10,text);
wäre nötig.
Gast #4861007
Lesenswert?

Habe den Code

Michael B. schrieb:
> char text[8];
> text[0]='0';
> text[1]='x';
> itoa(adr1_w,text+2,16)
> lcd_putcharlcc(4,10,text);

in mein Programm eingebaut. Gabe noch ein paar kleine Fehlermeldungen, 
geht jetzt aber super. Verwende es bereits in anderen Teilen meines 
Programmes. Sieht jetzt so aus:
1
char text[8];
2
lcd_putcharlc(4,10,'0');
3
lcd_putcharlc(4,11,'x');
4
itoa(adr1_w,text,16);
5
lcd_printlc(4,12,text);

noch das rein und es gibt keine Fehlermeldung:

#include "stdlib.h"

Danke für deine Hilfe.

LG Paul

PS. Musst nicht gleich mit einem C Buch drohen. Es gibt genug Schrott 
auf den Markt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren