سلام دوستان اگه کسی برنامه ای یا اطلاعاتی درباره ی ارتباط avr با arm ذاره لطفا در اختیار من هم بذارید مخصوصا arm atmel
ممنون
سلام دوستان اگه کسی برنامه ای یا اطلاعاتی درباره ی ارتباط avr با arm ذاره لطفا در اختیار من هم بذارید مخصوصا arm atmel
ممنون
سلام
چجور ارتباطی ؟؟؟
مثلا ارتباط سریال که کار خاصی نداره کل زحمتش راه اندازی واحد usart هست
اگر پروتکل خاصی مد نظرتون هست بفرمائید با جزئیات کار ... تا بهتر بشه راهنمائی کرد
*** اللّهم عجّل لولیک الفرج ***
سلام.
این از اون سوالا بود هاااا! مثل اینکه بیان سوال کنند چه خبر؟
به احترام دوستانی که اینجا به بقیه کمک می کنند کمی برای مطرح کردن سوالمون وقت بذاریم (منم که فقط بلدم بقیه رو اندرز کنم! والله!).
مدل میکروتون چه در avr چه در arm چیه؟
چه نوع پروتکلی مد نظرتون هست؟
چه محدودیت هایی در پیش رو دارید؟
قبلا تجربه ای در ارتباط سریال داشتید؟
به چه زبانی و برای چه کامپایلری؟
داده ای که ارسال و یا دریافت می شه چه نوعی است؟
و ...
ما در انتظار رویت خورشیدیم ...
اللهم عجل لولیک الفرج
دوستمون ارسال اولشون هست. شاید با جزئیات زیاد آشنا نباشه که پرسشون انقدر کلیه.
با اجازه اساتید من کمی راهنمایشون کنم.
دوست گرامی شما باید در سوالتون به جزئیات بیشتری اشاره کنید. اگر هم در زمینه میکرو زیاد آگاهی نداری بگید که هدفتون از این کار چیه تا بتونیم راه کار های ممکن رو بهتون پیشنهاد بدیم.
مواردی هم که دوستان گفتن مد نظر قرار بدید.
بهترین راه انتقال داده استفاده از پروتکل هایی هست که هر دو میکرو داشته باشند مانند usart یا spi .
شما بعد از پیکربندی و تنظیمات لازم میکرو ها میتونید در برنامه تون داده رو ارسال کنید و در سمت گیرنده دریافت و داده رو پردازش کنید.
الان با کدوم قسمت از کار آشنایی ندارید بگید تا کمک کنیم.
پروتکل spi
atmega32 برا avr و at91sam7x256 برا arm
نرم افزار keil برا arm و code vision برا avr
ولی اگه کسی اطلاعاتی درباره اتصالات avr و arm داره حتما بگه فرقی نداره با کدوم میکروها کار کرده باشین
حتی اگه lpc یا stm باشه
داده ها هم عدد هستند و زبان برنامه نویسی هم c هست
مشکل هم اینجاست که
ممنون
ویرایش توسط Niloufar.Male : 21-10-2013 در ساعت 23:30 دلیل: میکرو
شما به لینک زیر برید و کتاب آموزش سریع میکروکنترلر AVR رو دانلود کنید و بخش SPI رو از اون کتاب مطالعه کنید.
AVR dot IR - صفحه اصلي
راهندازی این پروتکل در ARM هم مشابه AVR است.
با این کتاب شروع کنید اگر هم مشکلی داشتید بپرسید.
دوستان من قبلا دو avr رو به هم وصل کردم و هیچ مشکلی هم نداشتم
اما میگم شاید برای اتصال دو میکرو مختلف نیاز به تنظیمات خاصی باشه
سلام
البته اساتید میتونن بیشتر بهتون کمک کنن
شما وقتی درباره پروتکل حرف میزنید یعنی یه استانداردی که در همه جا یکسان است
مثلا همین spi رو که گفتین در تمام میکرو ها و دستگاههایی که استفاده میشه یکسانه و شاید تنها چیزی که باید درباره آن ها دقت بشه سرعت ارتباط شونه
پس فقط شما نیاز دارید راه اندازی spi رو در هر دو نوع میکرو بلد باشید
فقط کمی دقت میخواد
خوشم میاد قشنگ بحث رو باز میکنید
ممنون
سلام
من دو تا برنامه نوشتم براي ارتباط سريال ARM , AVR نوشتم
هر دو :
بيت توازن ندارند. يک Stop Bit . ارسال اطلاعات هشت بيت هشت بيت . نرخ انتقال هر دو هم 9600 و مد اسنکرون
ولي LSB , Msb توي ارم برنامه ر يزي شد ولي توي AVR تنظيماتش رو پيدا نکردم ! توي ارم اول LSB رو مي فرستم
دو تا ARM و دو تا AVR راه افتادند ولي يک ارم و يک اي وي ار نه !
به غير از اين ها چي چيز هايي بايد هماهنگ بشه
با اون کد هايي هم که داده بوديد نتوستم راه اندازي کنم !
اينم کدهاي که نوشتيم
مشکلش کجاست ؟
اين کد AVR بودکد:#include <mega32a.h> #include <lcd.h> #include <delay.h> #include <stdio.h> #asm .equ __lcd_port= 0x1B //PORTA #endasm #define Lenght_Array 10 unsigned char LCD_Show [ Lenght_Array ] ; void LCD_Initialization ( void ) { lcd_init (16) ; lcd_clear () ; lcd_gotoxy (0 , 0) ; } void Sender_Initialization ( unsigned int baud ) { UBRRH = 0 ; UBRRL = baud ; //UCSRB |= (1 << RXEN ) | (1 << TXEN ); // Turn on the transmission and reception circuitry UCSRB |= (1 << TXEN ); UCSRC |= (1 << URSEL ) | (1 << UCSZ0 ) | (1 << UCSZ1 ); // Use 8- bit character sizes - URSEL bit set to select the UCRSC register } void USART_TOSend ( int ByteToSend ) { while (( UCSRA & (1 << UDRE )) == 0) {}; // Do nothing until UDR is ready for more data to be written to it UDR = ByteToSend ; // Send out the byte value in the variable " ByteToSend " } void main () { DDRC = 0X01 ; LCD_Initialization () ; Sender_Initialization ( 0x33 ) ; PORTC = 0X01 ; delay_ms (50) ; PORTC = 0X00 ; delay_ms (50) ; while (1) { USART_TOSend ( 5 ) ; PORTC = 0X01 ; delay_ms (50) ; PORTC = 0X00 ; delay_ms (50) ; sprintf ( LCD_Show , "%d" , UDR) ; //sprintf ( char array , "String Text ..." , variable ) lcd_puts ( LCD_Show ) ;
اينم کد ARM
از برد ارم اتمل کویر استفاده میکنمکد:#include "TFTLCD.h" #include "nature.h" #define Lenght_Array 10 char PORTRAIT = 0; char data; char A ; char *q="receive data"; int a; int i = 0; int main (void) { tftlcd_init(); usart0_init(2,9600); while (1) { tftlcd_puts(q,BLUE,GREEN,1); delay_ms(20); A = getkey(); tftlcd_putchar(A,BLUE,GREEN,1); delay_ms(100); }
اگه ميشه يه نگاهي بهش بندازيد
ممنون
خوب الان مشکل کجاست ؟
برای این که از کارکرد برنامه هاتون مطمئن بشید میتونید میکرو ها رو به صورت جداگونه به کامپیوتر وصل کنید ببینید که مشکلی نداشته باشن!
نه هیچ مشکلی ندارن
ولی arm و avr نمیتونن با هم ارتباط برقرار کنن
توی برنامه ای که گذاشتید از پروتکل usart استفاده شده !
اگه برنامه توی شبیه سازی جواب میده ، احتمالا پایه های مربوطه رو جابجا متصل کردید .کد:include "TFTLCD.h" #include "nature.h" #define Lenght_Array 10 char PORTRAIT = 0; char data; char A ; char *q="receive data"; int a; int i = 0; int main (void) { tftlcd_init(); usart0_init(2,9600); while (1) { tftlcd_puts(q,BLUE,GREEN,1); delay_ms(20); A = getkey(); tftlcd_putchar(A,BLUE,GREEN,1); delay_ms(100); }
شما باید پایه ی مروبطه رو مطابق زیر متصل کنید :
rxd میکروکنترلر شماره ی یک به پایه ی txd میکروکنترلر شماره ی 2
txd میکروکنترلر شماره ی یک به پایه ی rxd میکروکنترلر شماره ی 2
گراند هر دو میکروکنترلر هم باید یکی باشه .
اگه براتون امکان وصل کردن برد ها به کامپیوتر وجود نداره ، پایه های rxd و txd میکروکنترلر ها رو به هم وصل کنید ، با این کار داده ی سریال ارسالی به rxd از طریق txd به میکروکنترلر برمیگرده .
ممنون
امتحان میکنم این رو که گفتید
آره از usart استفاده کردیم
بازم ممنون
نه جواب نمیده
میشه یه نگاهی کنید به تنظیماتش که همه چی هماهنگ هست یا نه؟
واقعا ممنون
سلام
چک کردن برنامه به دلیل عدم دسترسی به سخت افزار برای من امکان نداره ، اما در کل توی ارتباط سریال موارد زیر باید درست باشه :
1- اتصال پایه ها
2- برابر بودن بیت های توازن و تعداد بیت های ارسالی ( 7 بیتی یا 8 بیتی بودن داده های ارسالی )
3- یکی بودن نرخ انتقال داده
4-یکی بودن متغیر های ارسال و دریافت داده .
توی برنامه ی AVR چک کنید ببینید با دستور USART_TOSend ( 5 ) ; کاراکتر اینترنت هم ارسال میشه یا نه .
توی ارتباط شما هیچ داده ای از میکروکنترلر دیگه دریافت نیمکنید ؟
اول ممنون از جوابتون
الان داره یه اتفاقاتی میفته
ینی کاراکتر ها توسط میکرو ها ارسال میشن و روی صفحه های نمایش هم یه چیزایی نمایش داده میشه
ولی اون کاراکتر هایی که میخوایم و توسط میکرو ها ارسال میشه روی صفحه نمایش به درستی نمایش داده نمیشه.اون چیزی که نمایش داده بیشتر یه حروف چینی هست.tft کاراکتر عجیبی نشون میده
lcd کاراکتری توی avr هم چیزای عجیبی نشون میده
مشکل توی داده هامونه
مییشه راهنمایی کنید.
ممنون
سپاس از همه ی کمک هاتون
ارتباط سریال ARM و AVR درست شد !
کد:#include <AT91SAM7X256.H> #include "delay.h" #include "usart.h" #include "TFTLCD.h" #include "nature.h" #define Lenght_Array 10 char PORTRAIT = 0; char data; char A ; char *q="receive data"; int a; int i = 0; int main (void) { tftlcd_init(); usart0_init(2,9600); while (1) { tftlcd_puts(q,BLUE,GREEN,1); delay_ms(20); A = getkey(); tftlcd_putchar(A,BLUE,GREEN,1); delay_ms(100); }کد:#include <mega32a.h> #include <lcd.h> #include <delay.h> #include <stdio.h> #asm .equ __lcd_port= 0x1B //PORTA #endasm #define Lenght_Array 10 #define MainClock 8000000 #define BAUD 19200 #define UBRR (( MainClock ) / ( BAUD * 16 ) - 1 ) //unsigned char ReceivedByte ; //unsigned char ReceivedByte ; unsigned char LCD_Show [ Lenght_Array ] ; //unsigned char S = 0x65; unsigned char S = 'S'; unsigned char l; int i; void LCD_Initialization ( void ) { lcd_init (16) ; lcd_clear () ; lcd_gotoxy (0 , 0) ; } void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ //UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); //UCSRC |= 0X26; UCSRC |= 0XA6; } void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ); /* Put data into buffer, sends the data */ UDR = data; } /* unsigned char USART_Receive( void ) { //Wait for data to be received while ( !(UCSRA & (1<<RXC)) ); //Get and return received data from buffer return UDR; } */ /* void Sender_Initialization ( unsigned int baud ) { UBRRH = 0 ; UBRRL = baud ; UCSRB |= 0X08; // Turn on the transmission and reception circuitry //UCSRB |= (1 << TXEN ); UCSRC |= 0X26; // Use 8- bit character sizes - URSEL bit set to select the UCRSC register //URSEL = 0 LSB //URSEL = 1 MSB } void USART_TOSend ( unsigned char ByteToSend ) { while (( UCSRA & (1 << UDRE )) == 0) {}; // Do nothing until UDR is ready for more data to be written to it UDR = ByteToSend ; // Send out the byte value in the variable " ByteToSend " } void USART_TORecieve ( void ) { while (( UCSRA & (1 << RXC )) == 0) {}; // Do nothing until data have been received and is ready to be read from UDR ReceivedByte = UDR ; // Fetch the received byte value into the variable " ReceivedByte " } */ void main () { DDRC = 0X01 ; LCD_Initialization () ; //Sender_Initialization ( 0x19 ) ; USART_Init ( UBRR ); PORTC = 0X01 ; delay_ms (50) ; PORTC = 0X00 ; delay_ms (50) ; lcd_init(16); lcd_gotoxy(0,0); lcd_puts("Robotic"); delay_ms(1000); lcd_clear(); while (1) { //USART_TORecieve (); //USART_TOSend ( S ) ; //ReceivedByte = USART_Receive (); USART_Transmit (S); PORTC = 0X01 ; delay_ms (50) ; PORTC = 0X00 ; delay_ms (50) ; l = 0x65; sprintf ( LCD_Show , "data=%d" , l ) ; //sprintf ( char array , "String Text ..." , variable ) for(i=0;i<16;i++) { lcd_gotoxy(i,0); lcd_putchar ( LCD_Show[i] ) ; } } }