PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anregungen für LCD-Display Projekte



pinsel120866
28.01.2008, 06:47
Hi,

ich wollte euch einmal nach Vorschlägen für LCD Display Projekte abfragen.

Dadurch dass man beim Aufstecken des LCDs die Liniensensoren verliert, werden die Möglichkeiten doch ziemlich eingeschränkt, oder?

Mir fällt z. B. folgendes ein: Der ASURO fährt mit "grinsendem" Gesicht durchs Zimmer, wenn ein Taster betätigt wird (anstossen), wechselt das Gesicht auf traurig und er sagt "AUA".

Es wäre nett, wenn ihr mir einige Anregungen von LCD-Projekten mitteilen könntet. Hier fehlt mir, offen gestanden, etwas die Kreativität... :-k

T.J.
28.01.2008, 06:53
Die Idee von dir finde ich schon sehr lustig :D

ansonsten kann man sich evtl. Statusinformationen anzeigen lassen. Oder gefahrene Meter....

m.a.r.v.i.n
28.01.2008, 09:22
Hallo Pinsel,

eine Batterieanzeige, wie man es vom Handy kennt, wäre sinnvoll. Ebenso ein Pulsschlag (pulsierendes Herz), der anzeigt das der Asuro noch lebt.

Dazu müßte man nur ein paar Sonderzeichen definieren (siehe Beispiel Grinsgesicht).

Da das LCD-Display über I2C angesteuert ist, könnte man die Liniensensoren wieder reaktivieren, wenn man einen I2C A/D Wandler (PCF8591) verwendet.
Dann hätte man sogar noch 2 A/D Ports übrig.

pinsel120866
28.01.2008, 09:36
Hi m.a.r.v.i.n,

Liniensensoren wieder reaktivieren? Das wäre ja zu schön um wahr zu sein.

Wie geht das?

m.a.r.v.i.n
28.01.2008, 10:08
Hallo Pinsel,

I2C ist ja ein Bussystem, d.h. an die beiden Drähte kann man mehrere Geräte hängen, die alle unterschiedliche Adressen haben.
https://www.roboternetz.de/bilder/i2cbeitrag1.gif

Bei meiner Asuro Erweiterung (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroErweiterung) sitzt unter der Asuro Platine eine Erweiterungsplatine. Diese wird von unten auf die Asuro Erweiterungs Ports gesteckt. Auf die Erweiterungplatine kommen dann die Liniensensoren (2 x CNY70), der PCF8591 I2C A/D Wandler und noch ein PCF8574 I2C 8-Bit Digital IO Chip. Damit stehen dann 8 Digital Ports 4 A/D Ports und 1 D/A Port zur Verfügung. Zudem kann man das LCD-Modul oben auf den Asuro aufstecken und benutzen.

pinsel120866
28.01.2008, 10:23
Der von dir angegebene Link "Asuro Erweiterung" funktioniert leider nicht. Meinst du etwa diesen: http://www.asurowiki.de/pmwiki/pmwiki.php/Main/I2CPorterweiterung

Wenn ich aber den LCD - Bausatz aus "Spass mit Asuro - Teil 2" aufbaue, verliere ich die Linien-Sensoren, weil hier der I2C-Bus schon auf der Platine dabei ist, oder?

m.a.r.v.i.n
28.01.2008, 11:56
Hallo,

Bei mir funktioniert der Link. Das hier meinte ich:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroErweiterung

Der I2C Bus verwendet dieselben IO Pins des Prozessors wie der Liniensensor, deshalb geht nur eines von beiden. Wenn man aber den I2C Bus verwendet, kann man mehrere Erweiterungen über dieselben IO Pins verwenden. Lies dir doch mal die RN-Wissen Artikel über I2C dazu durch.

pinsel120866
28.01.2008, 12:32
Hi,

danke für die Info, schaut interessant aus - behalte ich auf alle Fälle im Auge, schliesslich will ich die Linensensoren irgendwann gemeinsam mit einem LCD nutzen können.

Um Erfahrungen mit dem I2C Bus zu sammeln, backe ich vorerst kleine Brötchen und versuche mich am AREXX - Vorschlag aus dem Buch. Hast du mir noch einen Tipp, was ich mit den 3 farbigen Tastern anfangen könnte?

m.a.r.v.i.n
28.01.2008, 13:53
Hallo,

die Taster könnte man für eine Menüsteuerung verwenden. Die 2x8 Zeichen sind ja nicht gerade üppig. Zum Umschalten zwischen mehreren Seiten für verschieden Anzeigen.
Soft Reset, Not-Aus, Programmstart wären weitere Funktionen.

Heute habe ich die noch fehlenden Bauteile für die Erweiterung bekommen. Dann kann ich heute abend endlich loslegen.

ts230
31.01.2008, 09:51
kann ich auch ein 2x16 Display im 4bit mode anschließen???Das braucht 6 Pins oder?Kann ich auch zwei PCF8591 Anschließen?

m.a.r.v.i.n
31.01.2008, 10:27
kann ich auch ein 2x16 Display im 4bit mode anschließen???Das braucht 6 Pins oder?Kann ich auch zwei PCF8591 Anschließen?

