پاسخ : درخواست کمک برای جلوگیری از overwrite شدن اطلاعات در glcd
ممنون از شما جناب شهرام...مثل اینکه راه حل شما جواب داد :wow: :applause:
یه ویدیوی کوتاه از عملکرد برد و پروژه با این برنامه گذاشتم . حجمش به شش مگ هم نمیرسه... توصیه میکنم حتما ببینید تا هم با ظاهر بردی که من ساختم اشنا بشید و هم عملکرد برنامه رو ببینید....
البته نمایش موج یه خورده کند هست.... ویدیو رو ببینید متوجه میشید... تو این ویدیو مخصوصا با پتانسیومتری که برای پورت PORTA.0 هست بازی کردم تا شکل موج بالا و پایین بره.
http://uploadfa.net/uploads/13404350351.rar
نکته دیگه بالا و پایین شدن موج به اندازه دو و حداکثر سه پیکسل در حالت ثابت هست که فکر میکنم بدلیل عبور امواج باشه و اینکه من روی همه ی پورتهای میکرو هم پین هدر ماده بستم و هم پین هدر نر و در اتاقم هم دائما امواج مودم وایرلس و موبایل و آنتن وجود داره.
یه چیز دیگه...
کل برنامه اینه.... مجبور شدم برای جلوگیری از پاک شدن محور های افقی و عمودی اونها رو داخل حلقه بنویسم و اینکه چون در ستون 128 و 0 کادربندی اسیلوسکوپ رو داشتم بجای 128 از 127 و بجای 0 از 1 شروع کردم.
فقط یه مشکل به وجود اومد.... تو ویدیو اون هشت تا پوش باتن رو دیدید..؟ اونها برای فرمان دادن به میکرو و نوشتن یک اطلاعات از جمله انتخاب کانالهای ورودی و افزایش و کاهش ولت دیویژن و تایم دیویژن هستن.... تا قبل از این برنامه اونها درست کار میکردن و موج درست نشون داده نمیشد...
حالا موج درست نشون داده میشه ولی وقتی یک پوش باتن رو میزنم موج میره و دیگه نمیاد..... چیکار کنم... مشکل از کجاست...؟ در ضمن کلید ها رو هم بصورت دائم در همون حلقه اسکن میکنم و برای هرکدوم از اونها هم یک تابع تعریف کردم.
ممنون از شما جناب شهرام...مثل اینکه راه حل شما جواب داد :wow: :applause:
یه ویدیوی کوتاه از عملکرد برد و پروژه با این برنامه گذاشتم . حجمش به شش مگ هم نمیرسه... توصیه میکنم حتما ببینید تا هم با ظاهر بردی که من ساختم اشنا بشید و هم عملکرد برنامه رو ببینید....
البته نمایش موج یه خورده کند هست.... ویدیو رو ببینید متوجه میشید... تو این ویدیو مخصوصا با پتانسیومتری که برای پورت PORTA.0 هست بازی کردم تا شکل موج بالا و پایین بره.
http://uploadfa.net/uploads/13404350351.rar
نکته دیگه بالا و پایین شدن موج به اندازه دو و حداکثر سه پیکسل در حالت ثابت هست که فکر میکنم بدلیل عبور امواج باشه و اینکه من روی همه ی پورتهای میکرو هم پین هدر ماده بستم و هم پین هدر نر و در اتاقم هم دائما امواج مودم وایرلس و موبایل و آنتن وجود داره.
یه چیز دیگه...
کل برنامه اینه.... مجبور شدم برای جلوگیری از پاک شدن محور های افقی و عمودی اونها رو داخل حلقه بنویسم و اینکه چون در ستون 128 و 0 کادربندی اسیلوسکوپ رو داشتم بجای 128 از 127 و بجای 0 از 1 شروع کردم.
کد:
#include <mega32a.h>
#include <delay.h>
// Graphic LCD functions
#include <glcd.h>
// Font used for displaying text
// on the graphic LCD
#include <font5x7.h>
int i,j,p,L1,L2,a2d;
int vdc1=0,vdc2=0;
unsigned char Xmax = 127;
unsigned char x = 1;
unsigned char inV;
unsigned char oldV[Xmax];
void selectch1(void);
void selectch2(void);
void selectbothchannels(void);
void Lissajous (void);
void incvoltdiv (void);
void decvoltdiv (void);
void inctimediv (void);
void dectimediv (void);
void main(void)
{
// Declare your local variables here
// Graphic LCD initialization data
GLCDINIT_t glcd_init_data;
// Graphic LCD initialization
// The KS0108 connections are specified in the
// Project|Configure|C Compiler|Libraries|Graphic LCD menu:
// DB0 - PORTC Bit 0
// DB1 - PORTC Bit 1
// DB2 - PORTC Bit 2
// DB3 - PORTC Bit 3
// DB4 - PORTC Bit 4
// DB5 - PORTC Bit 5
// DB6 - PORTC Bit 6
// DB7 - PORTC Bit 7
// E - PORTD Bit 0
// RD /WR - PORTD Bit 1
// RS - PORTD Bit 2
// /RST - PORTD Bit 3
// CS1 - PORTD Bit 4
// CS2 - PORTD Bit 5
// Specify the current font for displaying text
glcd_init_data.font=font5x7;
// No function is used for reading
// image data from external memory
glcd_init_data.readxmem=NULL;
// No function is used for writing
// image data to external memory
glcd_init_data.writexmem=NULL;
glcd_init(&glcd_init_data);
glcd_outtextxyf(0,0,"DIGITAL OSILLOSCOPE");
glcd_outtextxyf (0,22,"BY AVR MICOCTRL");
glcd_outtextxyf (0,45,"HAMID REZA RABET" );
delay_ms(3000);
glcd_clear();
ADCSRA=0xff;
SFIOR=0x00;
ADMUX=0x40;
glcd_putcharxy( 1, 56, 'v');
glcd_putcharxy( 66, 56, 't');
glcd_putcharxy( 7, 56, '=');
glcd_putcharxy( 72, 56, '=');
for(i=0;i<=54;i+=2){
glcd_setpixel(0,i);
glcd_setpixel(127,i);
}
while (1)
{
///// namayesh moj
a2d = ADCW;
inV = ((-54 *a2d) /1024) +54;
glcd_clrpixel(x, oldV[x]); //Clear previous set pixel
glcd_setpixel(x, inV); //Set current pixel
oldV[x] = inV;
x++;
if(x>=Xmax)
x = 1;
/// nayaesh kadr ofoghi
for(i=0;i<128;i+=2){
glcd_setpixel(i,54);
glcd_setpixel(i,0);
}
// namayesh mehvar haye ofoghi va amoodi
glcd_putcharxy( 30, 24, '|');
glcd_putcharxy( 92, 24, '|');
glcd_putcharxy( 62, 7, '_');
glcd_putcharxy( 62, 35, '_');
glcd_line(0,27,128,27);
glcd_line(64,0,64,64);
//// kelid 1
if(PINB.0 ==0){
delay_ms(20);
if(PINB.0 ==0)
selectch1();
}
/// kelid 2
if(PINB.1 ==0){
delay_ms(20);
if(PINB.1 ==0)
selectch2();
}
/// kelid 3
if(PINB.2 ==0){
delay_ms(20);
if(PINB.2 ==0)
selectbothchannels();
}
///kelid 4
if(PINB.3 ==0){
delay_ms(20);
if(PINB.3 ==0)
Lissajous();
}
//kelid 5
if(PINB.4 ==0){
delay_ms(20);
if(PINB.4 ==0)
incvoltdiv();
vdc1++;
}
if(vdc1>3)
vdc1=3;
// kelid 6
if(PINB.5 ==0){
delay_ms(20);
if(PINB.5 ==0)
decvoltdiv();
vdc2++;
}
if(vdc2>3)
vdc2=3;
/// kelid 7
if(PINB.6 ==0){
delay_ms(20);
if(PINB.6 ==0)
inctimediv();
}
/// kelid 8
if(PINB.7 ==0){
delay_ms(20);
if(PINB.7 ==0)
dectimediv();
}
}
}
#asm("sei");
//// entekhab kanal 1
void selectch1 (void)
{
glcd_outtextxyf (2,5,"SEL CH1");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<60;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x00;
}
//// entekhab kanal 2
void selectch2 (void)
{
glcd_outtextxyf (2,5,"SEL CH2");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<60;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x01;
}
/// entekhab har do kanal
void selectbothchannels (void)
{
glcd_outtextxyf (2,5,"SEL CH1&2");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x00;
delay_ms(10);
ADMUX=0x01;
}
//// namayesh lissajous
void Lissajous (void)
{
glcd_outtextxyf (2,5,"Lissajous");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
if(ADMUX==0x00)
L1=ADCW;
else {
if(ADMUX==0x01)
L2=ADCW ;
}
}
//// afzayesh volt division
void incvoltdiv (void)
{
glcd_outtextxyf (2,5,"incvoltdiv");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
if(vdc1==1){
glcd_putcharxy( 12,55,'1');
}
if(vdc1==2){
glcd_putcharxy( 12,55,'2');
}
if(vdc1==3){
glcd_putcharxy (12,55,'5');
}
p=p*2;
}
//// kahesh volt division
void decvoltdiv (void)
{
glcd_outtextxyf (2,5,"decvoltdiv");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
if(vdc2==0 && vdc1==3)
{
glcd_putcharxy( 12,55,'2');
}
if(vdc2==0 && vdc1==2){
glcd_putcharxy( 12,55,'1');
}
if(vdc2==1 && vdc1==3){
glcd_putcharxy(12,55,1);
}
p=p/2;
}
//// afzayesh time division
void inctimediv (void)
{
glcd_outtextxyf (2,5,"inctimediv");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
}
//// kahesh time division
void dectimediv (void)
{
glcd_outtextxyf (2,5,"dectimediv");
delay_ms(30);
for(i=2;i<20;i++){
for(j=2;j<62;j++)
glcd_clrpixel(j,i);
}
}
حالا موج درست نشون داده میشه ولی وقتی یک پوش باتن رو میزنم موج میره و دیگه نمیاد..... چیکار کنم... مشکل از کجاست...؟ در ضمن کلید ها رو هم بصورت دائم در همون حلقه اسکن میکنم و برای هرکدوم از اونها هم یک تابع تعریف کردم.







کار کنم ولی جواب نمیده... نه اینکه کامپایلر ارور بده.... در عمل جواب نمیده...
دیدگاه