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