www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

C koda in začetnik:
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.59
Kraj: Trzic

PrispevekObjavljeno: Sob Mar 29, 2008 2:15 am    Naslov sporočila:   Odgovori s citatom

dpavli je napisal/a:
Ali si uporabil Buermenov LCD driver?

Ti ga je ratalo oklestit na <16kB (zaradi uVisiona)?

LPd


O tem je že kolega zadnjič govoril. 16kB za LCD driver? Se opravičujem, ampak WTF?
Kje se nabere toliko kode? Je toliko tabel za znake noter?

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
dpavli
Član
Član



Pridružen-a: Čet 25 Jan 2007 9:19
Prispevkov: 121
Aktiv.: 0.54

PrispevekObjavljeno: Sob Mar 29, 2008 9:40 am    Naslov sporočila:   Odgovori s citatom

A nisva ravno midva nekaj po MSNju govorila o tem? Cool

Nevem, bom govoril kaj z Buermenom ko ga vidim.

Smo na vezi,
D.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Ned Mar 30, 2008 5:27 pm    Naslov sporočila:   Odgovori s citatom

Vse kar rabiš je tu!!!

Zanesljivo dela..

Koda:

//--------------------------------------------------//
// LCD.C za KEIL MCB2130U razvojni board z LPC2138  //
//--------------------------------------------------//

#include <LPC21xx.h>
#include "lcd_ET.h"

 void LCD_var(int var)
{
    int a, i, set;
   set = 0;
   for(i = 9;i >= 0;i --)
   {
      a=0;
      while (var >= desetX(i))
      {
         var -= desetX(i);
         a++;

         if (a !=0 )
         {
            set = 1;
         }
         if (a !=0 || set)
         {
            LCD_var (a);
         }
         if (a == 0 && i == 0 && set == 0)
         {
            LCD_var (a);   
         }
      }
   }
}


int desetX(int x)
{
   int i = 0;
   int   rez = 1;
   while (i < x)
   {
      rez *= 10;    //
      i++;
   }
   return rez;
}

 void LCD_init()
{

   IODIR0 = 0x00FF0000;                     /* P1.16..23 defined as Outputs     */
    set(E);
   reset(RW);
   reset(RS);
   waitms(4000);

   set(D4);
   set(D5);
   E_pulse();
   waitms(1000);

    set(D4);
   set(D5);
   E_pulse();
   waitms(100);

   set(D4);
   set(D5);
   E_pulse();
   waitms(100);


   set(D5);
   reset(D4);
   E_pulse();
   waitms(100);

//   LCD_cmd (0x28);   //   4 bit mode, 1/16 duty, 5x8 font, 2 lines
//   waitms(1000);
   LCD_cmd (On);   //   display on
   waitms(1000);
   LCD_cmd (Cls);   //   display on
   waitms(1000);

}

void E_pulse()
{   
    int a;
//   IOSET1 = 0x00010000;                           /* Turn on LED */
//   waitms(3000);                              /* Delay */
//   IOCLR1 = 0x00010000;   
   set(E);
   for(a = 0 ; a < 4000 ; a++ )   // delay app. 50ys
   reset(E);
}

void LCD_cmd(int cmd)   
{
   reset(RS);         //   LCD command mode
   LCD_port(cmd>>4);   // high bits
   E_pulse();
   waitms(1000);
   LCD_port(cmd&0x0f);   // LOW BYTE
   E_pulse();
   waitms(1000);
   set(RS);         //   LCD data mode
}


void LCD_vars(int var)
{
   set(RS);
   LCD_port((0x30|var)>>4);
   E_pulse();
   LCD_port((0x30|var)&0x0f);
   E_pulse();
}      

void LCD_chr(char data[])
{
   int i;
   set(RS);
   for(i = 0; data[i]!= 0 ; i++)
   {
      LCD_port(data[i]>>4);
      E_pulse();
       LCD_port(data[i]&0x0f);
      E_pulse();
   }
   reset(RS);
}

void LCD_locate(int row, int column)
{
   reset(RS);
   if (row == 1)
   {
      LCD_cmd(0x80 | (column - 1)&0x0f);
   }
   else
   {
      LCD_cmd(0xc0 | (column - 1)&0x0f);
   }
}

 void LCD_port(int port_value)
{
   if(port_value > 0x0f )       //LCD port is only 4 bit long
   port_value = 0;            // we dont want to mess other bits
   IOSET0 = port_value << 16;
   IOCLR0 = (~port_value&0x0f) << 16;
}

