پاسخ : درخواست کمک برای جلوگیری از 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); } }
حالا موج درست نشون داده میشه ولی وقتی یک پوش باتن رو میزنم موج میره و دیگه نمیاد..... چیکار کنم... مشکل از کجاست...؟ در ضمن کلید ها رو هم بصورت دائم در همون حلقه اسکن میکنم و برای هرکدوم از اونها هم یک تابع تعریف کردم.
دیدگاه