اطلاعیه

Collapse
No announcement yet.

توضیح درباره GLCD و AVR OSCILLOSCOPE

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    توضیح درباره GLCD و AVR OSCILLOSCOPE



    چون تازه واردم سلام میکنم به همه جویندگان علم و سازندگان فردایی نزدیک معرفی میکنم . مرتضی آقازاده 20 ساله دانشجو
    .میخواستم یه توضیح مختصر درباره ساختن یه اسلسکوپ ساده بوسیله AVR بدم.نمیدونم چرا هیچ جا توضیح ندادن انگار چیه :wow:اونایی هم که حرفه ای اند زیاد بهشون بر نخوره چون واسه تازه کار اما زود پیشرفت کنایی مثل خودم دارم توضیح میدم،خلاصه ببخشن. :cry2:
    الان یه توضیح میدم که قشنگ شیر فهم شید.بعدشم برنامه سادشو با پروتئوسشو میذارم که قشنگ با هم باشیم :nerd:، البته من فقط مراحلشو میگم جزئیاتش رو که فوق العاده ساده تره رو میذارم به عهده خودتون.
    از اینجا شروع میکنم که باید کار با GLCD رو یاد بگیرید ، اونم اینجورییکه GLCD شصت و چهار تا سطر داره و 128 تا ستون که کنترل هر کدام از 64 ستون اول و دوم دست یک تراشه KS0128 است،که با پایه های CS1,CS2 روی همان GLCD مشخص می شود.البته باید بگم که این 64 سطر واقع در 8 صفحه است که هر صفحه 8 بیت میشود
    یعنی شما میتونید دونه دونه ستونها رو مقدار دهی کنید اما نمیتونید دونه دونه سطرها رو مقدار دهی کنید یعنی باید ابتدا صفحه را مشخص کنید بعد با گذاشتن عددی بین 0 تا 255 ،یا 0X00 تا 0XFF داتهای مورد نظر را روشن کنید.خب توضیح زیاد شد اگه میخوایید کامل مسئله GLCD رو بفهمید برید مراجعش مخصوصا کتاب مرجع(مظاهریان،بیانلو) رو بخونید. کاربرد دیگری که در این پروژه هست ADC است . اگه دقت کرده باشید ADC در ساختار خودش چند خاصیت دارد.یکی اینکه ولتاژ منفی را تبدیل نمیکند(که این کار با کانال تفاضلی حل میشود)
    و دیگر اینکه دقت پایین دارد (یعنی هر پله آن 0.005 است که خواهید دید که دقت خوبی نیست)اینم دو تا نکته از ADC :redface:
    توضیح برنامه اینکه ابتدا یک تصویر در GLCD لود میشود وبترتیب بجای اینکه صفحه پاک شود بعد از هر 100 میلی ثانیه دوباره لود میشود که تشکیل دهنده صفحه اصلی اسکوپ است. و واحد ACD
    را که به صورت کانال تفاضلی(برای اینکه منفی را هم تشخیص دهد ) پیکر بندی شده را احضار میکند.
    چون در هر ستون باید یک بیت روشن باشد(0و1و2و4و8و16و32و64و128) به صورت فورمولیک تابع مقدار بیت و سطر را تعیین میکند(البته باید یک معیار هم داشته باشید ، مثلا من سطر 4 خانه 0 را صفر اسکوپ و سطر 0 و بیت 0 را 5 گرفتم)
    بعد بیت و سطر تعیین شده و ستون هم که مشخص است میکرو داتی روی همان جایی که ما میخواهیم ایجاد میکند .
    البته بهمین سادگی ها هم نیست یه ذره روش فکر کنید
    در پایان 4 نکته رو هم بگم که کامل بشه :

    1.این اسکوپ میتواند تواناییهای دیگر هم داشته باشه ، مثلا قاعدتا نمیتونه بیشتر از 1KHZ رو نشون بده چون ADC توانایی نداره
    پس میشه براش TIME/DIV تعریف کرد .یا اینکه آنرا تریگر کرد.یا VOLT/DIV گذاشت که اگه یه ذره فکر کنید کاملا قابل حله

    2.فرکانس میکرو 16MHZ است.

    3.اگه تازه کاریید ابتدا کتابی رو در زمینه ی GLCD , ADC مطالعه کنید.

    4.اگه میتونید یه سوالی هم واسه من پیش اومده هر کی جواب داد جایزه داره .چی جوری میشه GLCD رو بسمت چپ و راست شیفت داد(مرسی)
    [[left][left][right][center][left][center][pre]
    left]/
    [left]/**************************************************//avr ossiloscope//***********************************
    //************************************************** **************************************************

    #include <mega32.h>
    #include <delay.h>



    #define LCD_PORT PORTD
    #define LCD_RST PORTB.0
    #define LCD_E PORTB.1
    #define LCD_RW PORTB.2
    #define LCD_RS PORTB.3
    #define LCD_CS2 PORTB.4
    #define LCD_CS1 PORTB.5
    #define ADC_VREF_TYPE 0x50
    int r;
    unsigned int x,y,i;
    unsigned int j,w,z;
    unsigned int k,l=0,m,o,h;


    //************************************************** *********************************
    char picture[]={
    کد های یه عکس با استفاده از GLCD TOOL
    };


    //************************************************** **********************************
    void write_lcd(char columns,char page,char data);
    void latchlcd();
    void glcd_init();
    void read_adc(void)
    {
    ADMUX=ADC_VREF_TYPE;
    #asm
    in r30,mcucr
    cbr r30,__sm_mask
    sbr r30,__se_bit | __sm_adc_noise_red
    out mcucr,r30
    sleep
    cbr r30,__se_bit
    out mcucr,r30
    #endasm
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    r=ADCW;



    if(r>=0&&r<=128){
    m=3;

    h=(float)(128-r)/128*7;
    o=1;
    o<<=h;
    }
    else if(r>=129&&r<=256){
    m=2;
    h=(float)(256-r)/128*7;
    o=1;
    o<<=h;

    }
    else if(r>=257&&r<=384){
    m=1;
    h=(float)(384-r)/128*7;
    o=1;
    o<<=h;
    }
    else if(r>=385&&r<=511){
    m=0;
    h=(float)(511-r)/128*7;
    o=1;
    o<<=h;
    o=o+1;
    }
    else if(r>=512&&r<=640){
    m=7;
    h=(float)(640-r)/128*7;
    o=1;
    o<<=h;
    o=o+128;
    }
    else if(r>=641&&r<=768){
    m=6;
    h=(float)(768-r)/128*7;
    o=1;
    o<<=h;
    }
    else if(r>=769&&r<=896){
    m=5;
    h=(float)(896-r)/128*7;
    o=1;
    o<<=h;
    }
    else if(r>=897&&r<=1024){
    m=4;
    h=(float)(1024-r)/128*7;
    o=1;
    o<<=h;
    }
    LCD_RS=0;
    LCD_RW=0;
    LCD_PORT=0xB8 | m;
    latchlcd();
    LCD_RS=0;
    LCD_RW=0;

    LCD_PORT=0x40 | l;

    latchlcd();
    LCD_RS=1;
    LCD_RW=0;
    LCD_PORT=o;
    latchlcd();
    l++;
    //delay_us(20);
    }
    void main(void)
    {

    DDRD=255;
    DDRB=255;
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0x85;
    glcd_init();


    while(1){
    x=0; y=0;
    for(i=0;i<1024;i++){
    if(x>127){
    x=0;
    y++;
    }
    write_lcd(x,y,picture[i]);
    x++;
    }
    for(k=0;k<=104;k++){
    if(k<=63){
    LCD_CS1=1;
    LCD_CS2=0;
    }
    else{
    LCD_CS1=0;
    LCD_CS2=1;
    if(l==40)
    l=1;
    }

    if(l==64)
    l=0;
    read_adc();
    }
    delay_ms(150);
    l=0;


    };
    }
    //************************************************** ***************************************
    void write_lcd(char columns,char page,char data){
    if(columns>=64){
    LCD_CS1=0;
    LCD_CS2=1;
    }else{
    LCD_CS1=1;
    LCD_CS2=0;
    }
    LCD_RW=0;
    LCD_RS=0;
    LCD_PORT=0xB8 | page;
    latchlcd();
    LCD_RW=0;
    LCD_RS=0;
    LCD_PORT=0x40 | columns;
    latchlcd();
    LCD_RW=0;
    LCD_RS=1;
    LCD_PORT=data;
    latchlcd();
    }
    //************************************************** ***************************************
    void glcd_init(){
    unsigned char i;
    LCD_RST=0;

    LCD_RST=1;

    LCD_RS=0;
    LCD_CS1=0;
    LCD_CS2=1;
    for(i=0;i<2;i++){
    LCD_PORT=0x3E;
    latchlcd();
    LCD_PORT=0x40;
    latchlcd();
    LCD_PORT=0xB8;
    latchlcd();
    LCD_PORT=0xC0;
    latchlcd();
    LCD_PORT=0x3F;
    latchlcd();
    LCD_CS1=~LCD_CS1;
    LCD_CS2=~LCD_CS2;
    }
    }

    //************************************************** ***************************************
    void latchlcd(){
    LCD_E=1;

    LCD_E=0;

    }
    http://www.mediafire.com/download.php?iwobflmlezg


    الان سه روز از نوشتن این مطلب میگذره که من بطور کامل اسیلسکوپو نوشتم :wow: دیدید گفتم کاری نداره :NO:
    عکساشو پایین میذارم.


    #2
    پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

    چه خبر.

    من که با avrbascom راه انداختم ولی اینو نمی دونم. اگه bascom سوال داری بگو
    عیب کار اینجاست که من آنچه هستم را با آنچه باید باشم اشتباه می کنم،خیال می کنم آنچه باید باشم هستم،در حالیکه آنچه هستم نباید باشم.

    دیدگاه


      #3
      پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

      سلام,
      نظرتون راجب درست کردن اسکوپ با کامپیوتر چیه؟ میکرو با وقفه ADC رو میخونه و هروقت مقدار تغییر کرد با پورت سریال یا USB اونو به کامپیوتر میفرسته. کامپیوتر هم عدد رو پردازش میکنه و به صورت یک چارت شبیه خروجی اسکوپ (شکل موج) درش میاره و نشونش میده.
      اگر موافقید میشه روش کار کرد.

      دیدگاه


        #4
        پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

        [quote author=کیهان اسدی link=topic=37899.msg185408#msg185408 date=1270494193]
        علیک سلام ، فکر خوبیه ، lets think about it

        دیدگاه


          #5
          پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

          سلام,
          تشکر بابت موافقتتون....
          برنامه که فکر نکنم خیلی سخت باشه (میکرو). میمونه برنامه کامپیوتر که من خوشبختانه #C بلدم :nice:.
          به امید خدا کم کم شروع کنیم. شما از چه نظری میتونید پشتیبانی کنید؟

          دیدگاه


            #6
            پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

            نوشته اصلی توسط کیهان اسدی
            سلام,
            تشکر بابت موافقتتون....
            برنامه که فکر نکنم خیلی سخت باشه (میکرو). میمونه برنامه کامپیوتر که من خوشبختانه #C بلدم :nice:.
            به امید خدا کم کم شروع کنیم. شما از چه نظری میتونید پشتیبانی کنید؟
            من متاسفانه برنامه ریزی کامپیوتریش رو بلد نیستم ، همونطور که گفتم تازه کارم ،برنامه ریزی میکرو شم که به قول خودت سادست.تو هر زمینه ای که خواستی بگو که اگه بلد بودم با هم فکر کنیم.راستی جواب سوال چهارمو بلد نیستی؟

            دیدگاه


              #7
              پاسخ : توضیح درباره GLCD و AVR OSILLOSCOPE

              سلام,
              باشه پس من کم کم دست به کار میشم. جواب اون سوال هم نمیدونم :cry: چون C میکرو کار نکرد. اصلا با LCD گرافیکی کار نکردم راستش... :redface:.
              شرمنده...

              دیدگاه

              لطفا صبر کنید...
              X