Alleen berichten met de trefwoorden “5x7” worden getoond.
Alle berichten tonen
Ik heb een probleempje bij het weergeven van tekst op mijn HD44780 LCD (met ATmega8). Afzonderlijke karakters lukt wel, maar wanneer ik
char words[] = "foo";
lcd_string(words);
probeer, dan krijg ik blokjes en andere vreemde karakters. Het volgende lukt trouwens wel:
char words[] = {'f', 'o', 'o', '\0'};
lcd_string(words);
Na wat googlen krijg ik de indruk dat het iets te maken heeft met RAM versus flash geheugen, maar ik heb nog geen concrete oplossing gevonden.
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#define RS 4
#define E 5
void sbi(mask){
PORTC |= (1 << mask);
}
void cbi(mask){
PORTC &= ~(1 << mask);
}
void e_toggle(){
sbi(E);
_delay_us(1);
cbi(E);
}
void lcd_cmd(unsigned char letter){
PORTC = (letter >> 4);
cbi(RS);
e_toggle();
PORTC = letter;
cbi(RS);
e_toggle();
_delay_ms(1);
}
void lcd_char(char letter){
PORTC = (letter >> 4);
sbi(RS);
e_toggle();
PORTC = letter;
sbi(RS);
e_toggle();
_delay_ms(1);
}
void lcd_init(){
cbi(RS);
PORTC = 0x03;
e_toggle();
_delay_ms(50);
PORTC = 0x03;
e_toggle();
_delay_ms(50);
PORTC = 0x03;
e_toggle();
_delay_ms(50);
PORTC = 0x02;
e_toggle();
_delay_ms(50);
lcd_cmd(0x28); // 4-bit mode - 2 line - 5x7 font.
lcd_cmd(0x0D); // Display no cursor - no blink.
lcd_cmd(0x06); // Automatic Increment - No Display shift.
lcd_cmd(0x01);
}
void lcd_line1(){
lcd_cmd(0x80);
}
void lcd_line2(){
lcd_cmd(0xc0);
}
void lcd_string(char *senpoint)
{
while(*senpoint != '\0'){
lcd_char(*senpoint);
senpoint++;
}
}
int main(void){
DDRC = 0xff;
_delay_ms(50);
cbi(E);
lcd_init();
lcd_line1();
//char words[] = {'f', 'o', 'o', '\0'};
char words[] = "foo";
lcd_string(words);
//lcd_char(0x41);
//lcd_char(65);
//lcd_char((char)'A');
while(1);
}
Bedankt!