Hallo zusammen,
ich habe momentan ein Problem mit mir eingene Zeichen für mein
LC-Display zu erstellen. Ich komme jetzt schon seit Tagen nicht mehr
weiter und bräuchte ein wenig unterstützung. Mein Problem ist folgendes:
Ich habe ein 16x2 LCD mit einem HD44780 Chipsatz. Dieses Display steuer
ich über einem ATmega32 mit 4-Bit an. Den Mikrocontroller programmiere
ich in C und verwende die "lcd-routines.h" - Bibliothek von deiser
Seite. Die Ausgabe von einzelnen Character oder Strings funktioniert
super. Ich verwende diese Methode zur erstellung eines Zeichens:
void lcd_generatechar( uint8_t code, const uint8_t *data )
{
lcd_command( LCD_SET_CGADR | (code<<3) );
for ( uint8_t i=0; i<8; i++ )
{
lcd_data( data[i] );
}
}
Wenn ich das richtig verstanden habe, dann teile ich dem Display über
den Befehl die Startposition des Zeichens an. Gleichzeitig sage ich ihm
damit, dass ich auf dem CG-RAM schreiben möchte. Im Anschluss übermittel
ich dann mein Datenarray. Mein Programmversuch sieht momentan so aus:
#include <avr/io.h>
#include <util/delay.h>
#include "lcd-routines.h"
#define F_CPU 8000000
unsigned char array [8] = {0x0A,0x0A,0x1F,0x11,0x11,0x0E,0x04,0x04};
int main(void)
{
lcd_init();
while(1)
{
lcd_generatechar(0, array);
_delay_ms(500);
lcd_home();
}
}
Wenn ich es so versuche bleibt mein Diplay leider leer. Kann mir Jemand
sagen was ich genau falsch mache? Oder liegt es daran, dass ich mit der
Simulationssoftware ISIS-Proteus arbeite? Ich hatte aber vorher keine
Probleme damit gehabt. Ich habe jetzt auch schon einige Foren durchsucht
baer leider ohne Erfolg. Vielen Dank schon im Vorraus.
Gruß
Schirmo
Gast
#3248163
Du mußt das Zeichen nicht nur definieren, sondern auch anzeigen. Momentan sagst du nur dem LCD-Controller, wie das neue Zeichen aussehen soll. Aber du machst keine einzige Ausgabe, wo dieses Zeichen benutzt wird.
... und wie Du es ausgeben kannst -> siehe http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung
Danke , jetzt klappt alles.
Gast
#3248279
Matthias Schirmer schrieb: > Danke , jetzt klappt alles. Glück gehabt. Matthias Schirmer schrieb: > #include <avr/io.h> > #include <util/delay.h> > #include "lcd-routines.h" > > #define F_CPU 8000000 Woher soll delay.h die richtige CPU-Frequenz wissen, wenn die Definition von F_CPU erst nach #include <util/delay.h> folgt. In der Reihenfolge macht das überhaupt keinen Sinn.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.