Forum: Mikrocontroller und Digitale Elektronik Problem mit edip240-7


von Karim B. (tun)


Lesenswert?

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!

von Der S. (schubi)


Lesenswert?

Ganz klar:
Fehler in Code-Zeile 13...

von Karim B. (tun)


Lesenswert?

Was ist ganz klar...
Der Befehl ist richtig!

Hast du auch eine Lösung, wenn du meist das dies falsch ist!

von Nitram L. (nitram)


Lesenswert?

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

von Karim B. (tun)


Lesenswert?

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;
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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?

von Karim B. (tun)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.