اطلاعیه

Collapse
No announcement yet.

آموزش winavr و avrlib

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

    پاسخ : آموزش winavr و avrlib

    ای بابا !
    هیشکی نیست به داد ما برسه :(
    یا بگید مشکلمون چیه ، یا یه نمونه برنامه بدید !
    چرا هیشکی کمک نمی کنه :(

    دیدگاه


      پاسخ : آموزش winavr و avrlib

      #include <avr/io.h>
      #include <avr/pgmspace.h>
      #include "rprintf.c"
      #include <stdio.h>
      #include <util/delay.h>
      #include "uart.c"

      int main(void)
      {
      float y1;
      y1=1.1;
      sprintf(str,"y1=%f",y1);
      uart_puts(str);
      یادت نره توی کانفیگ اپشن توی قسمت لایبری libma , libprintf_flt رو اد کنی و توی کاستوم اپشن هم توی لینکر اپشن
      -WL
      -u
      vfprintf
      تایپ کن یکی یکی و اد کن و بعد تموم

      }

      دیدگاه


        پاسخ : آموزش winavr و avrlib

        آقا هادی با منی دیگه :-"
        اون 4 خط آخر که گفتی راجع به libma و ... ! نگرفتم چی گفتی !
        اون کتابخونه هیا اضافی برای AVRLIB هستند ؟
        ممنون از شما که جواب دادید.

        دیدگاه


          پاسخ : آموزش winavr و avrlib

          ATM8 عزیز. شما مثل اینکه یادت رفته داری با AVR برنامه مینویسی یا نمیخوای حواست رو جمع کنی. عبارتی مثل این:


          char *s="hello";


          در avr با بقیه سیستمها یه کوچولو فرق فوکوله. مقدار ثابت "hello" در حافظه فلش ذخیره میشه و s در حافظه رم داخلی میکرو قرار میگیره. و اصولا نقشه حافظه ایندو با هم فرق میکنه. اگر در زمان اجرا s رو نگاه کنی میبینی که آدرسی از فلش رو که متن hello در اون قرار داره داخل s وجود داره. اما چون s قراره به اطلاعات در رم دسترسی داشته باشه و آدرسی که در اون قرار داره در فلش هست اصلا داره یه چیز عوضی رو آدرس میده.
          اگه میخوای به متن hello دسترسی پیدا کنی یا از تابعی که به اطلاعات فلش دسترسی پیدا میکنه استفاده کن. یا یک کد مزخرف اینجوری استفاده کن:


          char s[]="hello";


          این کد فقط ایرادش اینه که یک مقدار کوچولو از رم و فلش میکرو رو حروم میکنه.

          دیدگاه


            پاسخ : آموزش winavr و avrlib

            یک کد ساده تو نت پیدا کردم

            کد:
            #include <avr/io.h>
            #include <avr/interrupt.h>
            
            #define USART_BAUDRATE 9600
            #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
            
            int main (void)
            {
              UCSRB |= (1 << RXEN) | (1 << TXEN);  // Turn on the transmission and reception circuitry
              UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
            
              UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
              UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
            
              UCSRB |= (1 << RCXIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
              sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed
            
              for (;;) // Loop forever
              {
                 // Do nothing - echoing is handled by the ISR instead of in the main loop
              }  
            }
            
            ISR(USART_RXC_vect)
            {
              char ReceivedByte;
              ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
              UDR = ReceivedByte; // Echo back the received byte back to the computer
            }

            کار هم می کنه ( البته فقط کاراکتر میفرسته ، هرچی کیبورد فشار میدم این یه چیز دیگه نشون میده ! )
            فقط 2 تا مشکل دارم !
            چجور با udr هم میگیره و هم میفرسته ؟
            یعنی الان من بخوام خودم یک کارکتر بفرستم چیکار باید بکنم ؟ دستکاریش کردم تنها تغییری که کرد این بود که کار نکرد !
            مورد بعدی هم سرعتشه ! خیلی کند اجرا میشه برای من ! یعنی دستم رو روی دکمه باید نگه دارم تا کار بکنه ! چرا ؟

            دیدگاه


              پاسخ : آموزش winavr و avrlib

              UDR رجیستری هست که وقتی خونده بشه کاراکتری رو که اخیرا دریافت شده بر میگردونه و وقتی توش نوشته بشه بایتی رو که توش نوشتین براتون ارسال میکنه. و در حقیقت دو تا رجیستر هست یکی فقط خواندنی و یکی فقط نوشتنی در یک آدرس مشترک.

              ضمنا اگه توی اون برنامه از هایپر ترمینال استفاده میکنین ممکنه در حالت خطی کار کنه. در این حالت اطلاعات یا به ازای پر شدن بافر یک خط ارسال میشن یا به ازای فشار دادن کلید enter.

              دیدگاه


                پاسخ : آموزش winavr و avrlib

                ممنون
                یک سوال ! من چجور الان یک کاراکتر ارسال کنم ؟
                یا یک کاراکتر رو چجور بگیرم ؟

                دیدگاه


                  پاسخ : آموزش winavr و avrlib

                  ولله من اینجور مواقع بیشتر میشینم خودم با سی شارپ یه کد نمونه مینویسم.
                  حالا شما میتونی سی شارپ یا بیسیک یا هر زبون دیگه ای که راحتتری بنویسی.
                  یا اصلا از realterm استفاده کنی. اونم نسبتا باحاله اما خوب یه کمی قیافه اش .... یه جوریه. free هست روی گوگل پیدا میشه. و کم حجم و با امکانات خوب.

                  دیدگاه


                    پاسخ : آموزش winavr و avrlib

                    آقا رضا من که نمی خوام با c# اینا برنامه بنویسم !
                    برنامه ای که گذاشتم واسه میکرو atmega8 می خوام یک سری کاراکتر رو به کامپیوتر بفرستم و بگیرم از طریق پورت سریال و برنامه هیپر ترمینال
                    این udr که به درد نمی خوره ، می خوام بدونم از چه دستوری باید استفاده بکنم تا یک کاراکتر یا هر چیزی رو بفرستم به کامپیوتر و تو هیپر ترمینال نشون بده و بالعکس ، از طریق هیپر ترمینال یک کارکتر رو بفرستم به میکرو و میکرو با گرفتن اون کاراکتر یه کاری بکنه

                    دیدگاه


                      پاسخ : آموزش winavr و avrlib

                      نوشته اصلی توسط atm8
                      آقا رضا من که نمی خوام با c# اینا برنامه بنویسم !
                      برنامه ای که گذاشتم واسه میکرو atmega8 می خوام یک سری کاراکتر رو به کامپیوتر بفرستم و بگیرم از طریق پورت سریال و برنامه هیپر ترمینال
                      این udr که به درد نمی خوره ، می خوام بدونم از چه دستوری باید استفاده بکنم تا یک کاراکتر یا هر چیزی رو بفرستم به کامپیوتر و تو هیپر ترمینال نشون بده و بالعکس ، از طریق هیپر ترمینال یک کارکتر رو بفرستم به میکرو و میکرو با گرفتن اون کاراکتر یه کاری بکنه
                      روش اول:
                      http://www.nongnu.org/avr-libc/user-manual/group__stdiodemo.html

                      روش دوم :

                      کد PHP:
                      #define F_CPU    8000000UL

                      #include <stdlib.h>
                      #include <avr/io.h>
                      #include <util/delay.h>
                      #include <avr/interrupt.h>

                      #include "rprintf.h"
                      #include "uart.h"

                      //--------------------------------------------------
                      void init_HW();
                      void rx_handler(unsigned char c);

                      //--------------------------------------------------
                      void rx_handler(unsigned char c){
                       
                      // Do simething with recieved character `c'
                      }



                      int mainvoid ){
                       
                      _delay_ms(100);

                       
                      init_HW();

                       
                      // Send to serial port
                       
                      rprintf("Hello world!\n");
                       while(
                      1);
                       
                       return 
                      0;
                      }


                      void init_HW(void){
                       
                      uartInit();
                       
                      uartSetBaudRate(4800);
                       
                      rprintfInit(uartSendByte);
                       
                      uartSetRxHandler(rx_handler);
                       
                      sei();

                      چگونه هوشمندانه بپرسیم

                      دیدگاه


                        پاسخ : آموزش winavr و avrlib

                        ممنون
                        جناب آقای رستمی ، این 2 تا کتابخونه برای avrlib هستند ؟
                        #include "rprintf.h"
                        #include "uart.h"

                        دیدگاه


                          پاسخ : آموزش winavr و avrlib

                          نوشته اصلی توسط atm8
                          ممنون
                          جناب آقای رستمی ، این 2 تا کتابخونه برای avrlib هستند ؟
                          #include "rprintf.h"
                          #include "uart.h"
                          بله.
                          چگونه هوشمندانه بپرسیم

                          دیدگاه


                            پاسخ : آموزش winavr و avrlib

                            سلام بچه ها
                            آقا یه سوال
                            ما میتونیم فایل هایه h. وc. که تو avrlib هستن رو با هم میکس کنیم و یه فایل h. کنیم و اونو تو کد ویژن فراخوانی کنیم؟؟؟ :redface:
                            اگه کسی اینکار رو کرده لطفا یه راهنمایی بکنه مررسی

                            دیدگاه


                              پاسخ : آموزش winavr و avrlib

                              آقا این تابع رو ببینین


                              //************************************************** ***************************
                              //file avrlibdefs.h \brief AVRlib global defines and macros.
                              //************************************************** ***************************


                              #ifndef AVRLIBDEFS_H
                              #define AVRLIBDEFS_H

                              // Code compatibility to new AVR-libc
                              // outb(), inb(), BV(), sbi(), cbi(), sei(), cli()
                              #ifndef outb
                              #define outb(addr, data) addr = (data)
                              #endif
                              #ifndef inb
                              #define inb(addr) (addr)
                              #endif
                              #ifndef BV
                              #define BV(bit) (1<<(bit))
                              #endif
                              #ifndef cbi
                              #define cbi(reg,bit) reg &= ~(BV(bit))
                              #endif
                              #ifndef sbi
                              #define sbi(reg,bit) reg |= (BV(bit))
                              #endif
                              #ifndef cli
                              #define cli() __asm__ __volatile__ ("cli" :
                              #endif
                              #ifndef sei
                              #define sei() __asm__ __volatile__ ("sei" :
                              #endif

                              // support for individual port pin naming in the mega128
                              // see port128.h for details
                              #ifdef __AVR_ATmega128__
                              // not currently necessary due to inclusion
                              // of these defines in newest AVR-GCC
                              // do a quick test to see if include is needed
                              #ifndef PD0
                              #include "port128.h"
                              #endif
                              #endif

                              // use this for packed structures
                              // (this is seldom necessary on an 8-bit architecture like AVR,
                              // but can assist in code portability to AVR)
                              #define GNUC_PACKED __attribute__((packed))

                              // port address helpers
                              #define DDR(x) ((x)-1) // address of data direction register of port x
                              #define PIN(x) ((x)-2) // address of input register of port x

                              // MIN/MAX/ABS macros
                              #define MIN(a,b) ((a<b)?(a):(b))
                              #define MAX(a,b) ((a>b)?(a):(b))
                              #define ABS(x) ((x>0)?(x):(-x))

                              // constants
                              #define PI 3.14159265359

                              #endif
                              حالا چند تا سوال
                              کار این عبارت چیه؟؟؟
                              #ifndef AVRLIBDEFS_H
                              #define AVRLIBDEFS_H
                              اصلا کلا ifndef به چه درد میخوره دقت کنین بعدش که یه define زده یه دونه endif هم گذاشته
                              ممنون از راهنماییتون

                              دیدگاه


                                پاسخ : آموزش winavr و avrlib

                                آقای رستمی من از avrlibe همه فایلهیا لازم رو آوردم و داخلشونم چک کردم و هرچی فایل بود اضافه کردم
                                ولی نمی دونم چرا به همه چی گیر داده !
                                Warning 1 pointer targets in passing argument 2 of 'bufferInit' differ in signedness F:\eca projects\37 rs232\avrstudio\serial_rs232\uart.c 70 3 serial_rs232
                                Error 2 expected 'unsigned char *' but argument is of type 'char *' F:\eca projects\37 rs232\avrstudio\serial_rs232\buffer.h 52 8 serial_rs232
                                Warning 3 pointer targets in passing argument 2 of 'bufferInit' differ in signedness F:\eca projects\37 rs232\avrstudio\serial_rs232\uart.c 72 3 serial_rs232
                                Error 4 expected 'unsigned char *' but argument is of type 'char *' F:\eca projects\37 rs232\avrstudio\serial_rs232\buffer.h 52 8 serial_rs232
                                Error 5 undefined reference to `bufferInit' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 70 1 serial_rs232
                                Error 6 undefined reference to `bufferInit' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 72 1 serial_rs232
                                Error 7 undefined reference to `bufferGetFromFront' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 144 1 serial_rs232
                                Error 8 undefined reference to `bufferAddToEnd' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 186 1 serial_rs232
                                Error 9 undefined reference to `bufferGetFromFront' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 195 1 serial_rs232
                                Error 10 undefined reference to `bufferGetFromFront' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 239 1 serial_rs232
                                Error 11 undefined reference to `bufferAddToEnd' F:\eca projects\37 rs232\avrstudio\serial_rs232\Debug/.././uart.c 276 1 serial_rs232

                                دیدگاه

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