[ conver @ 17.12.2009. 11:49 ] @
PiC 18F4550 i Graficki LCD je u pitanju...
Evo koda:

// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections

void main()
{

char *tekst = "Misko";


ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
Glcd_Init(); // Initialize GLCD
Glcd_Fill(0x00); // Clear GLCD
Glcd_Set_Font(Character8x7, 8, 7, 32);
Glcd_Write_Text(tekst, 1, 7, 2);

}

sve se ovo fino iskompajlira bez gresaka, ubacim hex u pic u proteus pokrenem simulaciju i PRC !!! Kaze "Attempted to write while busy flag is set"
izbaci mi brljavo ispisani tekst, cak ni ova funkcija FILL kao da je zaostala GLCD ima mrlje po sebi! Pomoc!


[ branko_g @ 17.12.2009. 13:30 ] @
Citat:
Evo koda:

Jel to sve? Gde su funkcije Glcd_Init(); i ostale?
Citat:
Kaze "Attempted to write while busy flag is set"


Znači da ne čekaš da GLCD poslednju komandu i izvrši( red veličina µs do nekoliko stotina µs) nego
šalješ komande i/ili podatke jednu za drugom, bez obzira da li je ovaj spreman da je primi. Zato se taj flag
koji treba da ispitaš pre nego sto nešto šalješ i zove "busy flag".

Pokaži ceo kod, ali kao prikačku.
[ conver @ 17.12.2009. 18:57 ] @
Hvala Branko na brzom odgovoru... ja sam pocetnik sto se ovoga tice, tako da sam bukvalno isao copy/paste iz helpa Mikro C-a.
na ovom linku se nalazi kod pod naslovom "Using graphic LCD display" s tim sto sam ga ja malo reducirao jer sam zeleo da ispisem tekst samo. mozda sam negde pogresio ili ispustio nesto, ali ne znam sta!
[ Horvat @ 17.12.2009. 22:32 ] @
kopiraj citav original kod

edit:
je l to ovaj kod?
Code:
/*
 * Project name:
     GLCD_Test (Demonstration of the GLCD library routines)
 * Copyright:
     (c) Mikroelektronika, 2008.
 * Revision History:
     20081218:
       - initial release;
 * Description:
     This is a simple demonstration of the GLCD library routines:
     - Init and Clear (pattern fill)
     - Image display
     - Basic geometry - lines, circles, boxes and rectangles
     - Text display and handling
 * Test configuration:
     MCU:             P18F8520
     Dev.Board:       BIGPIC5
     Oscillator:      HS, 10.0 MHz
     Ext. Modules:    GLCD 128x64, KS108/107 controller
     SW:              mikroC PRO for PIC
 * Notes:
     - Turn on GLCD backlight switch SW1.8 (board specific).
*/

//Declarations------------------------------------------------------------------
const code char truck_bmp[1024];
//--------------------------------------------------------------end-declarations

// Glcd module connections
char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RJ0_bit;
sbit GLCD_CS2 at RJ1_bit;
sbit GLCD_RS  at RJ2_bit;
sbit GLCD_RW  at RJ3_bit;
sbit GLCD_EN  at RJ4_bit;
sbit GLCD_RST at RJ5_bit;

sbit GLCD_CS1_Direction at TRISJ0_bit;
sbit GLCD_CS2_Direction at TRISJ1_bit;
sbit GLCD_RS_Direction  at TRISJ2_bit;
sbit GLCD_RW_Direction  at TRISJ3_bit;
sbit GLCD_EN_Direction  at TRISJ4_bit;
sbit GLCD_RST_Direction at TRISJ5_bit;
// End Glcd module connections

void delay2S(){                             // 2 seconds delay function
  Delay_ms(2000);
}

void main() {                       
  unsigned short ii;
  char *someText;

  #define COMPLETE_EXAMPLE                  // comment this line to make simpler/smaller example
  ADCON1 |= 0x0F;                           // Configure AN pins as digital
  CMCON  |= 7;                              // Disable comparators

  Glcd_Init();                              // Initialize GLCD
  Glcd_Fill(0x00);                          // Clear GLCD

  while(1) {
    #ifdef COMPLETE_EXAMPLE
      Glcd_Image(truck_bmp);                // Draw image
      delay2S(); delay2S();
    #endif
    
    Glcd_Fill(0x00);                        // Clear GLCD

    Glcd_Box(62,40,124,56,1);               // Draw box
    Glcd_Rectangle(5,5,84,35,1);            // Draw rectangle
    Glcd_Line(0, 0, 127, 63, 1);            // Draw line
    delay2S();

    for(ii = 5; ii < 60; ii+=5 ){           // Draw horizontal and vertical lines
      Delay_ms(250);
      Glcd_V_Line(2, 54, ii, 1);
      Glcd_H_Line(2, 120, ii, 1);
    }

    delay2S();

    Glcd_Fill(0x00);                        // Clear GLCD
    #ifdef COMPLETE_EXAMPLE
      Glcd_Set_Font(Character8x7, 8, 7, 32);// Choose font, see __Lib_GLCDFonts.c in Uses folder
    #endif
    Glcd_Write_Text("mikroE", 1, 7, 2);     // Write string

    for (ii = 1; ii <= 10; ii++)            // Draw circles
      Glcd_Circle(63,32, 3*ii, 1);
    delay2S();

    Glcd_Box(12,20, 70,57, 2);              // Draw box
    delay2S();
    
    #ifdef COMPLETE_EXAMPLE
      Glcd_Fill(0xFF);                      // Fill GLCD

      Glcd_Set_Font(Character8x7, 8, 7, 32);// Change font
      someText = "8x7 Font";
      Glcd_Write_Text(someText, 5, 0, 2);   // Write string
      delay2S();

      Glcd_Set_Font(System3x5, 3, 5, 32);   // Change font
      someText = "3X5 CAPITALS ONLY";
      Glcd_Write_Text(someText, 60, 2, 2);  // Write string
      delay2S();

      Glcd_Set_Font(font5x7, 5, 7, 32);     // Change font
      someText = "5x7 Font";
      Glcd_Write_Text(someText, 5, 4, 2);   // Write string
      delay2S();

      Glcd_Set_Font(FontSystem5x7_v2, 5, 7, 32); // Change font
      someText = "5x7 Font (v2)";
      Glcd_Write_Text(someText, 5, 6, 2);   // Write string
      delay2S();
    #endif
  }
}


edit:ovako na brzinu bih rekao da vratis ova 2 reda koda

Code:


  Glcd_Init();                              // Initialize GLCD
  Glcd_Fill(0x00);                          // Clear GLCD


javi rezultat
[ conver @ 24.12.2009. 10:57 ] @
Pa moj kod gore i sadrzi te dve linije! pogledaj!
Nego, evo detaljnog objasnjenja sta se dogadja!


a evo i koda:
isto je iz primera MikroC-a, nista nisam dirao!
/******************************************************************************\
* G P S D e c o d e r *
* Tested on 18F4550 @ 8MHz *
* Program by Umut Erkal on April 9th, 2009 *
* *
* Revision: 1.02 *
* *
* Dev. Board.......: EasyPIC 5 with GLCD 128x64 *
* Dev. Environment.: mikroC PRO for PIC 2009 *
* MCU / Osc........: PIC18F4550 / 8Mhz. *
* GPS Hardware.....: SmartGPS HW. Rev 1.01 on PortC *
* GPS Configuration: High Message Set (J6D, J7D, J8E) *
* *
* GPS Decoder application parses the NMEA sentence to extract: *
* 1. # of Satellites being tracked *
* 2. Clock (HH:MM SS) at fix taken (UTC) *
* 3. Latitude *
* 4. Longitude *
* 5. Altitude above mean sea level *
* 6. Height of geoid above WGS84 ellipsoid *
* *
* It only parses GPGGA data since it is essential fix data which *
* provide 3D location and accuracy data. *
* *
* If you have any questions, please don't hesitate to contact me *
* at [email protected] *
* *
\******************************************************************************/

// GLCD module connections
char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// GEnd LCD module connections

// Variables
int received = 0;
char DataType[] = "GPXXX";
char NMEA[] = "$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
char receive;
// End Variables

void main() {
Glcd_Init(); // Initialize LCD
Glcd_Fill(0); // Clear display

UART1_Init(4800); // Initialize UART for GPS board connectivity

// LCD Stuff
Glcd_Rectangle(0, 3, 127, 60, 1);
Glcd_Dot(126, 59, 1);
Glcd_Dot(125, 59, 1);
Glcd_Dot(126, 58, 1);
Glcd_Write_Text("GPS Decoder", 30, 0, 1);
Glcd_Write_Text("Time :", 7, 1, 1);
Glcd_Write_Text("Sats", 7, 2, 1);
Glcd_Write_Text("Lat", 7, 3, 1);
Glcd_Write_Text("Lon", 7, 4, 1);
Glcd_Write_Text("Alt", 7, 5, 1);
Glcd_Write_Text("HGeo", 7, 6, 1);

while(1) {
if (UART1_Data_Ready() == 1) {
receive = UART1_Read();
if (receive == '$') // Check if sentence begins.
{
received = 0;
do{
if (UART1_Data_Ready() == 1)
{
UART1_Read_Text(DataType, ",", 10); // Capture GPXXX word
received = 1;
}
} while(received == 0);
// If it is GPGGA Data, then acquire it.
if ((DataType[2] == 'G') && (DataType[3] == 'G') && (DataType[4] == 'A'))
{
received = 0;
do{
if (UART1_Data_Ready() == 1)
{
UART1_Read_Text(NMEA, "*", 100); // Stop at *XX checksum data
received = 1;
}
} while(received == 0);
// Fill GLCD with relevant data

// Number of satellites being tracked
Glcd_Write_Char(NMEA[39], 36, 2, 1);
Glcd_Write_Char(NMEA[40], 42, 2, 1);

// Time Fix Taken (UTC)
Glcd_Write_Char(NMEA[0], 36, 1, 1);
Glcd_Write_Char(NMEA[1], 42, 1, 1);
Glcd_Write_Char(NMEA[2], 54, 1, 1);
Glcd_Write_Char(NMEA[3], 60, 1, 1);
Glcd_Write_Char(NMEA[4], 72, 1, 1);
Glcd_Write_Char(NMEA[5], 78, 1, 1);

// Latitude
Glcd_Write_Char(NMEA[10], 42, 3, 1);
Glcd_Write_Char(NMEA[11], 48, 3, 1);

Glcd_Write_Char(NMEA[12], 60, 3, 1);
Glcd_Write_Char(NMEA[13], 66, 3, 1);

Glcd_Write_Char(NMEA[15], 78, 3, 1);
Glcd_Write_Char(NMEA[16], 84, 3, 1);
Glcd_Write_Char(NMEA[17], 90, 3, 1);
Glcd_Write_Char(NMEA[18], 96, 3, 1);
Glcd_Write_Char(NMEA[19], 102, 3, 1);

Glcd_Write_Char(NMEA[21], 114, 3, 1);

// Longitude
Glcd_Write_Char(NMEA[23], 36, 4, 1);
Glcd_Write_Char(NMEA[24], 42, 4, 1);
Glcd_Write_Char(NMEA[25], 48, 4, 1);

Glcd_Write_Char(NMEA[26], 60, 4, 1);
Glcd_Write_Char(NMEA[27], 66, 4, 1);

Glcd_Write_Char(NMEA[29], 78, 4, 1);
Glcd_Write_Char(NMEA[30], 84, 4, 1);
Glcd_Write_Char(NMEA[31], 90, 4, 1);
Glcd_Write_Char(NMEA[32], 96, 4, 1);
Glcd_Write_Char(NMEA[33], 102, 4, 1);

Glcd_Write_Char(NMEA[35], 114, 4, 1);

// Altitude, Meters, above mean sea level
Glcd_Write_Char(NMEA[47], 36, 5, 1);
Glcd_Write_Char(NMEA[48], 42, 5, 1);
Glcd_Write_Char(NMEA[49], 48, 5, 1);
Glcd_Write_Char(NMEA[50], 54, 5, 1);

Glcd_Write_Char(NMEA[52], 60, 5, 1);

// Height of geoid (mean sea level) above WGS84 ellipsoid
Glcd_Write_Char(NMEA[54], 36, 6, 1);
Glcd_Write_Char(NMEA[55], 42, 6, 1);
Glcd_Write_Char(NMEA[56], 48, 6, 1);
Glcd_Write_Char(NMEA[57], 54, 6, 1);

Glcd_Write_Char(NMEA[59], 60, 6, 1);
}
receive = "x";
}
}
}
}

I KAO STO VIDITE OPET ISTI PROBLEMI SA GRAFICKIM LCD-OM... LINIJE PREKO DISPLEJA I BUSY FLAG IS SET...
kako da ispravim ovo???
[ vukboban @ 24.12.2009. 20:50 ] @
Nesto nije izgleda u redu sa brzinom,tajmingom...
Kompajlirao sam taj kod na 8Mhz,ali sam u simulaciji stavio brzinu PICa na 1Mhz i ne javlja tu gresku.
Ako stavim u simulaciji brzinu PICa 20Mhz,onda mi 5,6 puta izbaci tu gresku
[ _str_ @ 24.12.2009. 23:51 ] @
U proteusu podesi glcd na vecu frekv.
[ conver @ 25.12.2009. 12:44 ] @
Uspeo sam... Resio sam problem sa busy flagom tako sto sam GLCD popeo na 2Mhz, ali je ostao ovaj drugi problem... Dakle sta god da ispisem po GLCD-u ostanu ove strafte crne horizontalne celom duzinom kao gore! Evo i koda:

// GLCD module connections
char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End GLCD module connections



void main()
{
Glcd_Init(); // Initialize LCD
Glcd_Fill(0); // Clear display

Glcd_Write_Text("Misko", 30, 0, 1);

}

Nista komplikovano... ali linije ostaju. Mislim da je problem sa Glcd_Fill(0);ali menjao sam vrednosti u zagradama, nista se ne dogadja znacajno, mozda se samo prorede ali i dalje su prisutne!
[ Branislav83 @ 08.06.2010. 23:28 ] @
Pozdrav svima

Da li je neko uspeo da resi ovaj problem? Naime, u mom slucaju funkcija Glcd_Fill(0x00) umesto da izbrise ceo displej ona brise svaki drugi red (page).
Ne znam da li ja gresim negde ili je problem u kompajleru.

Unapred hvala
[ bogdan.kecman @ 09.06.2010. 16:38 ] @
da li imas problem na "zivom" sistemu ili na "simuliranom" sistemu.

koji LCD koristis (pretpostavljam da koristis MikroC - ako ti je kod isti kao ovaj prilozeni) - moguce da mikroC drajver ne radi dobro sa tvojim LCD-om a moguce je i da delay koji mikroC koristi za pricu sa LCD-om nije dovoljno veliki (tvoj lcd je spor) - posto mikroC ne koristi busy flag da procita da li je lcd "spreman" vec samo pravi pauzu i ocekuje da se lcd za to vreme "oporavi i postane spreman". Ako ti je lcd spor, onda ti recimo svaka druga naredba koja ode sa mcu-a ne bude prihvacena i on ti obrise samo svaki drugi red...
[ Branislav83 @ 09.06.2010. 23:25 ] @
Bogdane hvala na odgovoru.
Možda sam malo bio nejasan kada sam postavio pianje.
Radim simulaciju u Proteusu 7.2. i nemam problema sa Busy Flag-om, tj. imao sam ali sam podigao clock glcd-a na 2MHz i onda više Proteus nije prijavljivao taj problem. Kompajler je MikroC PRO.
Sumnjam na dve stvari:
1. Da je model glcda u Proteusu loš,
2. Da je funkcija Glcd_Fill(0x00) loša
Ne bih rekao da je problem u tome da je glcd spor, jer sam stavljao pauze pre i posle pozivanja funkcije Glcd_Fill(0x00) reda cak i sekunde.
Moguce da je problem u radu funkije Glcd_Fill(0x00), tj. da su vremenska kašnjenja u njoj mala. Ali onda po mom mišljenju trebalo bi Proteus da Prijavi gresku tipa Busy Flag.
Nalazio sam na nekim forumima da u praksi (sa konkretnim glcd-om) radi sve ok i da nema tih problema. Problem je što trenutno nemam taj glcd kod sebe pa ne mogu da isprobam, a i zanima me zbog čega ne radi sumulacija (radoznalost ).
Komponenta u Proteusu je AMPIRE128X64.
Inače nisam nišata posebno radio kod, skoro je indentičan sa onim koji dolazi sa kompajlerom. Hteo sam da vidim čisto kako se to ponaša.
[ bogdan.kecman @ 10.06.2010. 00:07 ] @
ja sam imao dosta smora sa mikroC (g)lcd bibliotekama pa sam koristio neke svoje, pa sam onda pobegao sa mikroC-a kompletno (kupio ccs c za 16F i manje i koristim microchip c18 i c30 za ove vece)... generalno svi problemi su mi nestali kada sam poceo da koristim busy umesto da pretpostavljam da ce da se oporavi lcd za xyz usec.

elem, probacu taj lcd sutra u proteusu sa ccs c-om pa javljam
[ bogdan.kecman @ 10.06.2010. 13:56 ] @
probao sam ccs c

Code:


#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)



#include <HDM64GS12.c>
#include <graphics.c>
#include <math.h>

void displayVoltage(int adc) {
   char voltage[9];
   sprintf(voltage, "%f", (float)adc * .01960784); // Converts adc to text
   voltage[4] = '\0';                              // Limit shown digits to 3
   glcd_rect(45, 18, 69, 25, YES, OFF);            // Clear the old voltage
   glcd_text57(45, 18, voltage, 1, ON);            // Write the new voltage
}

void main() {
   int1  warn = FALSE;
   int8  adc = 0, adc_old = 0;
   char  voltText[] = "Volts", warning[] = "Warning";
   float theta = 0;

   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);

   glcd_init(ON);                               // Must initialize the LCD
   glcd_rect(1, 5, 126, 15, NO, ON);            // Outline the bar
   glcd_text57(70, 18, voltText, 1, ON);        // Display "Volts"
   glcd_circle(30, 47, 10, NO, ON);             // Draw the clock circle

   for(;;) {
      adc = read_adc();                         // Read a value from the ADC
      displayVoltage(adc);                      // Display the reading
      adc = (adc > 249) ? 249 : adc;            // Keep the value 249 or less

      if(adc != adc_old) {
         glcd_rect(adc/2+1, 6, adc_old/2+1, 14, YES, OFF);  // Clears the old bar
         glcd_rect(1, 6, adc/2+1, 14, YES, ON);             // Draws a new bar
         adc_old = adc;                                     // Set old value to new

         if(adc > 200 && !warn) {                  // Check if over 4 volts
            glcd_rect(45, 38, 124, 55, YES, ON);   // Draw a filled black rectangle
            glcd_text57(47, 40, warning, 2, OFF);  // Write "Warning" on the LCD
            warn = TRUE; }
         else if(adc <=200 && warn) {
            glcd_rect(45, 37, 125, 55, YES, OFF);  // Draw a filled white rectangle
            warn = FALSE; }
      }

      // The following 3 lines make the clock hand spin around
      glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), OFF);
      theta = (theta > 5.9) ? 0 : (theta += .3);
      glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), ON);

      #ifdef FAST_GLCD
      glcd_update();
      #else
      delay_ms(100);    // Reduces flicker by allowing pixels to be on
                        // much longer than off
      #endif
   }
}


on koristi glcd_rect() za popunjavanje ... i to sljaka super .. bez menjanja vrekvencije lcd-a (na default 300KHz a radi cak i kada ga skinem na 200KHz) .. mcu 16f877A (nemam na zalost 18F ccs kompajler placen tako da .. samo 10/12/14/16F) ...

zakacen ti je hex da probas i slicka iz isisa
[ Branislav83 @ 10.06.2010. 16:47 ] @
Bogdane hvala jos jednom.
Sa mikroC-om ja uspevam pa ispišem i nacrtam sta želim. Problem je kada želim da sve to obrišem. Upravo to radi funkcija Glcd_Fill(0x00).
Međutim, kako sam i ranije rekao ona briše samo svaki drugi red. Pokušaću da napišem svoju fukciju za to.
U svakom slučaju hvala na brzom odgovoru, pa javljam šta sam uradio.
Pozdrav
[ bogdan.kecman @ 10.06.2010. 16:58 ] @
verovatno je mikroC fukncija losa ...

evo ti iz picc-a pozoves ga sa fill=1 i sa x1,y1=0 i sa x2,y2 128,64 i radi ko taj fill ..

(prikaceni fajlovi su ti drajver + funkcije za crtanje) ... mozes relativno lako i brzo da ih prepises za mikroC ako hoces .. kao sto rekoh, picc drajver proverava stanje display-a umesto da pretpostavlja da se oporavio posle nekog vremena.

btw, mozes da mi posaljes hex koji ce samo da obrise ekran da ga pustis, ja imam malo noviji isis moguce da tu ima razlike

Code:


/////////////////////////////////////////////////////////////////////////
// Purpose:       Draw a rectangle on a graphic LCD
// Inputs:        (x1, y1) - the start coordinate
//                (x2, y2) - the end coordinate
//                fill  - YES or NO
//                color - ON or OFF
// Dependencies:  glcd_pixel(), glcd_line()
/////////////////////////////////////////////////////////////////////////
#ifdef LARGE_LCD
void glcd_rect(int16 x1, int16 y1, int16 x2, int16 y2, int1 fill, int1 color)
#else
void glcd_rect(int8 x1, int8 y1, int8 x2, int8 y2, int1 fill, int1 color)
#endif
{
   if(fill)
   {
      #ifdef LARGE_LCD
      int16 i, xmin, xmax, ymin, ymax;
      #else
      int8  i, xmin, xmax, ymin, ymax;
      #endif

      if(x1 < x2)                            //  Find x min and max
      {
         xmin = x1;
         xmax = x2;
      }
      else
      {
         xmin = x2;
         xmax = x1;
      }

      if(y1 < y2)                            // Find the y min and max
      {
         ymin = y1;
         ymax = y2;
      }
      else
      {
         ymin = y2;
         ymax = y1;
      }

      for(; xmin <= xmax; ++xmin)
      {
         for(i=ymin; i<=ymax; ++i)
         {
            glcd_pixel(xmin, i, color);
         }
      }
   }
   else
   {
      glcd_line(x1, y1, x2, y1, color);      // Draw the 4 sides
      glcd_line(x1, y2, x2, y2, color);
      glcd_line(x1, y1, x1, y2, color);
      glcd_line(x2, y1, x2, y2, color);
   }
}
[ bogdan.kecman @ 10.06.2010. 17:07 ] @
btw ako koristis 18F - slobodno definisi FAST_GLCD .. radi jos brze ..

[ Branislav83 @ 10.06.2010. 17:28 ] @
Predohitrio si me sa odgovorima. Upravo sam napisao moju funkciju za brisanje i radi.
Ostaje jos da proverim ostale funkcije koje dolaze sa kompajlerom, i ako nisu i one dobre onda cu da napisem neku svoju biblioteku za ovaj lcd.
Evo i kako sam je napisao, malo je glupo ali radi

Code:
void fill(void)
{
GLCD_CS1=1;
GLCD_CS2=0;
for(i=0;i<8;i++)
    {
      Glcd_Set_Page(i);
      for(j=0;j<128;j++)
          {
           Glcd_Write_Data(0x00);
          }
    }
GLCD_CS1=0;
GLCD_CS2=1;
for(i=0;i<8;i++)
    {
      Glcd_Set_Page(i);
      for(j=0;j<128;j++)
          {
           Glcd_Write_Data(0x00);
          }
    }
}


U svakom slucaju hvala
[ Branislav83 @ 10.06.2010. 17:44 ] @
Pošto si rekao da si radio u mikroC-u a sada radiš u CCS-u, reci mi da li je komplikovan prelaz. Pitam te jer sam nalazio neke bibliote za SED1335 glcd a trebalo bi i sanjim nešto da radim, pa ako nije komplikovan prelaz
prešo bih odmah na CCS. Da ne gubim vreme više sa MikroC-om. Ili je možda bolje da prepravim tu biblioteku za MikroC.
Pozdrav
[ Branislav83 @ 10.06.2010. 19:05 ] @
Nije do Proteus. Probao sam i na 7.6 ali opet isto. Ne rade u MikroC-u jos neke funkcije tako da cu da prepravim ovaj tvoj driver.
Ali nisam uspeo da pronadjem gde to ispitujes Busy Flag.

Code:
void glcd_writeByte(int1 side, BYTE data)
{
   if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

   output_low(GLCD_RW);       // Set for writing
   output_d(data);            // Put the data on the port
   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);

   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}


U ovom delu koda imas samo cekanje od 1 i 5 ciklusa (mislim da su ciklusi). Ne znam mozda gresim, ali ni u ostaku koda nisam uspeo da pronadjem deo gde proveras ovaj Flag.
Jesu li int8 i int16 8-bitna i 16-bitna promenjiva ili je kod CCS drugacije?
Unapred hvala
[ bogdan.kecman @ 10.06.2010. 20:03 ] @
nisam ti ja bas pravi covek za to pitanje, meni je svejedno, ccs, mikroc, c18, avr-gcc, msb430-gcc ... sve je to isti djavo .. malo drugacije par sitnica ali generalno sve je to isto ..

ono sto je razlog sto sam ja presao sa mikroC-a na ccs c (osim toga sto sam dobio ccs c uz neki dlp modul) je sto ccs ima SVE biblioteke u source-u dok mikroC sve drzi skriveno tako da je sa ccs mnogo lakse prepraviti/prilagoditi nego sa mikroC ... dalje mikroC nije kompatibilan za debagiranje ni sa cim osim sa mikroe programatorom / dev kitom ... a to mi bas i nije resenje posto su svi ostali kompatibilni sa mplab-om i microchip tools-om tipa pickit1, pickit2, pickit3
[ bogdan.kecman @ 10.06.2010. 20:03 ] @
drajver nije moj, to su fajlovi iz ccs c-a
[ bogdan.kecman @ 10.06.2010. 20:14 ] @
Code:

// Purpose:    Fill the LCD screen with the passed in color
// Inputs:     ON  - turn all the pixels on
//             OFF - turn all the pixels off
void glcd_fillScreen(int1 color)
#ifdef FAST_GLCD
{
   //for 18Fxxx
   int8  data;
   int8  *p1, *p2;
   int16 i;

   p1 = displayData.left;
   p2 = displayData.right;
   data = 0xFF * color;

   for(i=0; i<512; ++i)
   {
       *p1++ = data;
       *p2++ = data;
   }
}
#else
{
   //for 16Fxxx
   int8 i, j;

   // Loop through the vertical pages
   for(i = 0; i < 8; ++i)
   {
      output_low(GLCD_DI);                      // Set for instruction
      glcd_writeByte(GLCD_LEFT, 0b01000000);    // Set horizontal address to 0
      glcd_writeByte(GLCD_RIGHT, 0b01000000);
      glcd_writeByte(GLCD_LEFT, i | 0b10111000);// Set page address
      glcd_writeByte(GLCD_RIGHT, i | 0b10111000);
      output_high(GLCD_DI);                     // Set for data

      // Loop through the horizontal sections
      for(j = 0; j < 64; ++j)
      {
         glcd_writeByte(GLCD_LEFT, 0xFF*color);  // Turn pixels on or off
         glcd_writeByte(GLCD_RIGHT, 0xFF*color); // Turn pixels on or off
      }
   }
}
#endif




za busy si u pravu .. ima samo delay .. nema uopste proveru busy-a .. bio sam siguran da ima :)
[ Branislav83 @ 10.06.2010. 23:28 ] @
Do sada sam gledao CCS, ne deluje nešto tesko i nerazumljivo. Možda uskoro počnem sa njim da radim. Sada ću za početak od odradim neki hardver pa cu da istestiram "uživo" MikroC.
Javljam šta sam uradio
Pozdrav i puno hvala na uloženom trudu.
[ bogdan.kecman @ 10.06.2010. 23:34 ] @
ko sto rekoh, C je C .. ako znas znas, ove sitne razlike su abitne, prevazidju se za par sati ...

ccs c ima najvecu manu sto nema normalan linker tako da ne moze da iskompajlira 5 C fajlova i uveze u jedan bin nego moras sve da inkludujes u jedan fajl i onda se taj jedan iskompajlira .. vidim da i u najnovijim verzijama rade tako, malo je smor u pocetku ali posle se naviknes.

ono sto je najjaca fora je sto imaju, po meni, najjaci spisak primera i biblioteka od svih c kompajlera - i SVE imas u sorsu.

doduse, ja i dalje za 18F preporucujem C18 :) .. isto ima odlicnu podrsku, isto ima svasta u sourcetu ... nisam poredio nikad izlaz njegov i ccs-ov a cuo sam razna razlicita misljenja .. ccs ima i svoj gui ako vise volis od mplab-a .. ja sam ga koristio neko vreme i generalno je bolji od mplab-a ali, nekako sam se vremenom navikao na mplab tako da .. sad koristim samo njega
[ Branislav83 @ 24.10.2010. 16:28 ] @
Pozdrav

Ovako, presao sam definitivno sa MikroC-a na CCS. GLCD kompatibilan sa ks108/107 radi ok, ali se javlja drugi problem
Naime, kada ubaci na displej neku slicicu, 32x64 recimo, ne mogu da ispisem slova iz tebele TEXT2. Pretpostavljam da je
upitanju stek, ali nisam siguran. A i ne znam kako da resim problem. Inace koristim PIC18F4620 i ima dovoljno i rom-a i ram-a
(tako bar pokazuje CCS).
Ako ima ideju u cemu je problem ili ako zna resenje pomooc je dobrodosla. Zanima me kako da smanjim "utosak" steka u CCS-u.

Unapred hvala
[ bogdan.kecman @ 24.10.2010. 18:09 ] @
- kako si zakljucio da je stek
- kako ti se prikazuje problem o kom pricas
[ Branislav83 @ 24.10.2010. 19:26 ] @
Mislim da je stek zato sto mogu da ispisem bilo koji tejst bez promlema ili da postavim neku slicicu.
Ali kada pokusam da istovremeno ispisem tekst i postavim neku manju slicicu javlja se problem.
Manifestuje se tako sto ne prikazje mala slova i velika slova koja se nalaze u tabeli TEXT2.
Inace koristim GLCD.c kao biblioteku za displej.
Jos gora stvar je sto nekad radi a nekad ne radi, ali nikad nije proradilo kada sam koristio interrupt
(interrupt on change). Kada ne koristim interrupt ponekad i uspem na napisem tekst i prikazem sliku
istovremeno.
Nisam siguram da je stek ali pretpostavljam, jer ne znam sta bi drugo moglo da pravi takav problem.
Znaci mogu uvek da prikazem slova iz tabele TEXT (od space do R) i sliku istovremeno, ali ne mogu drugu tabelu i slicicu.
Na mestu gde treba da se prikaze karakter u reci iz druge tabele prikazjue se prazan karakter (space) tj. ne prikazuje se nista,
ostaje prazno mesto.

[ bogdan.kecman @ 25.10.2010. 09:33 ] @
ako ti nije top secret taj kod, zakaci ga ovde da vidimo, prilicno sam siguran da je nesto drugo u pitanju
[ Branislav83 @ 26.10.2010. 19:09 ] @
Bogdane bio si verovatno upravu. Danas sam neto kombinovao sa fuses podesavanjima i proradilo je.
Nisam jos uvek ukapirao o cemu se tacno radi i sta je bio problem jer nisam bas imao vremena.
Program nije bas top secret, ali nije bas ni profesionalno da ceo program objavljujem na furum.
Poslacu ti na PP ovih dana da vidis o cemu se radi ako te zanima, a ja cu u međuvremenu da pokusam da ukapiram
sta je bio problem
Pozdrav
[ bogdan.kecman @ 27.10.2010. 10:22 ] @
salji ako ti treba pomoc - ako ne provalis sta je .. al ako radi, to je to ...

uzmes jednu po jednu stvar koju si dodao ugasis i vidis koja je dovela do toga da sada radi :)