Atmega C kérdés & LCD kérdés
Auth Gábor
auth.gabor at enaplo.hu
Thu Apr 27 12:50:45 CEST 2006
Halihó!
Szeretnék számot kiírni tizes számrendszerben LCD-re atmega-val, a
következő függvényt használom (az osztás kicsit megterheli
szegény... :):
===
void lcdWriteInt(unsigned int number)
{
unsigned char num[5]={48,48,48,48,48};
unsigned char nums=0;
for (nums=0;number&&nums<5;nums++)
{
num[nums]=(unsigned char)(number%10+48);
number=number/10;
}
while (nums--)
{
lcdWriteChar(num[nums]);
}
}
===
Az LCD-m egy JM162B, 2x16 soros egyszerű dolog, itt van hozzá doksi.
Vagy én vagyok hülye, vagy az Atmega, vagy az LCD... :)
http://www.sos.sk/pdf/JM162BSPEC.pdf
===
void writeToLCD(int data,char ch)
{
if (data) set_bit(LCD_COMMAND,LCD_RS);
else clr_bit(LCD_COMMAND,LCD_RS);
clr_bit(LCD_COMMAND,LCD_RW);
myDelay(256); //256 üres ciklus
set_bit(LCD_COMMAND,LCD_EN);
myDelay(32); //32 üres ciklus
LCD_DATA=ch;
myDelay(32); //32 üres ciklus
clr_bit(LCD_COMMAND,LCD_EN);
myDelay(256); //256 üres ciklus
set_bit(LCD_COMMAND,LCD_RW);
if (data) clr_bit(LCD_COMMAND,LCD_RS);
else set_bit(LCD_COMMAND,LCD_RS);
}
===
Az Atmega16 jelenleg kvarc nélkül fut, elvileg 1MHz-en. Vagyis egy
gépi ciklus 1us. Az LCD doksija szerint az RS-el egy időben mehet az RW
is, gyakorlatilag több us sem elég. Én arra tippelek, hogy az LCD-t nem
ns mértékegységben kell időzíteni, hanem us mértékegységben, és így a
~256 meg a ~40 jónak néz ki. Ilyenkor mi van?
--
http://www.enaplo.hu - Iskolai Információs Rendszer
Auth Gábor -=- FreeBSD 5.4 -=- http://bsd.lap.hu
+36-70/9400-341 -=- ICQ: 49179141 -=- Skype: authgabor
More information about the Elektro
mailing list