void waitms (int ms)
{
   volatile int i,j;

   for (i = 0; i < ms; i++)
       for (j = 0; j < 170; j++);
}

void Led_sk()
{
      unsigned int n;
    // IODIR1  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
      for (n = 0x00010000; n <= 0x00800000; n <<= 1);
        {
         /* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
         IOSET1 = n;                           /* Turn on LED */
         waitms(3000);                              /* Delay */
         IOCLR1 = 0x00FF0000;                  /* Turn off LEDs */ 
     }    
}

void set(int pin)
{
   IOSET0 = (1<<pin);
}

void reset(int pin)
{
   IOCLR0 = (1<<pin);
}

int main (void)
{
  unsigned int n;
   
  IODIR1  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
  IODIR0  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
  waitms(30000); 
  LCD_init();
  waitms(30000);

  while (1)                          //* Loop forever */
 {   
   for (n = 0x00010000; n <= 0x00800000; n <<= 1)
   {
     //* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
      IOSET1 = n;                           /* Turn on LED */
      waitms(3000);                                /* Delay */
      IOCLR1 = 0x00FF0000;                  /* Turn off LEDs */
   }

   LCD_locate(1,1);
   LCD_chr("WINNER");
   waitms(30000);
   LCD_locate(2,1);
   LCD_chr("RUDI");

  }
}   


//------------------------//
// LCD.h  //
//-----------------------//

// LCD control lines

#define  D4   16
#define  D5   17
#define  D6   18
#define  D7   19
#define  RS   20
#define  RW   21
#define  E  22

// LCD commands
#define Cls         0x01
#define CursorHome   0x02
#define ShiftL      0x18
#define ShiftR      0x1c
#define On         0x0c
#define Off         0x08
#define CursorOn   0x0e
#define CursorOff   0x0c
#define CursorBlinkOn   0x0f
#define CursorBlinkOff   0x0e

void LCD_init(void);
void LCD_cmd(int cmd);
void LCD_chr(char data[]);
void LCD_port(int port_value);
void waitms(int);
void set(int);
void reset(int);
void E_pulse(void);
int desetX(int);
void E_Pulse(void);
void Led_sk(void);


_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BluPhenix
Član
Član



Pridružen-a: Pet 05 Mar 2004 12:54
Prispevkov: 1018
Aktiv.: 4.29
Kraj: Sežana

PrispevekObjavljeno: Ned Mar 30, 2008 6:31 pm    Naslov sporočila:   Odgovori s citatom

Problem tistega LCD driverja ki ga talajo na faksu je v tem, da uporablja printf in zadeva zavzame ogrooomno placa. MAli program je velik če čez 80k.

Rešitev je v izdelavi lastnih driverjev in recimo printf funkcije. Jaz sem tako naredil za diplomsko. Cel program mp3 predvajalnika internetnih radijskih postaj, vključno s html "datotekami" lcd driverjem in vsem je bil velik 32k. In to bi lahko še nekoliko (mogoče tudi precej) zmanjšal, vendar je bil to prvi moj večji projekt z C in ARm, tako da je ostalo kot je.

V glavnem če se le da ne uporabljat tistih LCd driverjev of faksa, boste prišralai marsikateri kb.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
dpavli
Član
Član



Pridružen-a: Čet 25 Jan 2007 9:19
Prispevkov: 121
Aktiv.: 0.54

PrispevekObjavljeno: Pon Mar 31, 2008 11:40 pm    Naslov sporočila:   Odgovori s citatom

rudiP je napisal/a:
Vse kar rabiš je tu!!!

Zanesljivo dela..


Hvala, bom sprobal ampak ti verjamem na besedo.

LPd
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1235
Aktiv.: 5.66
Kraj: KOPER

PrispevekObjavljeno: Tor Apr 01, 2008 7:09 am    Naslov sporočila:   Odgovori s citatom

NAPAKA V TEM DELU KODE PROSIM POPRAVI !!

Koda:


 void LCD_var(int var)
{
    int a, i, set;
   set = 0;
   for(i = 9;i >= 0; i --)
   {
      a = 0 ;
      while (var >= desetX(i))
      {
      var -= desetX(i);
      a++;
      }
      if (a !=0 )
      {
         set = 1;
      }
      if (a !=0 || set)
      {
         LCD_vars(a);
      }
      if (a == 0 && i == 0 && set == 0)
      {
         LCD_vars(a);   
      }
   }
}



Uspešno vklopil RTC !!

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group