G4st schrieb:
> Wieso sollte ich die Binäradressierung schreiben um jemanden zu
> beeindrucken?
Genau das frage ich DICH!
Warum benutzt du Binärschreibweise, wenn es nicht angebracht ist?
Wenn du den Datenport auf das Binärmuster für das Zeichen '0' setzen
willst, warum schreibst du dann nicht einfach
ist dir das zu einfach? Ist dir das zu lesbar? Nicht kryptisch genug?
> Und wieso sollte ich ein LCD ansteuern wollen ohne die Grundlagen der
> Microcontrollerprogrammierung zu kennen?
Weil du
* ständig einfach nur Binärschreibweise benutzt
* weil du dir keine Funktionen für
a) Kommando ausgeben
b) Daten ausgeben
machst
* weil du für die R/S Leitung schon wieder den kompletten Port über den
Haufen wirfst
* weil du scheinbar immer noch nicht gelernt hast, dass man sich für
Pins Makros macht, die der Funktion des Pins entsprechen und nicht
seiner Position am Port. Was ist der Unterschied zwischen
1 | LCDSETTINGS |= (1<<PB2);
|
und
1 | LCDSETTINGS |= (1 << LCD_ENABLE);
|
richtig: beim 2.ten sieht jeder Halbblinde sofort, dass du hier den
Enable Pin auf 1 schalten willst. Beim ersten muss man erst mal in
deinem Prosatext rausfinden, dass an PB2 wohl (hoffentlich) der Enable
Pin vom LCD angeschlossen ist.
Selbiges für die anderen Steuerleitungen. Dafür definiert man sich
Makros, die die Pinbezeichnungen am Port mit der Funktion des Pins
verknüpfen. Dann braucht man dann auch hier
nicht mehr hoffen, dass die richtigen Pins auf Ausgang geschaltet
werden.
1 | #define LCD_ENABLE PB2
|
2 | #define LCD_RS PB0
|
3 | #define LCD_RW PB1
|
4 |
|
5 | ....
|
6 |
|
7 |
|
8 | DDRB |= ( 1 << LCD_ENABLE ) | ( 1 << LCD_RS ) | ( 1 << LCD_RW );
|
und sinngemaess natürlich auch an all den anderen Stellen. Insbesondere
hier
1 | LCDSETTINGS = 0b00000001;
|
wo eigentlich nur der RS Pin auf 1 gesetzt werden sollte und nichts
weiter.
> Das Ergbnis bleibt leider das Gleiche.
Stufenweise vorgehen.
Erst mal das LCD ohne Initialisierung nur unter Spannung setzen. Mit dem
Poti an VO stellst du dann erst mal den Kontrast so ein, dass du die
initiale Blockzeile gut sehen kannst.
Und erst dann gehts mit der Ansteuerung los. Wenn deine Initialisierung
durchgeht (was sollen die ganzen Binärzahlen bewirken, die du als
Kommando ausgibst? Muss man das als Binärzahl schreiben, oder kann man
das auch so formulieren, dass man im Code sehen kann, was du eigentlich
haben willst?), dann muss die Blockzeile verschwinden. Solange das nicht
der Fall ist, ist deine Initialisierung nicht korrekt (wahrscheinlich
sind dann die Zeiten zwischen den Kommandos zu kurz).
Erst dann wenn die Blockzeile verschwindet, erst dann können wir uns
über Zeichenausgabe unterhalten.
Du willst zu viel auf einmal, und fällst dabei ständig auf die Nase.
Eben weil du zu viel auf einmal willst und dir keine Gedanken darüber
machst, wie du dein Programm vernünftig so strukturieren kannst, so dass
man auch erkennen kann, was passieren wird. Es fehlen eben die
Grundlagen, die du beim Spielen mit LED eigentlich hättest erwerben
sollen.