Klar geht das. Es sollten alle Displays bis 4x40 Zeichen anschließbar sein. Ein DOGM162 (2x16 Zeichen) funktioniert bei mir ohne Probleme.
Siehe
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCDErweiterung

Der PCF8591 hat ebenso wie der PCF8574 3 Adress Pins. Damit lassen sich von jedem Chip bis zu 8 an einem I2C Bus betreiben. Also 8 PCF8574 und 8 PCF8591. Du mußt nur jeweils die Adress Pins anders beschalten (binaer 0..7).

ts230
31.01.2008, 12:15
Danke fuer die schnelle Antwort.Die Teile werde ich in den naechsten Tagen bei Reichelt bestellen.

Gruss ts230

damaltor
31.01.2008, 14:27
ts230: sag mal kannst du evt deinen wohort etwas ändern? so ist die halbe seite nur mit den avataren gefüllt da dein langer wohnort die spalte streckt...

ts230
01.02.2008, 13:56
@damaltor
Hab ich gemacht

gruss ts230

damaltor
03.02.2008, 17:39
super danke =) kannst den wohnort natürlich gern "normal" eintragen...

pinsel120866
15.02.2008, 18:12
Nun habe ich folgenden Code zusammengebastelt:


#include "asuro.h"
#include "lcd.h"

const char Eye_L[8] PROGMEM = {0X00,0X00,0X1C,0X00,0X04,0X00,0X01,0X03};
const char Eye_R[8] PROGMEM = {0X00,0X00,0X07,0X00,0X04,0X00,0X10,0X18};

const char MouthA[8] PROGMEM = {0X00,0X00,0X02,0X01,0X00,0X00,0X00,0X00};
const char MouthB[8] PROGMEM = {0X03,0X01,0X00,0X00,0X18,0X07,0X00,0X00};
const char MouthC[8] PROGMEM = {0X18,0X10,0X00,0X00,0X03,0X1C,0X00,0X00};
const char MouthD[8] PROGMEM = {0X00,0X00,0X08,0X10,0X00,0X00,0X00,0X00};


void smily_load(void) //Nötige Sonderzeichen in das Display laden
{
lcd_setchar(0,Eye_L);
lcd_setchar(1,Eye_R);

lcd_setchar(4,MouthA);
lcd_setchar(5,MouthB);
lcd_setchar(6,MouthC);
lcd_setchar(7,MouthD);
}

void smily_draw(void) //Smily mit Sonderzeichen auf dem Display darstellen
{
lcd_home();
lcd_gotoxy(2,0);
lcd_putc('('); //linkes Ohr
lcd_putc(0); //linkes Auge
lcd_putc(1); //rechtes Auge
lcd_putc(')'); //rechtes Ohr

lcd_gotoxy(2,1);
lcd_putc(4); //Mund A
lcd_putc(5); //Mund B
lcd_putc(6); //Mund C
lcd_putc(7); //Mund D
}

int main(void)
{

while(1)
{

unsigned char i;
unsigned char taste=0;

Init();
lcd_init(LCD_DISP_ON);

for(i=0;i<10;i++)
{
PollSwitch();
}
taste=PollSwitch();

if (taste==0)
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
smily_load();
smily_draw();


}
else
{
MotorSpeed(0,0);
BackLED(ON,ON);
Sleep(100);
for(i=0; i<210; i++)
{
MotorDir(RWD,RWD);
MotorSpeed(130,130);
Sleep(100);
MotorSpeed(0,0);
lcd_init(LCD_DISP_ON_CURSOR_BLINK);
lcd_puts("Ich bin");
lcd_gotoxy(3,1); lcd_puts_P("ASURO");
}


for(i=0; i<140; i++)
{
MotorDir(FWD,RWD);
MotorSpeed(140,140);
Sleep(100);
}
BackLED(OFF,OFF);
}

Sleep(100);
}

return 0;
}



Damit habe ich leider Probleme: Während der ASURO durchs Zimmer fährt soll das Gesicht angezeigt werden. Bei Betätigung eines Tasters (anstossen) soll das Display wechseln zu "Ich bin Asuro", der Asuro eine Kehrwendung machen und das Display wieder zurückwechseln.

Es wird aber leider nur Quatsch am Display angezeigt, ausserdem bleibt der Asuro beim anstossen stehen.

Was ist nicht richtig, bitte um Hilfe?

pinsel120866
16.02.2008, 12:31
Ich habe nun etwas anderes versucht. Das Programm misst die Batteriespannung und stellt sie dann grafisch dar. Zusätzlich erscheint noch eine "Liebeserklärung" an den Asuro.

Wer will kann es gerne ausprobieren und mir ein Feedback geben.

m.a.r.v.i.n
16.02.2008, 19:32
Hallo,

zu deinem vorigen Code ein paar Anmerkungen.
* Die Init und InitLCD sollten nur einmal beim Programmstart aufgerufen werden, nicht innerhalb der while Schleife.
* Innerhalb der for Warte Schleifen werden MotorSpeed und PrintLCD gemacht. Die brauchen ebenfalls nur einmal außerhalb der Warteschleifen aufgerufen werden.

Dein anderes Programm werde ich bei Gelegenheit mal ausprobieren. Leider hat mich meine Frau derzeit auf Roboter Entzug gesetzt.