Hallo! Ich hab auch ein Problem mit diesem Display! Folgendes: ich will ein Rechteck zeichnen anschl. dieses löschen und dann eine Linie. Beispiel: int main { ... zeichReck(0,0,50,50); display_clear(); zeichLinie(0,0,20,20); ... } Problem er zeichnet nur das Reck, dieses wird nicht gelöscht. ich mit einem delay versucht -> auch nicht. Wäre toll wenn mir einer weiter helfen könnte. Danke!
Was ist ganz klar... Der Befehl ist richtig! Hast du auch eine Lösung, wenn du meist das dies falsch ist!
Karim B. wrote: > Was ist ganz klar... > Der Befehl ist richtig! > > Hast du auch eine Lösung, wenn du meist das dies falsch ist! Er meint damit, das keiner (den lieben Gott und Bill Gates ausgenommen) mit den drei Zeilen etwas sagen kann... Ein wenig mehr Code muss es schon sein... nitraM
Hier jetzt etwas mehr Code; Das Programm führt nur den ersten Teil aus, den zweiten Teil lässt er liegen. ........ while (RW !=0x06) { //zeichnet Rechteck BCC=(0x11+0x0A+0x1B+'D'+'L'+0x1B+'G'+'R'+0x0A+0x0A+0x32+0x32) % 256; spi_write(0x11); spi_write(0x0A); spi_write(0x1B); spi_write('D'); spi_write('L'); spi_write(0x1B); spi_write('G'); spi_write('R'); spi_write(0x0A); spi_write(0x0A); spi_write(0x32); spi_write(0x32); spi_write(BCC); delay(1); RW = SPDR; } delay(2000); while (RW !=0x06) { BCC = (0x11+0x0A+0x1B+'D'+'L'+0x1B+'G'+'D'+0x00+0x00+0x32+0x32) % 256; spi_write(0x11); spi_write(0x0A); spi_write(0x1B); spi_write('D'); spi_write('L'); spi_write(0x1B); spi_write('G'); spi_write('D'); spi_write(0x00); spi_write(0x00); spi_write(0x32); spi_write(0x32); spi_write(BCC); delay(1); RW = SPDR; }
Bist du überhaupt sicher, dass du aus der ersten while-Schleife raus kommst? EDIT: Bzw. dass du in die zweite Schleife rein kommst, nachdem du die erste verlassen hast? Welcher Wert von RW hat nochmal zum Verlassen der ersten Schleife geführt?
Wenn RW = 0x06 ist, wird die erste while schleife verlassen. Dies tut es auch, denn ich seh ja auf dem Display ein Rechteck. Ich weiß nur nicht, warum die Linie nicht gezeichnet wird. Ich hab ja Verzögerung für Datentransport zur Reserve eingefügt.
Ja, und wenn RW==0x06 ist, wie geht es dann beim Eingang der 2. while-Schleife weiter? Bingo. Die Eingangsbedingung ist nicht erfüllt und die Schleife wird nie ausgeführt. Passt zur Problembeschreibung. Setzt das Display SPDR irgendwann ungleich 0x06? Dann müsstest du zwischen der 1. und 2. Schleife einfügen.
1 | while (0x06 == (RW = SPDR)); |
EDIT: Insgesamt gefällt mir dein Code so nicht. Wenn SPDR so wie hier (http://www.mikrocontroller.net/articles/ARM-elf-GCC-Tutorial#SPI) gedacht ist, ist die Programmstruktur logisch falsch: Während des Wartens auf Rückmeldung vom Display ballerst du ständig Zeichenbefehle.
Ist zwar schon alt, aber naja. Die Funktion delay(2000) kann die 2000 nicht verarbeiten so weit ich das weiß. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.