-
-
Hallo,
ich habe eben mal über Deinen Code geschaut.
Beim drüberfliegen sind mir ein paar Ding aufgefallen.
Das ist mit Sicherheit nicht alles, aber es könnte Dir schon mal weiterfelfen.
- Initialisierung
PORTA |= ((1<<PA0)|(1<<[highlight=red:088a855f56]PB1[/highlight:088a855f56])); // 3 mal 0011 mit 5 ms Pause
wieso PB und nicht PA ( sollte nichts ausmachen - war aber sicher so nicht gemeint.)
- Dein lcd_write
void lcd_write(uint8_t com, char string[17])
Hier solltest Du einen char pointer übergeben und auf Ende des Strings abprüfen.
void lcd_write(uint8_t com, char *string)
So wie Du es jetzt gemacht hast wir das Programm immer die vollen 17 Zeichen rausschreiben. Wenn Du also nur "Hallo" scheiben willst, dann schreibt er "Halloasfaaaaaafa" oder was halt auch immer zufällig im Speicher hinter Deinen String liegen sollte auf das Display.
Statt for (int8_t i = 0; i < 16; i++)
lieber [highlight=red:088a855f56]while (*string != 0x0 )[/highlight:088a855f56]
{
PORTA |= (1<<PA4); // RS - Bit setzen
uint8_t high_nibble = (uint8_t)([highlight=red:088a855f56]*string[/highlight:088a855f56]>>4);
uint8_t low_nibble = (uint8_t)(*string<<4);
low_nibble = low_nibble>>4;
PORTA = high_nibble;
lcd_en();
PORTA = low_nibble;
lcd_en();
_delay_us(50);
PORTA &= ~(1<<PA4); // RS - Bit löschen
[highlight=red:088a855f56]string++;[/highlight:088a855f56]
}
In der Zeile PORTA = high_nibble; oder PORTA = low_nibble;
ueberschreibst Du den ganzen Port A - alle 8 Bit. Auf den anderen 4 Bit liegen aber doch Deine Steuerleitungen - oder ?
Wie wäre es mit was in der Richtung ?
PORTA = ( (PORTA & 0xF0) | ( high_nibble & 0x0F) )
....
Nur meine Ideen
Gruss
Frank
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen