Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mikrokontroler i GLCD

[es] :: Elektronika :: Mikrokontroleri :: Mikrokontroler i GLCD

Strane: 1 2

[ Pregleda: 9346 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.34.*



+1 Profil

icon Mikrokontroler i GLCD17.12.2009. u 11:49 - pre 174 meseci
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!


 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Mikrokontroler i GLCD17.12.2009. u 13:30 - pre 174 meseci
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.
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
95.180.10.*



+1 Profil

icon Re: Mikrokontroler i GLCD17.12.2009. u 18:57 - pre 174 meseci
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!
 
Odgovor na temu

Horvat

Član broj: 17332
Poruke: 3042
dynamic-213-198-193-243.adsl.eunet.rs.



+165 Profil

icon Re: Mikrokontroler i GLCD17.12.2009. u 22:32 - pre 174 meseci
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
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.34.*



+1 Profil

icon Re: Mikrokontroler i GLCD24.12.2009. u 10:57 - pre 174 meseci
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???
 
Odgovor na temu

vukboban
Boban Vukovic
PANCEVO

Član broj: 116735
Poruke: 250
212.200.65.*



+11 Profil

icon Re: Mikrokontroler i GLCD24.12.2009. u 20:50 - pre 174 meseci
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
 
Odgovor na temu

_str_

Član broj: 53798
Poruke: 878
217.169.223.*



+10 Profil

icon Re: Mikrokontroler i GLCD24.12.2009. u 23:51 - pre 174 meseci
U proteusu podesi glcd na vecu frekv.
__*__
*___*
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.34.*



+1 Profil

icon Re: Mikrokontroler i GLCD25.12.2009. u 12:44 - pre 174 meseci
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!
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD08.06.2010. u 23:28 - pre 168 meseci
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
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD09.06.2010. u 16:38 - pre 168 meseci
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...
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD09.06.2010. u 23:25 - pre 168 meseci
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.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 00:07 - pre 168 meseci
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

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 13:56 - pre 168 meseci
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

Prikačeni fajlovi
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 16:47 - pre 168 meseci
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
Prikačeni fajlovi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 16:58 - pre 168 meseci
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);
   }
}

Prikačeni fajlovi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 17:07 - pre 168 meseci
btw ako koristis 18F - slobodno definisi FAST_GLCD .. radi jos brze ..


 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 17:28 - pre 168 meseci
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
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 17:44 - pre 168 meseci
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
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-3.sezampro.yu.



Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 19:05 - pre 168 meseci
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
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Mikrokontroler i GLCD10.06.2010. u 20:03 - pre 168 meseci
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
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Mikrokontroler i GLCD

Strane: 1 2

[ Pregleda: 9346 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.