نوشته اصلی توسط aashkanpasha
نمایش پست ها
اطلاعیه
Collapse
No announcement yet.
پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
Collapse
X
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
شما قبلا گفتید از اتمل استدیو استفاده می کنید یه کاری بکن بیا کدویژون نصب کن کدویژون ویزارد داره که خوش با توجه تنظیمات کاربر میاد رجیستر ها رو مقدار دهی می کنه شما این مقادیر رو توی اتمل استفاده کنجدیدترین ویرایش توسط MM320; 2019/08/11, 21:57.
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
شما وقتی از spi در مد اسلیو استفاده می کنید میکرو منتظر دریافت بایت از مستر میشه بعد دریافت اولین کلاک از مستر دیتا ها بیت به بیت در رجستر spi اسیلو (در هر کلاک مستر) قرار می گیره برنامه شما تازه شروع به اسکن سون سگنمت می کنه و دوباره منتظر دریافت spi میشههمین طور که در تاپیک سون سگمنت و کیپد گفتم برنامه نباید وقفه یا ایستی نداشته باشه در صورت اعداد روی نمایشکر بصورت تاخیری که چشم انسان اونو ببنه میشه یا روی یک رقم می ایسته .راه حل:یا از آیسی MAX7219 استفاده کنن که خودش سون سگمنت راه اندازی می کنه یا اینه از تایمر ها استفاده کن به این صورت که هر 1ms یک رقم نشان بده و وقتی منتظر دریافت spi هست نمایشگر متوقف نمیشه.جدیدترین ویرایش توسط MM320; 2019/08/11, 21:33.
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
متاسفانه مشکل اینه که من درمورد تایمر و بحث پرچم اصلا اطلاعاتی ندارم. نمدونم کلا چیه.
فکر کنم برا همین نمیفهمم چه کدی باید بنویسم.
نوشته اصلی توسط hossein.m98 نمایش پست هاخوب چیزی که منم گفتم منافاتی با این قضیه نداره! شما باید هربار پرچم داده spi رو چک کنید و اگر داده ای رسید اون رو توی یه متغیر قرار بدید. تایمر هم با توجه به اون متغیر داده رو روی سون سگمنت بذاره. حتی میتونید از وقفه spi استفاده کنید که نیازی به چک گردن پرچم در برنامه اصلی نباشه.
Sent from my LG-H870S using Tapatalk
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
خوب چیزی که منم گفتم منافاتی با این قضیه نداره! شما باید هربار پرچم داده spi رو چک کنید و اگر داده ای رسید اون رو توی یه متغیر قرار بدید. تایمر هم با توجه به اون متغیر داده رو روی سون سگمنت بذاره. حتی میتونید از وقفه spi استفاده کنید که نیازی به چک گردن پرچم در برنامه اصلی نباشه.نوشته اصلی توسط aashkanpasha نمایش پست هانه دوست عزیز.
مشکل این نیست. سون سگمنت وقتی عدد رو نشون میده (وقتی ارتباط SPIندارم) همه چی اوکیه- و قسنگ ثابت دیده میشه. مشکل تو سون سگمنتها نیست.
مشکل جای دیگس-
ببینین عدد از کیپد وارد میشه و بازدن کلید مربع به میکرو دوم ومنتقل میشه و تابع سگمنت اون عدد رو نشون میده- ولی چون تابع سگمنت تو حلقه نیست یه بار نشون میده تموم میشه
باید بذارم تو یه حلقه .
اون حلقه باید بگه که تا عدد جدید نیومده همین عدد رو نشون بده. یعنی طرف عدد رو زد مربع رو زد باید عدد رو سگمنت بمونه تا زمانی که عدد بعدی بیاد که معلوم نیست کی بیاد.
باید دستور تو ارتباط رو عوض کنم:
کاری کنم که همون عدد رو تو حلقه هی نمایش بده هی نمایش بده تا زمانی که عدد بعدی رو منتق کنه.
الان مشکل اینه که عدد منتق میشه و نمیدونم تو چه حلقه ای بزارم با چه شرطی. باید کاری کنم که میکرو دوم بگه به میکرو اول عدد اومد کارتو ادامه بعد بعد اون دوباره عدد فرستاد اونو بگیره.
تونستم برسونم؟
Sent from my LG-H870S using Tapatalk
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
نه دوست عزیز.
مشکل این نیست. سون سگمنت وقتی عدد رو نشون میده (وقتی ارتباط SPIندارم) همه چی اوکیه- و قسنگ ثابت دیده میشه. مشکل تو سون سگمنتها نیست.
مشکل جای دیگس-
ببینین عدد از کیپد وارد میشه و بازدن کلید مربع به میکرو دوم ومنتقل میشه و تابع سگمنت اون عدد رو نشون میده- ولی چون تابع سگمنت تو حلقه نیست یه بار نشون میده تموم میشه
باید بذارم تو یه حلقه .
اون حلقه باید بگه که تا عدد جدید نیومده همین عدد رو نشون بده. یعنی طرف عدد رو زد مربع رو زد باید عدد رو سگمنت بمونه تا زمانی که عدد بعدی بیاد که معلوم نیست کی بیاد.
باید دستور تو ارتباط رو عوض کنم:
کاری کنم که همون عدد رو تو حلقه هی نمایش بده هی نمایش بده تا زمانی که عدد بعدی رو منتق کنه.
الان مشکل اینه که عدد منتق میشه و نمیدونم تو چه حلقه ای بزارم با چه شرطی. باید کاری کنم که میکرو دوم بگه به میکرو اول عدد اومد کارتو ادامه بعد بعد اون دوباره عدد فرستاد اونو بگیره.
تونستم برسونم؟
نوشته اصلی توسط hossein.m98 نمایش پست هایعنی روشن و خاموش کردن سون سگمنت ها رو با وقفه تایمر انجام بدید. کافیه تایمر رو جوری تنظیم کنید که حدودا هر 20 میلی ثانیه وارد وقفه بشه و وضعیت سون سگمنت ها رو تغییر بده. این عدد 20 میلی ثانیه رو دقیقا یاد ندارم درسته یا نه ولی حدودا باید همین مقدار باشه.
با اینکار وقتی برنامه در یک حلقه هم گرفتار شده باشه، تایمر کار اسکن سون سگمنت رو انجام میده و کاربر متوجه تغییر در نوع نمایش سون سگمنت نمیشه
Sent from my LG-H870S using Tapatalk
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
یعنی روشن و خاموش کردن سون سگمنت ها رو با وقفه تایمر انجام بدید. کافیه تایمر رو جوری تنظیم کنید که حدودا هر 20 میلی ثانیه وارد وقفه بشه و وضعیت سون سگمنت ها رو تغییر بده. این عدد 20 میلی ثانیه رو دقیقا یاد ندارم درسته یا نه ولی حدودا باید همین مقدار باشه.نوشته اصلی توسط aashkanpasha نمایش پست هایعنی چکار کنم. ؟؟؟چطوری؟
با اینکار وقتی برنامه در یک حلقه هم گرفتار شده باشه، تایمر کار اسکن سون سگمنت رو انجام میده و کاربر متوجه تغییر در نوع نمایش سون سگمنت نمیشه
Sent from my LG-H870S using Tapatalk
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
یعنی چکار کنم. ؟؟؟چطوری؟
نوشته اصلی توسط hossein.m98 نمایش پست هااسکن سون سگمنت رو به عهده تایمر بذارید تا وقفه ای در کارش ایجاد نشه.
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
اسکن سون سگمنت رو به عهده تایمر بذارید تا وقفه ای در کارش ایجاد نشه.نوشته اصلی توسط aashkanpasha نمایش پست هاممنونم.
من تونستم ارتباط psi مقدار عدد مورد نظرمو انتقال بدم. عددی که سمت میکروی اول وارد شده و 16 بیت داره رو با شیفت و اند کردن به دو قسمت تقسیم کردم و منتقل کردم.
اینور هم تو میکرو دومم که سون سگمنت بهش وصله عدد رو بگیرم. نمایش بده- باتشکر از راهنمایی شما.
اما الان عدد رو فقط یک ثانیه نشون میده و خاموش میشه تا عدد بعدی وارد بشه- مخام عدد تا ورود عدد بعدی بمونه-از صبحه اینور اونورش مکنم نمدونم چی میشه. هرچیه تو نوع نمایش عدد spi شدس.
کد سمت سلیو یا سون سگمنته این.
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#define F_CPU 1000000
unsigned char state=0;
unsigned int number=0;
unsigned int num_h,num_l;
int a,b,c;
unsigned char spi(unsigned char data){ //spi is function to recived and send
SPDR=data;
while((SPSR&(1<<SPIF))==0);
return SPDR;
}
void segment(number){ //segment is function to show int number on segment
DDRD=0xff; //d port is output
DDRC=0xff; // c port is output
a=number/100;
number=number%100;
b=number/10; //a,b,c is digits of entered number
number=number%10;
c=number;
switch(a){
case 0:PORTD=0xfe; PORTC=0X3F;break;
case 1:PORTD=0xfe;PORTC=0X06;break;
case 2:PORTD=0xfe;PORTC=0X5B;break;
case 3:PORTD=0xfe;PORTC=0X4F;break;
case 4:PORTD=0xfe;PORTC=0X66;break;
case 5:PORTD=0xfe;PORTC=0X6D;break;
case 6:PORTD=0xfe;PORTC=0X7D;break;
case 7:PORTD=0xfe;PORTC=0X07;break;
case 8:PORTD=0xfe;PORTC=0X7F;break;
case 9:PORTD=0xfe;PORTC=0X6F;break;
}
_delay_ms(10); PORTD=0xff; PORTC=0X00;
switch(b){
case 0:PORTD=0xfd;PORTC=0X3F;break;
case 1:PORTD=0xfd;PORTC=0X06;break;
case 2:PORTD=0xfd;PORTC=0X5B;break;
case 3:PORTD=0xfd;PORTC=0X4F;break;
case 4:PORTD=0xfd;PORTC=0X66;break;
case 5:PORTD=0xfd;PORTC=0X6D;break;
case 6:PORTD=0xfd;PORTC=0X7D;break;
case 7:PORTD=0xfd;PORTC=0X07;break;
case 8:PORTD=0xfd;PORTC=0X7F;break;
case 9:PORTD=0xfd;PORTC=0X6F;break;
}
_delay_ms(10); PORTD=0xff; PORTC=0X00;
switch(c){
case 0:PORTD=0xfb;PORTC=0X3F;break;
case 1:PORTD=0xfb;PORTC=0X06;break;
case 2:PORTD=0xfb;PORTC=0X5B;break;
case 3:PORTD=0xfb;PORTC=0X4F;break;
case 4:PORTD=0xfb;PORTC=0X66;break;
case 5:PORTD=0xfb;PORTC=0X6D;break;
case 6:PORTD=0xfb;PORTC=0X7D;break;
case 7:PORTD=0xfb;PORTC=0X07;break;
case 8:PORTD=0xfb;PORTC=0X7F;break;
case 9:PORTD=0xfb;PORTC=0X6F;break;
}
_delay_ms(10); PORTA=0xff; PORTC=0X00;
}
int main(void)
{
DDRB=0X40; //config spi port
PORTB=0X00;
while (1)
{
SPCR=0X43; //control register config
SPSR=0X00; //select register config
num_h=spi(0x00); //take upper bits
number=num_h;
number=(number<<8);
num_l=spi(0x00); //take lower bits
number=(number|num_l); //create number by bits
PORTB|=(1<<4); //ss port should be 1 after reciveing
segment(number); //show number on 7segment
}
}
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
ممنونم.
من تونستم ارتباط psi مقدار عدد مورد نظرمو انتقال بدم. عددی که سمت میکروی اول وارد شده و 16 بیت داره رو با شیفت و اند کردن به دو قسمت تقسیم کردم و منتقل کردم.
اینور هم تو میکرو دومم که سون سگمنت بهش وصله عدد رو بگیرم. نمایش بده- باتشکر از راهنمایی شما.
اما الان عدد رو فقط یک ثانیه نشون میده و خاموش میشه تا عدد بعدی وارد بشه- مخام عدد تا ورود عدد بعدی بمونه-از صبحه اینور اونورش مکنم نمدونم چی میشه. هرچیه تو نوع نمایش عدد spi شدس.
کد سمت سلیو یا سون سگمنته این.
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#define F_CPU 1000000
unsigned char state=0;
unsigned int number=0;
unsigned int num_h,num_l;
int a,b,c;
unsigned char spi(unsigned char data){ //spi is function to recived and send
SPDR=data;
while((SPSR&(1<<SPIF))==0);
return SPDR;
}
void segment(number){ //segment is function to show int number on segment
DDRD=0xff; //d port is output
DDRC=0xff; // c port is output
a=number/100;
number=number%100;
b=number/10; //a,b,c is digits of entered number
number=number%10;
c=number;
switch(a){
case 0:PORTD=0xfe; PORTC=0X3F;break;
case 1:PORTD=0xfe;PORTC=0X06;break;
case 2:PORTD=0xfe;PORTC=0X5B;break;
case 3:PORTD=0xfe;PORTC=0X4F;break;
case 4:PORTD=0xfe;PORTC=0X66;break;
case 5:PORTD=0xfe;PORTC=0X6D;break;
case 6:PORTD=0xfe;PORTC=0X7D;break;
case 7:PORTD=0xfe;PORTC=0X07;break;
case 8:PORTD=0xfe;PORTC=0X7F;break;
case 9:PORTD=0xfe;PORTC=0X6F;break;
}
_delay_ms(10); PORTD=0xff; PORTC=0X00;
switch(b){
case 0:PORTD=0xfd;PORTC=0X3F;break;
case 1:PORTD=0xfd;PORTC=0X06;break;
case 2:PORTD=0xfd;PORTC=0X5B;break;
case 3:PORTD=0xfd;PORTC=0X4F;break;
case 4:PORTD=0xfd;PORTC=0X66;break;
case 5:PORTD=0xfd;PORTC=0X6D;break;
case 6:PORTD=0xfd;PORTC=0X7D;break;
case 7:PORTD=0xfd;PORTC=0X07;break;
case 8:PORTD=0xfd;PORTC=0X7F;break;
case 9:PORTD=0xfd;PORTC=0X6F;break;
}
_delay_ms(10); PORTD=0xff; PORTC=0X00;
switch(c){
case 0:PORTD=0xfb;PORTC=0X3F;break;
case 1:PORTD=0xfb;PORTC=0X06;break;
case 2:PORTD=0xfb;PORTC=0X5B;break;
case 3:PORTD=0xfb;PORTC=0X4F;break;
case 4:PORTD=0xfb;PORTC=0X66;break;
case 5:PORTD=0xfb;PORTC=0X6D;break;
case 6:PORTD=0xfb;PORTC=0X7D;break;
case 7:PORTD=0xfb;PORTC=0X07;break;
case 8:PORTD=0xfb;PORTC=0X7F;break;
case 9:PORTD=0xfb;PORTC=0X6F;break;
}
_delay_ms(10); PORTA=0xff; PORTC=0X00;
}
int main(void)
{
DDRB=0X40; //config spi port
PORTB=0X00;
while (1)
{
SPCR=0X43; //control register config
SPSR=0X00; //select register config
num_h=spi(0x00); //take upper bits
number=num_h;
number=(number<<8);
num_l=spi(0x00); //take lower bits
number=(number|num_l); //create number by bits
PORTB|=(1<<4); //ss port should be 1 after reciveing
segment(number); //show number on 7segment
}
}
نوشته اصلی توسط MM320 نمایش پست هااطلاعی در مورد مچ بند ها توی بازارندارم ولی اگه بخوانین طراحی کنید احتمالا باید بتونید قطعات smd کوچک مثل سون سگمنت تو بازار پیدا کنید من که شهرستان هستم از بازار تهران خبری ندارم.همنطور که می دونید باید سایز مچ بندتون در حالت استاندارد مچ بندهای توی بازار طراحی کنید.موفق باشید...جدیدترین ویرایش توسط aashkanpasha; 2019/08/11, 18:34.
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
اطلاعی در مورد مچ بند ها توی بازارندارم ولی اگه بخوانین طراحی کنید احتمالا باید بتونید قطعات smd کوچک مثل سون سگمنت تو بازار پیدا کنید من که شهرستان هستم از بازار تهران خبری ندارم.همنطور که می دونید باید سایز مچ بندتون در حالت استاندارد مچ بندهای توی بازار طراحی کنید.موفق باشید...
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
ببخشید من دیشب متوجه منظورتون نشده بودم. امروز فهمیدم جریان چیه. دیشب خسته بودم نمیگرفتم. ببخشید. در حال انجامشم اگه موردی بود خیر میدم. مننونمنوشته اصلی توسط MM320 نمایش پست هالصفا برنامه اینجا بزارید تا بهتر بتونم کمک کنم
فقط یه سوال متفرقه: من مخام یه مچبند سون سگمنت بسازم. مثل ساعت مچی ولی توش سون سگمنا که بتونم باهاش ارتباط nrf با قطعات دیگه بگیرم. همچین ملزوماتی هست تو بازار؟ تجهیزات ساعت مچی یا سگمنت سایز خیلی کوچک فرستده گیرنده اون سایزی. ؟؟؟
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
لصفا برنامه اینجا بزارید تا بهتر بتونم کمک کنم
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
ببینین من تک تکً اعداد رو با کیپد زدم. داخل ارایه ریختم. بعد از زدن کلید تایید دستوری نوشتم که اعداد اون ارایه رو یک عدد واحد تیدیل کردم. مثلا ٣و٦و٧ رو تبدیل به ٣٦٧ کرد و اینو فرستاد به ال سی دی و چون لازمه حتما بعد زدن تایید این عدد فرستاده شه نه خین وارد کردن عدد. لذا نمتونم اعضای ارایه رو بفرستم. باید همین متغیر number که از نوع اینته رو بفرستم بره. لذا باید اون عدد رو نمدونم ١ یا ٩٩٩ بتونم هشت بیتش کنم. درسته؟ یعنی چه دستورس برای number بنویسم که بشه هشت بیت صفرو یک.نوشته اصلی توسط MM320 نمایش پست هادوست غریز شما وقتی عدد وارد مقدارذ باینری درون متتغییر ریخته میشه مگر اینکه شما از آرایه استفاده کردید مقدار تک تک عداد وارده از کیپد جدا جدا درون آرایه ریختید ولی تا اونجای یادم برنامه کیپد رو براتون نوشتم مقدار داخل متغییر می ریزه مثلا شما 999 که وارد می کنید معادل باینری میشه 1111 1110 0111 شما هشت بیت پایین یاLSB جدا می کنید میشه این 11101111 بعد بایت بالا جدا میکنید که MSB میشه
00001110
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
دوست غریز شما وقتی عدد وارد مقدارذ باینری درون متتغییر ریخته میشه مگر اینکه شما از آرایه استفاده کردید مقدار تک تک عداد وارده از کیپد جدا جدا درون آرایه ریختید ولی تا اونجای یادم برنامه کیپد رو براتون نوشتم مقدار داخل متغییر می ریزه مثلا شما 999 که وارد می کنید معادل باینری میشه 1111 1110 0111 شما هشت بیت پایین یاLSB جدا می کنید میشه این 11101111 بعد بایت بالا جدا میکنید که MSB میشه
00001110
یک دیدگاه بنویسید:
-
پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر
اخه معلوم نمیکنه عدد چند کیپد میزنه.نوشته اصلی توسط MM320 نمایش پست هانیازی به تبدیل باینری نیست شما کافیه مقدار متغییر رو هشت بیت هشت بیت با دستور AND و شیفت جدار و درون متغییر بریزید و مقدار هشت بیتها رو به واحد SPI بدید
تک رقمی میزنن دو رقمی میزنن سه رقمی میزنن. معلوم نمکنه.
من میگیم تابعی بنویسم که کلا عدد رو به باینری تبدیل کنه. بعد اونو بفرسته. ٩٩٩ باینریش چنده؟
یک دیدگاه بنویسید:
یک دیدگاه بنویسید: