اطلاعیه

Collapse
No announcement yet.

ارسال داده ی adcw به کامپیوتر

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

    ارسال داده ی adcw به کامپیوتر

    سلام
    میخواهم داده ی موجود در adcw را در atmega32 از طریق ارتباط سریال به کامپیوتر ارسال کنم نمیدونم چه برنامه و کدی در codevisionAVR باید بنویسم کسی هست این کدو بلد باشه یا داشته باشه؟
    آیناز اصغری

    #2
    پاسخ : ارسال داده ی adcw به کامپیوتر

    با سلام
    می تونید با usart کار کنید برای مثال در برنامه زیر هر یک ثانیه مقدار Adcw که در واقع مقدار دیجیتال ولتاژ روی پایه adc0 هست رو به پورت سریال ارسال میکنه :
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.0 Professional
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 06/22/2011
    Author : 
    Company : 
    Comments: 
    
    
    Chip type        : ATmega32A
    Program type      : Application
    AVR Core Clock frequency: 11.059200 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 512
    *****************************************************/
    
    #include <mega32a.h>
    
    #include <delay.h>
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    #define ADC_VREF_TYPE 0x40
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }
    
    // Declare your global variables here
    int a;
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x06;
    UBRRH=0x00;
    UBRRL=0x47;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC Clock frequency: 172.800 kHz
    // ADC Voltage Reference: AVCC pin
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    while (1)
       {
       // Place your code here
    
    a=read_adc(0);
    printf("adcw=%d \n",a);
    delay_ms(1000);
       }
    }

    دیدگاه


      #3
      پاسخ : ارسال داده ی adcw به کامپیوتر

      سلام آقا مجتبی
      از کدهای ارسالی خیلی ممنونم :agree:
      وقتی تو پروتوئوس استفاده میکنم داده ها ارسال میشن ولی توی virtual terminal بجای عدد دسیمال چند جفت صفر نشون میده(00 00 00 00 00 00 00 00 00)
      لطفا دوباره راهنمایی کنید
      در صورت امکان آدرس الکترونیکی خود را قرار دهید تا فایل پروتئوس را به شما ارسال کنم
      کد های من که ار کدهای شما اسنفاده کردم برای تفاضلی است



      This program was produced by the
      CodeWizardAVR V2.05.0 Professional
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com

      Project :
      Version :
      Date : 2011/01/12
      Author :
      Company :
      Comments:


      Chip type : ATmega32A
      Program type : Application
      AVR Core Clock frequency: 11.059200 MHz
      Memory model : Small
      External RAM size : 0
      Data Stack size : 512
      ************************************************** ***/

      #include <mega32a.h>

      #include <delay.h>

      // Alphanumeric LCD Module functions
      #include <alcd.h>

      #asm
      .equ __lcd_port = 0x15
      #endasm
      // Standard Input/Output functions
      char code[20];
      unsigned int data;
      unsigned int dat;

      #include <stdio.h>

      #define ADC_VREF_TYPE 0x4B

      // Read the AD conversion result
      unsigned int read_adc(unsigned char adc_input)
      {
      ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
      // Delay needed for the stabilization of the ADC input voltage
      delay_us(10);
      // Start the AD conversion
      ADCSRA|=0x40;
      // Wait for the AD conversion to complete
      while ((ADCSRA & 0x10)==0);
      ADCSRA|=0x10;
      return ADCW;
      }

      // Declare your global variables here
      int a;

      void main(void)
      {
      // Declare your local variables here

      // Input/Output Ports initialization
      // Port A initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTA=0x00;
      DDRA=0x00;

      // Port B initialization
      // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
      // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
      PORTB=0x00;
      DDRB=0xFF;

      // Port C initialization
      // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
      // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
      PORTC=0x00;
      DDRC=0xFF;

      // Port D initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=T State0=T
      PORTD=0x00;
      DDRD=0x0C;

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=0xFF
      // OC0 output: Disconnected
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Discon.
      // OC1B output: Discon.
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;

      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=0x00;
      MCUCSR=0x00;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;

      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: Off
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      UCSRA=0x00;
      UCSRB=0x08;
      UCSRC=0x06;
      UBRRH=0x00;
      UBRRL=0x47;

      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      SFIOR=0x00;

      // ADC initialization
      // ADC Clock frequency: 172.800 kHz
      // ADC Voltage Reference: AVCC pin
      ADMUX=ADC_VREF_TYPE & 0xff;
      ADCSRA=0x86;

      // SPI initialization
      // SPI disabled
      SPCR=0x00;

      // TWI initialization
      // TWI disabled
      TWCR=0x00;

      // Alphanumeric LCD initialization
      // Connections specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTC Bit 0
      // RD - PORTC Bit 1
      // EN - PORTC Bit 2
      // D4 - PORTC Bit 4
      // D5 - PORTC Bit 5
      // D6 - PORTC Bit 6
      // D7 - PORTC Bit 7
      // Characters/line: 16
      lcd_init(16);

      while (1)
      {
      data=ADCW ;
      lcd_clear();
      sprintf(code,"ADC=%d",data);
      lcd_puts(code);
      // Place your code here
      a=read_adc(0);
      printf("adcw=%d \n",a);
      delay_ms(200);

      }
      }

      دیدگاه


        #4
        پاسخ : ارسال داده ی adcw به کامپیوتر

        نوشته اصلی توسط mehdi8310021
        وقتی تو پروتوئوس استفاده میکنم داده ها ارسال میشن ولی توی virtual terminal بجای عدد دسیمال چند جفت صفر نشون میده(00 00 00 00 00 00 00 00 00)
        فرکانس میکرو رو باید روی 11.0592 مگا هرتز تنظیم کنید اینکار رو کردید ، در ضمن باید به adc0 یک ولتاژ بدید و همچنین avcc رو به vcc متصل کرده باشید ، این کار ها رو کردید ؟
        به هر حال من فایل پرتئوس و برنامه رو در زیر براتون قرار دادم دانلودش کنید اگر مشکلی بود بگید تا بیشتر توضیح بدم .
        http://www.persiangig.com/pages/down....com/usart.rar

        دیدگاه


          #5
          پاسخ : ارسال داده ی adcw به کامپیوتر

          سلام آقا مجتبی
          ار فایل پروتئوس ارسالی خیلی ممنون
          وقتی داده های خروجی را را مستقیما به virtual terminal وصل میکنم کار میکنه ولی وقتی از طریق max232 به virtual terminal میفرستم چیزای نا مفهوم نشون میده
          لطفا دوباره راهنمایی بفرمایید

          دیدگاه


            #6
            پاسخ : ارسال داده ی adcw به کامپیوتر

            سلام
            دوست عزیز این virtual terminal خوب برای اینه که دیگه از max232 استفاده نکنیم دیگه ! چرا که منطق قابل شناسایی virtual terminal همون TTL هست !
            برای این که بهتر متوجه بشید این فایل پرتئوس رو ببینید من از max232 استفاده کردم اما همونطور که میبینید ، TTL رو اول به RS232 تبدیل کرده و دوباره RS232 رو به TTL تبدیل کرده و به virtual terminal متصل کرده ام.
            ADCW-2.rar

            دیدگاه


              #7
              پاسخ : ارسال داده ی adcw به کامپیوتر

              سلام دوست عزیز
              با از راهنمایی کامل و مفیدتان ممنونم :rolleyes:
              حالا میخام داده ها را به matlab بفرستم و اونارو پردازش کنم
              فکر کنم باید کد هایی مثل زیر داشته باشه
              s=serial('com1'
              fopen(s);
              ولی بقیشو نمیدونم
              لطفا راهنمایی بفرمایید
              :read:

              دیدگاه


                #8
                پاسخ : ارسال داده ی adcw به کامپیوتر

                سلام دوست عزیز
                داده های حاصل از تبدیل سیگنال آنالوگ به دیجیتال را میخوام تو lcd نمایش بدم
                توی proteus جواب میده ولی در عمل چیزی توی lcd نمایش داده نمیشه
                پایه سوم رو هم با پتانسیومتر 10k به زمین وصل کردم
                وقتی فایل hex را درست میکردم فیوز بیت های cksel3 ...cksel0 همه صفر بودن (نا کریستال حارجی استفاده کنم) ولی موقع پروقرم کردن atmega32 با یه نرم افزار دیگه cksel0 برابر 1 بود
                بار آخر که پروقرم کردم cksel0 را برابر 0 کردم ولی بازم جواب نمیده
                آیا فیوزبیت cksel0 عوض شده یا نه؟ :sad:
                لطفا زود کمکم کنید :sad: :cry: :cry2:

                دیدگاه

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