Mac Gyver
15.11.2005, 00:52
hi
ich hab hier einen atmega 8 und ein 2x16 lcd. jetzt wollte ich mal versuchen das lcd anzusprechen.
ich weis zwar dass es fertige libs gibt aba ich würde es gerne selbst machen. leider haut das nicht so ganz hin und jetzt wollt ich fragen ob mir evtl jemand einen tipp geben kann. ich will garkeine vollständige lösung(da könnt ich mir gleich die lib suchen) aba ein kleiner schubs in die richtige richtung währe supa.
also mal zu meiner situation:
atmega8
lcd 16x2
lcd hängt an portc
pc0-3->db4-7 (ich will also im 4 bit mode arbeiten)
pc4->enable
pc5->rs
r/w liegt auf masse ausser evtl dem busy flag gibts eh nix zum auslesen.
also jetzt zu meinem code:
hier hab ich mal eine routine um das untere nibble zu senden:
void LCD_out_low(uint8_t RS, uint8_t out){
uint8_t out_low;
port=0x00;
out_low = out;
out_low |= (1<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_low;
enable_off;
port=0x00;
}
das ganze hab ich auch fürs obere nibble:
void LCD_out_high(uint8_t RS, uint8_t out){
uint8_t out_high;
port=0x00;
out_high = (out>>4);
out_high |= (0<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_high;
enable_off;
port=0x00;
}
und hier für beide nibbles (erst das obere dann das untere):
void LCD_out(uint8_t RS, uint8_t out){
uint8_t out_low, out_high;
port=0x00;
out_high = (out<<4);
out_high |= (0<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_high;
enable_off;
out_low = out;
out_low |= (0<<4|RS<<5|0<<6|0<<7);
enable_on;
port=out_low;
enable_off;
port=0x00;
}
die port=0x00 kann man eigentlich weglassen aba ich habs zur sicherheit mal da lassen.
stimmt das soweit mal? oda hab ich da schon den fehler?
und wie geht das jetz mit der initialisierung?
das lcd ist doch eigentlich schon initialisiert und muss nur auf 4 bit mode umgestellt werden.
meine init sequenz hab ich leider versehentlich ganz gelöscht aba ich werd morgen eine neue schreiben.
allerdings währe es supa wenn mir bis dahin mal wer sagen könnte ob die befehle oben soweit in ordnung sind.
aja sollte irgendjemand ne gute seite mit infos zum ansteuerungsprokoll oda mit allgemeiner c- syntax haben würd ich mich natürlich auch freuen.
mfg
macgyver
ich hab hier einen atmega 8 und ein 2x16 lcd. jetzt wollte ich mal versuchen das lcd anzusprechen.
ich weis zwar dass es fertige libs gibt aba ich würde es gerne selbst machen. leider haut das nicht so ganz hin und jetzt wollt ich fragen ob mir evtl jemand einen tipp geben kann. ich will garkeine vollständige lösung(da könnt ich mir gleich die lib suchen) aba ein kleiner schubs in die richtige richtung währe supa.
also mal zu meiner situation:
atmega8
lcd 16x2
lcd hängt an portc
pc0-3->db4-7 (ich will also im 4 bit mode arbeiten)
pc4->enable
pc5->rs
r/w liegt auf masse ausser evtl dem busy flag gibts eh nix zum auslesen.
also jetzt zu meinem code:
hier hab ich mal eine routine um das untere nibble zu senden:
void LCD_out_low(uint8_t RS, uint8_t out){
uint8_t out_low;
port=0x00;
out_low = out;
out_low |= (1<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_low;
enable_off;
port=0x00;
}
das ganze hab ich auch fürs obere nibble:
void LCD_out_high(uint8_t RS, uint8_t out){
uint8_t out_high;
port=0x00;
out_high = (out>>4);
out_high |= (0<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_high;
enable_off;
port=0x00;
}
und hier für beide nibbles (erst das obere dann das untere):
void LCD_out(uint8_t RS, uint8_t out){
uint8_t out_low, out_high;
port=0x00;
out_high = (out<<4);
out_high |= (0<<4|RS<<5|0<<6|0<<7);
port |= (RS<<5);
enable_on;
port=out_high;
enable_off;
out_low = out;
out_low |= (0<<4|RS<<5|0<<6|0<<7);
enable_on;
port=out_low;
enable_off;
port=0x00;
}
die port=0x00 kann man eigentlich weglassen aba ich habs zur sicherheit mal da lassen.
stimmt das soweit mal? oda hab ich da schon den fehler?
und wie geht das jetz mit der initialisierung?
das lcd ist doch eigentlich schon initialisiert und muss nur auf 4 bit mode umgestellt werden.
meine init sequenz hab ich leider versehentlich ganz gelöscht aba ich werd morgen eine neue schreiben.
allerdings währe es supa wenn mir bis dahin mal wer sagen könnte ob die befehle oben soweit in ordnung sind.
aja sollte irgendjemand ne gute seite mit infos zum ansteuerungsprokoll oda mit allgemeiner c- syntax haben würd ich mich natürlich auch freuen.
mfg
macgyver