PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierung des LCD-Displays



mikydog89
15.02.2008, 17:57
Hey!
Ich habe das Programm I2CLCD aus der AsuroLibv271 auf mein Asuro geflasht und er macht nix! Ich habe es auch neu compliert mit dem AVR Studio und es kamen auch keine Fehlermeldungen und es tat immer noch nicht!
Das Demoprogramm von Arexx funktioniert allerdings auf dem Display einwandfrei!
Könnt ihr mir vieleicht helfen?

Das Programm:

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

#define DELAY 1500

int main(void)
{
Init();
InitI2C();
InitLCD();

PrintLCD("LCD Test: ", 0);
Msleep(DELAY);

while(1)
{

Msleep(DELAY);
BacklightLCD(1);

ClearLCD();
PrintSetLCD(3, 0, "Set Cursor");
Msleep(DELAY);
ClearLCD();
PrintSetLCD(0 , 1, "Set Line");
Msleep(DELAY);
ClearLCD();
PrintSetLCD(1 , 1, "Set Cursor Line");
Msleep(DELAY);
ClearLCD();
PrintSetLCD(0 , 0, "Test Int");
SetCursorLCD(9,0);
PrintIntLCD(10);
Msleep(DELAY);
ClearLCD();
PrintAlignLCD(LEFT , 0, "LEFT");
Msleep(DELAY);
ClearLCD();
PrintAlignLCD(CENTER , 0, "CENTER");
Msleep(DELAY);
ClearLCD();
PrintAlignLCD(RIGHT , 0, "RIGHT");
Msleep(DELAY);
ClearLCD();
SetCursorLCD(0,0);
PrintLCD("abcdefghijklmnopqrstuvwyz1234567", 1);
Msleep(DELAY);

}

return 0;
}

pinsel120866
15.02.2008, 19:47
Auch Hey!

Ich hab den I2CLCD Code auch grad geflasht und bei mir passiert auch nichts.

Sieh mal hier: https://www.roboternetz.de/phpBB2/viewtopic.php?t=37897
Dort findest du funktioniere LCD-Codes.

m.a.r.v.i.n
15.02.2008, 23:20
Hallo,

damit das LCD aus dem Asuro Buch 2 mit der AsuroLib funktioniert, müssen erst ein paar Anpassungen an der Lib vorgenommen werden. (Die LCD und I2C Funktionen in der AsuroLib sind vor Erscheinen des LCD Moduls entstanden und mit Selbstbau LCD Modulen getestet worden).

Es sind die I2C Daten und Takt Pins vertauscht. Auch der Anschluß des LCD Moduls am PCF8574 ist anders.

Was dazu alles zu ändern ist, steht im AsuroWiki unter:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCDErweiterung

Wichtig: Die Asuro Lib muß danach neu übersetzt werden.

mikydog89
16.02.2008, 12:53
Danke m.a.r.v.i.n!
Durch die Änderungen in der AsuroLib funktioniert es nun!

mikydog89
16.02.2008, 14:40
Hey
Ich wollte mir mal die Batteriespannung auf dem Display anzeigen lassen, dazu habe ich dieses Programm geschrieben:

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

int main()
{
int Ubat;

Init();
InitI2C();
InitLCD();

Ubat = 0.0055 * Battery();

PrintIntLCD(Ubat);
BacklightLCD(1);
}

Auf dem Display wird aber nur eine 4 angezeigt, obwohl der Wert eigentlich aber 4,4605 ist!
Kann mir jemand sagen wie ich den richtigen Wert aufs Display bekomme?

pinsel120866
16.02.2008, 15:15
du hast "int Ubat", als Integer(=Ganzzahlig abgerundet) verwendet. Nimm "float Ubat".

mikydog89
16.02.2008, 19:00
Aber wie gebe ich diesen Wert dann ans Display?

m.a.r.v.i.n
16.02.2008, 20:25
Hallo,

Float Werte in Strings kann mit der Funktion dtostrf wandeln.
Guck dir mal die PrintFloat Funktion aus der AsuroLib an.
http://asuro.svn.sourceforge.net/viewvc/asuro/branches/MEGA168_SUPPORT/AsuroLib/lib/printf.c?view=markup

Die könnte man dafür anpassen.

mikydog89
17.02.2008, 12:42
Hey, danke!
Habs nun hinbekommen!

mikydog89
17.02.2008, 12:51
Dann habe ich noch ne Frage!
Sind die Makros LCD_KEY_YELLOW, LCD_KEY_RED und LCD_KEY_BLUE nicht mehr in der AsuroLib?

mikydog89
19.02.2008, 22:17
Hey!
Gibt es in der AsuroLib eine Interrupt-Timer?
Ich möchte nämlich die Werte der Odometrie eine Sekunde lang einlesen, damit ich die Strecke und die Geschwindigkeit des Asuros anzeigen lassen kann.
Oder hat jemand ne andere Idee wie man das machen könnte?

damaltor
21.02.2008, 17:59
es gibt einen solchen timer. er zählt im 36kHz-takt.