اطلاعیه

Collapse
No announcement yet.

این برنامه رو با چی کامپایل کنم

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

    این برنامه رو با چی کامپایل کنم

    سلام

    من با بسکام کار می کنم
    این پروژ آلتراسونیک به زبان سی هستش


    حالا این و با codviton , winavr , avr stdio
    با چی کامپایل کنم


    /* Vincent Ng (vsn2) / Jerry Wang (jw293)
    ECE 476: Wednesday 1:30 lab
    Final Project
    Handheld Ultrasonic Rangefinder
    */

    #include <Mega32.h>
    #include <stdio.h> // sprintf
    #include <stdlib.h> // ftoa

    #define LCDwidth 16 //characters
    #define t1 1 //timer vars
    #define t2 2400
    #define nopush 1
    #define maybepush 2
    #define pushed 3
    #define maybenopush 4
    #define pulsecount 6 //# of pulses to send
    #define waittime 0 //wait time which isn't neccessary
    #define dp 3 //decimal points

    #asm
    .equ __lcd_port=0x15
    #endasm
    #include <lcd.h> // LCD driver routines

    void initialize(void);
    void pulse(void);
    void debounce(void);
    void checkpin7(void);

    unsigned char time1, time2, delayedsend, wait;

    char sendpulse, calibrate, displayspeed,received, speedmode, normal, pushstate, D1,D2, D3, mode;
    char lcd_buffer[17]; // LCD display buffer
    int count, rcount, samples;
    unsigned long ticks, loopcount, ovrflwcount, stoptime, stopcount;
    double distance, currdist, prevdist,speed, distsum, speedsum, tsum, ctpm, tpm;


    interrupt [TIM0_OVF] void timer0_ovrflw(void){
    ovrflwcount++;
    }

    void main(void)
    {
    initialize();
    while (1)
    {
    if(delayedsend == 0){ //a delay before sending the next pulse
    if(time1 == 0){
    pulse();
    time1 = t1;
    }
    }
    if(time2 == 0){ //timer for 30 ms
    debounce();
    time2 = t2;
    }
    checkpin7();

    }
    }


    void checkpin7(void){
    if((ovrflwcount>500)&&(received==0)){
    lcd_gotoxy(0,0); //position to upper left on display
    lcd_putsf("d =" //another string from flash
    received = 1;
    lcd_gotoxy(4,0);
    lcd_putsf("out of range"
    }
    if((~PIND.7)&&(wait == 0)&&(received==0)){ //if the pin goes high we received
    stoptime = TCNT0; //count the # of ticks
    stopcount = ovrflwcount; //count # of times counter over flowed before receiving
    received = 1; //received the pulse
    lcd_clear();
    lcd_gotoxy(0,0); //position to upper left on display
    lcd_putsf("d =" //another string from flash
    ticks = ((stopcount*256)+stoptime); //calculate total ticks
    distance = (((double)ticks)*1.36*(tpm/ctpm))/2;
    //# of ticks * (1.36 mm pertick)*(ticks per 5 cm/calibrated)
    //all over 2 to compensate for sending and receiving
    prevdist = currdist; //store previous dist
    currdist = distance; //store current dist
    ftoa(distance,dp,lcd_buffer); //display distance
    lcd_gotoxy(4,0);
    lcd_putsf(" "
    lcd_gotoxy(4,0);
    lcd_puts(lcd_buffer);
    if(normal){
    if(rcount>0){
    delayedsend = 60000; //delay enough before sending next pulse
    sendpulse = 1;
    count = 2*pulsecount;
    wait = waittime;
    distsum = distsum + distance; //add up the samples
    if(rcount == (samples/2)){ //take the middle and last samples
    speedsum = distance; //for speed calculation
    }else if(rcount == 1){
    speedsum = speedsum - distance;
    }
    rcount--;
    }else{
    distsum = distsum/(samples); //take the average
    speedsum = (speedsum/(samples/100)); //calculate speed between first and last
    ftoa(distsum,dp,lcd_buffer); //displaystuff
    lcd_gotoxy(4,0);
    lcd_putsf(" "
    lcd_gotoxy(4,0);
    lcd_puts(lcd_buffer);
    lcd_gotoxy(0,1);
    lcd_putsf("spd = "
    lcd_gotoxy(9,1);
    ftoa(speedsum,dp,lcd_buffer);
    lcd_puts(lcd_buffer); //end displaying stuff
    distsum = 0; //reset variables
    speedsum = 0;
    normal = 0;
    }
    }else if(calibrate){
    /*takes 200 samples of how many ticks for 5cm
    *averages it and sets it as the calibrated ticks per 5 cm
    */
    if(rcount>0){
    delayedsend = 60000;
    sendpulse = 1;
    count = 2*pulsecount;
    wait = waittime;
    distsum = distsum + distance; //sum up the distances
    tsum = tsum + ticks; //sum up the ticks
    rcount--;
    }else{
    distsum = distsum/((float)samples); //average the distances
    tsum = tsum/((float)samples) ; //average the ticks
    ftoa(distsum,dp,lcd_buffer); //display all this stuff to lcd
    lcd_gotoxy(4,0);
    lcd_putsf(" "
    lcd_gotoxy(4,0);
    lcd_puts(lcd_buffer);
    lcd_gotoxy(0,1);
    lcd_putsf("avgtick = "
    lcd_gotoxy(10,1);
    ftoa(tsum,dp,lcd_buffer);
    lcd_puts(lcd_buffer); //end displaying stuff
    distsum = 0; //reset variables
    ctpm = tsum;
    tsum = 0;
    calibrate = 0;
    }
    }
    }
    }

    void debounce(void){//standard debounce state machine as given in lecture
    switch(pushstate){
    case nopush:
    if((~PIND.1) || (~PIND.2) || (~PIND.3)) // button pushed?
    pushstate = maybepush;
    else pushstate = nopush;
    break;
    case maybepush:
    if((~PIND.1) || (~PIND.2) || (~PIND.3))
    pushstate = pushed;
    else pushstate = nopush;
    break;
    case pushed:
    if((~PIND.1) || (~PIND.2) || (~PIND.3)){ // button pushed?
    pushstate = pushed;
    if(~PIND.1) D1 = 1; //pushflags for each button
    else if(~PIND.2) D2 = 1;
    else if(~PIND.3) D3 = 1;
    }else pushstate = maybenopush;
    break;
    case maybenopush:
    if((~PIND.1) || (~PIND.2) || (~PIND.3)) // button pushed?
    pushstate = pushed;
    else{
    pushstate = nopush;
    /*
    D1 is normal operation
    D2 is speed detection mode
    D3 is calibration mode
    This checks which button was pressed and sets
    the appropriate flags for each mode
    */
    if(received){
    if(!mode){
    if(D1){
    sendpulse = 1; //sends a pulse
    count = 2*pulsecount;
    wait = waittime; //wait for receive
    rcount = samples; //count for # of samples
    D1 = 0;
    normal = 1; //mode of operation
    }else if(D2){
    ctpm = 73; //reset the calibration
    mode = 1; //set mode to change samples mode
    lcd_clear(); //clear the display
    lcd_putsf("Sample #"
    lcd_gotoxy(0,1);
    lcd_putsf("b1- "
    lcd_putsf("b2+ b3 back"
    D2 = 0;
    }else if(D3){
    sendpulse = 1; //sends pulse
    count = 2*pulsecount;
    wait = waittime;
    calibrate = 1; //calibrate mode on
    D3 = 0;
    rcount = samples;
    }
    }else if(mode){ //mode two for changing sample number
    if(D1){ //decrement sample #
    if(samples>50){
    samples = samples - 50; //minimum number 50
    }
    D1 = 0;
    lcd_gotoxy(0,0); //display sample number to LCD
    lcd_putsf(" "
    lcd_gotoxy(0,0);
    sprintf (lcd_buffer, "n = %i", samples);
    lcd_puts(lcd_buffer);
    }else if(D2){ //increment sample #
    samples = samples+50;
    lcd_gotoxy(0,0);
    lcd_putsf(" "
    lcd_gotoxy(0,0);
    sprintf (lcd_buffer, "n = %i", samples);
    lcd_puts(lcd_buffer);
    D2 = 0;
    }else if(D3){
    ctpm = 73; //reset the calibration
    mode = 0; //set mode to change samples mode
    lcd_clear(); //clear the display
    lcd_gotoxy(0,0); //show regular operation options
    lcd_putsf("b1 sendpulse"
    lcd_gotoxy(0,1);
    lcd_putsf("b2 mode2 "
    lcd_putsf("b3 cal"
    D3 = 0;
    }
    }
    }//end received if
    }
    break;
    } // switch
    }
    void pulse(void){
    //sends a certain number of pulses depending on what the count is
    if(sendpulse){
    received = 0;
    if(count>0){
    TCCR1A = 0b01000011;
    count--;
    }else{
    sendpulse = 0;
    TCCR1A = 0b00000011;
    TCNT0 = 0;
    ovrflwcount = 0;
    }
    }
    }


    void initialize(void)
    {
    //initialize pushflags for buttons
    D1 = 0; //which pin is pushed
    D2 = 0;
    D3 = 0;
    normal = 0;
    prevdist = 0;
    currdist = 0;
    rcount =0;
    distsum = 0;
    speedsum = 0;
    tsum = 0;
    // initialize the LCD for 16 char wide
    lcd_init(LCDwidth); //initialize the display
    lcd_clear(); //clear the display
    lcd_putsf("b1 sendpulse"
    lcd_gotoxy(0,1);
    lcd_putsf("b2 mode2 "
    lcd_putsf("b3 cal"
    sendpulse = 0;
    //set up the ports
    DDRD=0b00100000; // PORT D.5 is output rest is inputs
    PORTD=0;
    //initialize the variables to their proper values
    stoptime = 0;
    displayspeed = 0;
    speedmode = 0;
    loopcount = 0;
    speed = 0;
    mode = 0;
    received = 1;
    samples = 200;
    calibrate = 0;
    pushstate = nopush;
    ticks = 0;
    ctpm= 73.0; //init ticks per 5 cm
    tpm = 73.0;
    //set up timer 0 and timer 1
    TCCR0=0b000000011; //prescalar to 64 and turn on clear-on-match
    TIMSK = 0x11; //timer1 compA and TIMER0 COMP interrupts on
    OCR1A = 24; //timer1 OCR to count 25 times and toggle OC1A at 40kHz
    TCCR1A = 0b00000011; //divide the clock by 8 PWM mode on
    TCCR1B = 0b00011010;
    //init the timers
    time1=t1;
    time2=t2;
    wait = 0;
    delayedsend = 0;
    #asm
    sei
    #endasm
    }

    interrupt [TIM1_COMPA] void timer1_compare(void)
    {
    if (time1>0) --time1; //40khz
    if (time2>0) --time2; //debounce machine
    if (wait>0) --wait; //wait to receive
    if (delayedsend>0) --delayedsend; //wait to send another pulse
    }


    زندگی یه فرصته

    #2
    پاسخ : این برنامه رو با چی کامپایل کنم

    WinAvr نیست بین اون دو تا هم احتمال می دم CodeVison....
    Difficult But possible
    به اميد ايراني آباد.
    http://art-net.ir

    دیدگاه


      #3
      پاسخ : این برنامه رو با چی کامپایل کنم

      با کدویژن وقتی کامپایل می کنم

      error می ده

      avrasm32 not fuond
      زندگی یه فرصته

      دیدگاه


        #4
        پاسخ : این برنامه رو با چی کامپایل کنم

        codevision می باشد!

        دیدگاه


          #5
          پاسخ : این برنامه رو با چی کامپایل کنم

          سلام

          برنامتونو تو کدویژن امتحان کردم . بدون ارور اجرا شد . اگر فکر می کنی لازمه که یک بار مراحل ساخت پروژه تو کد ویژن رو با هم مرور کنیم بگو کمکت می کنیم .

          پیروز و سربلند باشید.
          آدمی از عالم خاکی نمی آید بدست

          عالمی دیگر بباید ساخت و از نو آدمی
          پردازش تصویر با FPGA از صفر تا انتها
          http://www.eca.ir/forum2/index.php?topic=74299.0

          دیدگاه


            #6
            پاسخ : این برنامه رو با چی کامپایل کنم

            سلام
            خیلی ممنون می شم
            اگه راهنماییم کنی
            اصلا با کد ویژن کار نکردم

            فقط می خوام به hex برسم

            زندگی یه فرصته

            دیدگاه


              #7
              پاسخ : این برنامه رو با چی کامپایل کنم

              خوب ابتدا لازمه تا پروژه قبلی رو ببنیدم . برای این کار از منوی فایل روی close project کلیک کنید . سپس روی منوی فایل گزینه new کلیک کنید . یه پنجره کوچیک باز می شه . دومین دکمه رادیویی که نوشته Projec رو فعال سپس ok کنید . سوالی ازتون پرسیده می شود که اگر لازم دانستید در موردش بعدا توضیح می دهم . روی yes کلیک کنید . پنجره کد ویزارد باز می شه . درقسمت چیپ فعلا لازمه مدل میکرو کنترلرتونو که mega32 هست با فرکانس مورد نظرتون انتخاب کنید . در همون پنجره روی فایل کلیک کنید و گزینه Generate save and exit رو انتخاب کنید . سه بار پشت سر هم پنجره ای برای پرسیدن نام پروژه و فایل باز می شود . برای این که فایل های مربوط به پروژتونو بعدها بتونید پیدا کنید هر سه را یک نام انتخاب کنید . کدهایی به صورت پیش فرض تولید می شود و در پنجره اصلی نشان داده می شود . همه را انتخاب و سپس پاک کنید و کد های خودتونو جاش پیست کنید . با زدن کلید های shift +F9 می توانید فایل با پسوند hex رو در محل ذخیره فایل ها به همان نام هایی که انتخاب کردید پیدا کنید .

              پیروز و سربلند باشید .
              آدمی از عالم خاکی نمی آید بدست

              عالمی دیگر بباید ساخت و از نو آدمی
              پردازش تصویر با FPGA از صفر تا انتها
              http://www.eca.ir/forum2/index.php?topic=74299.0

              دیدگاه


                #8
                پاسخ : این برنامه رو با چی کامپایل کنم

                سلام
                واقعا ممنونم از راهنمایی تون

                مشکل ام اینجاست بعد این که shit+f9 می زنم ای اخطار می بینم

                زندگی یه فرصته

                دیدگاه


                  #9
                  پاسخ : این برنامه رو با چی کامپایل کنم

                  فکر می کنم یک بار دیگه باید کد ویژن رو نصب کنید . چون اخطاری مبنی بر صدمه دیدن فایل های مربوط به کد ویژن می ده .
                  آدمی از عالم خاکی نمی آید بدست

                  عالمی دیگر بباید ساخت و از نو آدمی
                  پردازش تصویر با FPGA از صفر تا انتها
                  http://www.eca.ir/forum2/index.php?topic=74299.0

                  دیدگاه


                    #10
                    پاسخ : این برنامه رو با چی کامپایل کنم

                    من avr stdio 4 رو هم نصب کردم

                    و فایل avrasm32 رو هم تو lib - codvision کپی کردم

                    اما هنوزم همون اخطارو می ده
                    زندگی یه فرصته

                    دیدگاه


                      #11
                      پاسخ : این برنامه رو با چی کامپایل کنم

                      چند باری دوباره نصب کردم
                      اما همینه

                      کد ویژنم ورژن 1.24.1 هستش

                      فکر کنم ایراد از این فایلی که نصب می کنم
                      ورژن کد ویژن شما چنده؟
                      زندگی یه فرصته

                      دیدگاه


                        #12
                        پاسخ : این برنامه رو با چی کامپایل کنم

                        سلام بهترین نسخه کدویژن نسخه 1.25.9 است
                        دوستان لینکشو تو بخش دانلود نرم افزارهای الکترونیکی گذاشتند
                        حجمش به 2 مگ نمی رسه. حتما دانلودش کن و قبلی را کاملا پاک کن و اینو نصب کن
                        امیدوارم مشکلت حل بشه.

                        دیدگاه


                          #13
                          پاسخ : این برنامه رو با چی کامپایل کنم

                          سلام
                          ممنونم

                          ver 1.24.2 رو نصب کردم مشکل حل شد :wow: :wow: :wow: :wow: :wow:
                          زندگی یه فرصته

                          دیدگاه

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