|
|
View previous topic :: View next topic |
Author |
Message |
exodia505
Joined: 07 Feb 2012 Posts: 34
|
Graphic LCD |
Posted: Thu Mar 08, 2012 4:08 pm |
|
|
Hello !
I would like to know a method that can help me to plot a graph of 4 parameters (current , voltage, pression , temperature) (read from adc )
using graphics driver. I use pic 18f4550 and Graphic lcd (128*64).
I use this function "GLCD_pixel" to draw simple function like (sinus). It works fine, but when I use it to draw function like this :y= x²+5;
it will not be fine.
Thanks _________________ NOway!! |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Thu Mar 08, 2012 9:23 pm |
|
|
Hi,
I don't think you could have been any more vague in your problem description if you tried. We aren't mind readers, what exactly is not working when you try to graph your function?
A GLCD display is nothing more than a glorified piece of electronic graph paper with individually addressable pixels. Fundamentally they aren't that difficult to use if you've got a working driver. Have you examined the range of x and y? Do they make sense? Are the values compatible with the display area of your GLCD?
What display are you using with this project? Can you draw lines, circles and rectangles?
John |
|
|
exodia505
Joined: 07 Feb 2012 Posts: 34
|
|
Posted: Fri Mar 09, 2012 4:31 am |
|
|
yes, i can draw text , rect, circles, ...etc , but what i wanted to say is that when i draw a function like this y=x²+1 ; i get just not clear graph scattered points , so how to draw a continues graph ???? _________________ NOway!! |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Fri Mar 09, 2012 8:40 am |
|
|
Hi,
You seem pretty reluctant to provide any specific details about the display you are using, or the exact nature of your problem, so I'm not going to waste any more time playing "twenty questions" with you. Guessing what you are actually using, and trying to do, is not very productive.
I've done many projects with graphical LCD's, and they've all been pretty straight-forward. I just finished a barometric pressure monitoring system with a graphical display of pressure, and there was nothing special about the coding.
There is a lot out there on the web about GLCD's, so I guess you'll just have to find it!
Good Luck!
John |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19538
|
|
Posted: Fri Mar 09, 2012 9:16 am |
|
|
I think the obvious 'hint', is what would happen if to draw a rectangle, you just set the four corner pixels. Conversely what happens if you draw lines between these points?.
Best Wishes |
|
|
exodia505
Joined: 07 Feb 2012 Posts: 34
|
|
Posted: Sat Mar 10, 2012 3:04 pm |
|
|
i want to draw a signal like this one
so, what function will be used "GLCD_pixel " or what ? _________________ NOway!! |
|
|
dezso
Joined: 04 Mar 2010 Posts: 102
|
|
Posted: Sun Mar 11, 2012 12:29 am |
|
|
Quote: | exodia505
y= x²+5; |
Let say you have 50 pixel space
1^2=1
2^2=4
3^2=9
....
....
7^2=49 //at this point you have reached your max y limit !!
....
....
10^2=100 //there is no place to draw this pixel !!
you only got 0-7=8 variable to display !!
You have to find a way to scale your input value to match your display Y space, simple divide math input/50.
Also as Ttelmah suggested, use the DrawLine function (x1,y1)-(x2,y2), now the next line will start from the current x2,y2 and new end point x3,y3..... _________________ I'm could be wrong many time's, at least I know what I'm doing |
|
|
dezso
Joined: 04 Mar 2010 Posts: 102
|
|
Posted: Sun Mar 11, 2012 2:06 am |
|
|
Try this !!!
Code: | #include <main.h>
#include <HDM64GS12.c>
#include <graphics.c>
char voltText[] = "Volts";
void drawFrame(x,y,w,h)
{
int i=0;
glcd_rect(x, y, w, h, NO, ON); // Outline the frame
glcd_text57(48, 57, voltText, 1, ON); // Display "Volts"
for (i=5;i<=w;i+=10) // Draw some fancy markers :)
{ // horizontal
glcd_line(i,h,i,h+5,ON); // every 10 pixel
}
for(i=y; i<=h;i+=10) // vertical
{
glcd_line(1,i,5,i,ON);
}
}
void main()
{
int ADC_temp = 0;
int x1 = 6;
int x2 = 6;
int y1 = 0;
int y2 = 0;
setup_adc_ports(ALL_ANALOG); // All analog on PORT_A
setup_adc(ADC_CLOCK_INTERNAL); // Internal clock for ADC
set_adc_channel(0); // CH0
glcd_init(ON); // Must initialize the LCD
drawFrame(5,0,125,51); // Draw Plot Frame
while(true)
{
ADC_temp = READ_ADC();
delay_ms(50); // Wait for ADC
y1 = ADC_temp/5; // ADC set for 8 bit / 5 "255/5 max is 51
y1 = 51 - y1;
if(x1 < 124)
{
glcd_line(x1,1,x1,49,OFF); // Erase previous drawing
//glcd_pixel(x1, y1, ON); // use this for slow changing values
glcd_line(x1, y1, x2, y2, ON); // use this for fast changing values
x2 = x1; // x2 now the old coordinate of x1
y2 = y1; // y2 now is the old coordinate of y1
x1++; // move left one pixel
}
else // riched the end, reset x1 and x2
{
x1 = 6;
x2 = 5;
}
}
}
|
_________________ I'm could be wrong many time's, at least I know what I'm doing |
|
|
exodia505
Joined: 07 Feb 2012 Posts: 34
|
|
Posted: Mon Mar 12, 2012 9:58 am |
|
|
Thank you so much!!
that's what i wanted to do !!
i will try to do it with 4 or 6 adc values. _________________ NOway!! |
|
|
dezso
Joined: 04 Mar 2010 Posts: 102
|
|
Posted: Mon Mar 12, 2012 10:12 am |
|
|
4 or 6 separate line will make the plot unreadable !
A- get a much higher resolution display !
B- have it on a separate routine and display it individually _________________ I'm could be wrong many time's, at least I know what I'm doing |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|