Hallo! Hab meine Temperaturanzeige endlich zum laufen gebracht:-) Jetzt wird aber auf dem Display anstatt des "°" Zeichens nur ein "-" angezeigt.....kann man den Zeichensatz solcher Displays manipulieren????
Jetzt sind wieder die Hellseher gefragt, um was es sich für ein LCD-Modul und SOftware handelt. sorry, ich habe meine Glaskugel gerade ausgeliehen.
Also: es handelt sich um einen Atmel 90S8535 Chip und ein mit CodeVision geschriebens C-Programm... Das LCD hat 4 Zeilen a 20 Zeichen....ist so ein Teil von Conrad...leider haben die grad Ihre Seite unten und ich komm nicht an das Datenblatt...... Aber es muss doch eine Möglichkeit geben, das Problem wenigstens mal versuchsweise anzugehen.....ich schreib mit lcd_putsf("Temp. extern °C:"); in das Display, irgendwie wird das ° als - interpretiert:-( Das Programm benutzt eine LCD.H (als Anlage anbei!).
Der Anhang geht nicht....hier halt als Text: /* LCD driver routines CodeVisionAVR C Compiler (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L. BEFORE #include -ING THIS FILE YOU MUST DECLARE THE I/O ADDRESS OF THE DATA REGISTER OF THE PORT AT WHICH THE LCD IS CONNECTED! EXAMPLE FOR PORTB: #asm .equ __lcd_port=0x18 #endasm #include <lcd.h> */ #ifndef LCD_INCLUDED #define LCD_INCLUDED #pragma used+ void _lcd_ready(void); void _lcd_write_data(unsigned char data); // write a byte to the LCD character generator or display RAM void lcd_write_byte(unsigned char addr, unsigned char data); // read a byte from the LCD character generator or display RAM unsigned char lcd_read_byte(unsigned char addr); // set the LCD display position x=0..39 y=0..3 void lcd_gotoxy(unsigned char x, unsigned char y); // clear the LCD void lcd_clear(void); void lcd_putchar(char c); // write the string str located in SRAM to the LCD void lcd_puts(char *str); // write the string str located in FLASH to the LCD void lcd_putsf(char flash *str); // initialize the LCD controller void lcd_init(unsigned char lcd_columns); #pragma used- #pragma library lcd.lib #endif ------------------------------------------------------------------- Inhalt der LCD.LIB: /* LCD driver routines CodeVisionAVR C Compiler (C) 1998-2003 HP InfoTech S.R.L. */ #asm .equ __lcd_direction=__lcd_port-1 .equ __lcd_pin=__lcd_port-2 .equ __lcd_rs=0 .equ __lcd_rd=1 .equ __lcd_enable=2 .equ __lcd_busy_flag=7 #endasm #pragma used+ static unsigned char _base_y[4]={0x80,0xc0}; unsigned char _lcd_x,_lcd_y,_lcd_maxx; #pragma used- void _lcd_ready(void) { #asm in r26,__lcd_direction andi r26,0xf ;set as input out __lcd_direction,r26 sbi __lcd_port,__lcd_rd ;RD=1 cbi __lcd_port,__lcd_rs ;RS=0 __lcd_busy: rcall __lcd_delay sbi __lcd_port,__lcd_enable ;EN=1 rcall __lcd_delay sbic __lcd_pin,__lcd_busy_flag rjmp __lcd_busy cbi __lcd_port,__lcd_enable ;EN=0 #endasm } #asm __lcd_write_nibble: andi r26,0xf0 or r26,r27 out __lcd_port,r26 ;write sbi __lcd_port,__lcd_enable ;EN=1 rcall __lcd_delay cbi __lcd_port,__lcd_enable ;EN=0 __lcd_delay: ldi r31,15 __lcd_delay0: dec r31 brne __lcd_delay0 ret #endasm void _lcd_write_data(unsigned char data) { #asm cbi __lcd_port,__lcd_rd ;RD=0 in r26,__lcd_direction ori r26,0xf7 ;set as output out __lcd_direction,r26 in r27,__lcd_port andi r27,0xf ld r26,y rcall __lcd_write_nibble ;RD=0, write MSN ld r26,y swap r26 rcall __lcd_write_nibble ;write LSN sbi __lcd_port,__lcd_rd ;RD=1 #endasm } /* write a byte to the LCD character generator or display RAM */ #if funcused lcd_write_byte void lcd_write_byte(unsigned char addr, unsigned char data) { _lcd_ready(); _lcd_write_data(addr); _lcd_ready(); #asm sbi __lcd_port,__lcd_rs ;RS=1 #endasm _lcd_write_data(data); } #endif #if funcused lcd_read_byte #asm __lcd_read_nibble: sbi __lcd_port,__lcd_enable ;EN=1 rcall __lcd_delay in r30,__lcd_pin ;read cbi __lcd_port,__lcd_enable ;EN=0 rcall __lcd_delay andi r30,0xf0 ret #endasm /* read a byte from the LCD character generator or display RAM */ unsigned char lcd_read_byte(unsigned char addr) { _lcd_ready(); _lcd_write_data(addr); _lcd_ready(); #asm in r26,__lcd_direction andi r26,0xf ;set as input out __lcd_direction,r26 sbi __lcd_port,__lcd_rs ;RS=1 rcall __lcd_delay rcall __lcd_read_nibble ;read MSN mov r26,r30 rcall __lcd_read_nibble ;read LSN cbi __lcd_port,__lcd_rd ;RD=0 swap r30 or r30,r26 #endasm } #endif /* set the LCD display position x=0..39 y=0..3 */ #if funcused lcd_gotoxy || funcused lcd_putchar || funcused lcd_puts || funcused lcd_putsf void lcd_gotoxy(unsigned char x, unsigned char y) { _lcd_ready(); // RS=0 _lcd_write_data(_base_y[y]+x); _lcd_x=x; _lcd_y=y; } #endif // clear the LCD #if funcused lcd_clear || funcused lcd_init void lcd_clear(void) { _lcd_ready(); // RS=0 _lcd_write_data(0xc); // cursor off _lcd_ready(); _lcd_write_data(1); // clear _lcd_x=_lcd_y=0; } #endif #if funcused lcd_putchar || funcused lcd_puts || funcused lcd_putsf #pragma keep+ void lcd_putchar(char c) { #asm push r30 push r31 ld r26,y set cpi r26,10 breq __lcd_putchar1 clt #endasm ++_lcd_x; if (_lcd_x>_lcd_maxx) { #asm("__lcd_putchar1:") ++_lcd_y; lcd_gotoxy(0,_lcd_y); #asm("brts __lcd_putchar0") }; #asm rcall __lcd_ready sbi __lcd_port,__lcd_rs ;RS=1 ld r26,y st -y,r26 rcall __lcd_write_data __lcd_putchar0: pop r31 pop r30 #endasm } #pragma keep- #endif // write the string str located in SRAM to the LCD #if funcused lcd_puts void lcd_puts(char *str) { #ifdef MODEL_TINY #asm clr r31 #endasm #endif #ifdef MODEL_SMALL #asm ldd r31,y+1 #endasm #endif #asm ld r30,y __lcd_puts0: ld r26,z+ tst r26 breq __lcd_puts1 st -y,r26 rcall _lcd_putchar rjmp __lcd_puts0 __lcd_puts1: #endasm } #endif // write the string str located in FLASH to the LCD #if funcused lcd_putsf void lcd_putsf(char flash *str) { #asm ld r30,y ldd r31,y+1 __lcd_putsf0: #endasm #ifdef CHIP_ATMEGA128 #asm("elpm") #else #asm("lpm") #endif #asm tst r0 breq __lcd_putsf1 adiw r30,1 st -y,r0 rcall _lcd_putchar rjmp __lcd_putsf0 __lcd_putsf1: #endasm } #endif #if funcused lcd_init void _long_delay(void) { #asm clr r26 clr r27 __long_delay0: sbiw r26,1 ;2 cycles brne __long_delay0 ;2 cycles #endasm } // initialize the LCD controller void lcd_init(unsigned char lcd_columns) { #asm cbi __lcd_port,__lcd_enable ;EN=0 cbi __lcd_port,__lcd_rs ;RS=0 #endasm _lcd_maxx=lcd_columns; _base_y[2]=lcd_columns+0x80; _base_y[3]=lcd_columns+0xc0; _long_delay(); _lcd_write_data(0x30); _long_delay(); _lcd_write_data(0x30); _long_delay(); _lcd_write_data(0x30); _long_delay(); _lcd_write_data(0x20); _lcd_ready(); _lcd_write_data(0x28); _lcd_ready(); _lcd_write_data(6); lcd_clear(); } #endif
björn, du bist aber wirklich ein fall für die psychiatrie...
Was soll diese Antwort auf meine Frage??? Das klingt stark nach einer Beleidigung...normalerweise sollte man gegen solche dummen Bemerkungen rechtlich vorgehen: AUFRUF AN DEN ADMIN: Bitte die Antwort von Emil und diese hier von mir LÖSCHEN, da sie beleidigend ist und hier im Forum wirklich nichts zu suchen hat!
langen quelltext postet man besser als anhang. und der geht auch..
@björn: du bist ja schon für deine ausdrucksweise und fragen bekannt: http://www.mikrocontroller.net/forum/read-1-35370.html#35605 abgesehen davon, dass du worte wie "bitte", "danke" usw. kaum verwendest, gibt es bei dir auch nur einen geringen wunsch, etwas nachzudenken und selbst zu einem analytischen ergebnis zu kommen; also "kleiner" hinweis auch diesmal (und "danke" brauchst du weder mir, noch herrn peter dannegger sagen, wir verdienen es ja nicht, am besten uns von forum weglöschen, damit es für deine postings platz genug gibt): einmal die ISO-8859-1 (Latin1)-Tabelle mit dem Zeichensatz von HD44780 vergleichen, dann wirst du vielleicht erkennen, wie sinnlos dein posten von lcd.h ist... ich könnte auch weiter schreiben, aber was soll es...irgedwann bekommt jeder das seine...(und auch du deine temp. anzeige zum laufen, hoffentlich..)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.