امتیاز موضوع:
  • 5 رأی - میانگین امتیازات: 3.4
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش قدم به قدم AVR
#21
مرسی از همتون
پاسخ
#22
اول از همه در پاسخ به سوال دوستمون که پرسیده بود چطوری میشه تو c به یه بیت از یه بایت دسترسی داشت خب باید بگم راه های زیادی هستExclamation
تو قسمت آموزش c و کامپالر codevision آقای polestar در مورد توضیح دادن و منم توضیحات تکمیلی رو دادم البته من این روش آقای polestar رو توی کتابخانه ی lcd گوشی N96 مربوط به پروژه ی mp3 player شون قبلاً دیده بودمWink

ولی میشه از ساختمان بیتی هم به این منظور استفاده کرد هرچند نمیدونم تو کامپالر کدویژن میشه ازش استفاده کرد یا نه؟!!!!

کد:
struct نام ساختمان بیتی  {
;<طول فیلد 1> : <نام فیلد 1> <نوع فیلد 1>
;<طول فیلد 2> : <نام فیلد 2> <نوع فیلد 2>
..........
.........
.......
;<طول فیلد n> : <نام فیلد n> <نوع فیلد n>
} اسامی متغییرهای بیتی;

ساختمانها توی زبان سی نامی برای مجموعه ای از متغییر هاست که این متغییر ها میتونن همنوع نباشن.
پاسخ
#23
آموزش پورت سری TWI یا همون I2C


از این پورت برای انتقال سریال مابین چند دستگاه استفاده میشه که تعداد حداکثر دستگاهها 128 تا میتونه باشه و فاصله ی اونها از هم حداکثر حدود 2-3 متر هستش سرعت انتقال تو این روش نسبت به پورت سری SPI خیلی کمتره و حداکثر سرعت 400 کیلو بیت بر ثانیه است ولی تو این روش تعداد سیم کمتری نیاز هست و اطلاعات توسط دو سیم به نامهای SCL و SDA که باس نامیده میشن صورت میگره و این یه مزیت برای استفاده از این پورته چون توی روش های دیگه تعداد خیلی بیشتری سیم استفاده میشه مثلا توی پورت spi برای هر دستگاه 4 رشته سیم لازمه .
تو این روش هر دستگاه میتونه مستر Master یا Slave باشه دستگاهی که بعنوان Slave هستش داری یه آدرس هفت بیتی است که Master از طریق این آدرس و خط باس که از دو سیم تشکیل شده با Slave ارتباط برقرار میکنه .
Master میکرویی است که پالس ساعت انتقال اطلاعات رو روی باس SCl تولید میکنه و باس SDA رو در اختیار میگره و پیغام start رو میفرسته و اینجوری انتقال اطلاعات رو شروع میکنه.
SCL مخففSerial Clock و SDA مخفف Serial Data هستشBig Grin
میکرو کنترل Master وSlave هر دو میتونن فرستنده و گیرنده باشن.
میکرو کنتر لها در این حالت کلکتور بازهستند واسه همین باید خطوط باس یعنی خط SDA وSCL رو با یه مقاومت به VCC وصل کنید که اینجوری توی حالت عادی خطوط باس در سطح منطقی یک قرار میگیرنConfused
هر بیتی رو که روی خط داده یعنی SDA ارسال میکنین با یه پالس ساعت SCl همراه هستش.
نحوه اتصال میکروها یا دستگاهها به اینصورته:


اینم نحوه ارسال اطلاعات از طریق باس هستش:


خب همونطور که توی تصویر بالا میبینید اطلاعات 0 یا 1 روی خط اطلاعات یا همون SDA زمانی معتبره که خط پالس ساعت SCL برابر 1 باشه
بنابراین هر تغییر در ارسال داده ها باید زمانی که SCL مساوی 0 هستش صورت بگیره. در صورتیکه میکروی Slave زمان بیشتری روبرای دریافت داده ها نیاز داشته باشه خط SCL رو صفر نگه میداره.
پاسخ
 سپاس شده توسط reza1376 ، MRGH ، mohammad_Namdari
#24
خب تا اینجای کار تا حدی با پورت سری TWI آشنا شدیمAt
حالا ادامه کار :
میکرو کنترلی که Master تعریف میشه تبادل اطلاعات رو با فرستادن پیغام Start شروع میکنه پیغام start چیز خاصی نیست زمانیکه پالس ساعت SCL در 1 منطقی قرار داره خط داده SDA از 1 به صفر میاد اینجوری پیغام start ایجاد میشه یه همین راحتیBig Grin بعد از فرستادن پیغام Start میکرو آدرس
slave رو که میخواهد تبادل اطلاعات رو باهاش شروع کنه به اضافه بیت R/W روی خط SDA میفرسته بعد از این اطلاعات فرستاده میشه و در پایان پیغام stop فرستاده میشه.پیغام stop زمانیکه SCL=1 خط داده SDA از صفر به 1 میره.



از زمانیکه پیغام Start ارسال میشه تا وقتیکه پیغام stop ارسال بشه باس مشغوله و میکروهای دیگه نمیتونن بعنوان Master ارتباط برقرار کنن اگه میکرو کنترلی که باس رو در اختیار داره نخواد کنترل باس رو ازدست بده پیغام Repeated Start رو ارسال میکنه:



خب گفتیم که میکروی Master اول پیغام start رو میفرسته بعد بسته آدرس بعدش اطلاعات و در پایان هم پیغام stop رو میفرسته. حالا میخواهیم بدونیم آدرس چطوری فرستاده میشه؟؟؟؟؟؟؟
بسته آدرس 9 بیتی هستش که 7 بیتش آدرسه 1 بیت برای خوندن و نوشته R/W یعنی میکروی Master میخواد اطلاعات رو به Slave بفرسته یا اینکه میخواد از اون بخونه و یه بیت پاسخ دریافت ACK مخففAcknowlege که توسط میکروی slave روی خط داده قرار میگره
اگه بیت R/W=1 باشه یعنی اطلاعات توسط Master خونده میشه و Slave باید فرستنده باشه
اگه بیت R/W=0 باشه یعنی اطلاعات توسط Slave خونده میشه

خب اگه Master گیرنده و Slave فرستنده باشه بسته ی آدرس Slave شامل آدرس و بیت خواندن اطلاعات است و SLA+R نامیده میشه
اگه Master فرستنده و Slave گیرنده باشه بسته ی آدرس Slave شامل آدرس و بیت نوشتن اطلاعات است و SLA+W نامیده میشه.


زمانی که slave آدرس خود رو دریافت کرد و تشخیص بده که تبادل اطلاعات با خودش هستش در زمان 9 امین پالس SCL خط داده SDA رو 0 میکنه یعنی پاسخ دریافت ACK میده و اگه Slave مشغول باشه یا به هر دلیلی نتونه ارتباط برقرار کنه در زمان نهمین ‍پالس خط رو 1 میکنه و پاسخ NOTACK میده. در اینصورت میکروی Master به ارتباط خاتمه میده و پیغام Stop رو ارسال میکنه.
آدرس Slave بین 0تا 127 بطور دلخواه میشه انتخاب کرد این آدرس در ثبات TWAR ذخیره میشه TWAR یه ثبات 8 بیتی است که 7 بیت پرارزشترش برای آدرس Slave هستش و کم ارزش ترین بیت برای پیغام عمومی است.


بیت TWGCE=1 باشه اونوقت پیغام عمومی رو Slave قبول میکنه.
پاسخ
 سپاس شده توسط Farzin_ne ، reza1376
#25
یادم رفت بگم پیغام عمومی زمانیه که میکروی Master بخواد اطلاعاتی رو به همه ی Slave ها بفرسته در اینصورت Master آدرس 0000000
رو که برای پیغام عمومی رزرو شده بر روی خط داده میفرسته و Slave ها در زمان نهمین پالس پاسخ دریافت ACK رو با صفر کردن خط داده میفرستن.


خب حالا نحوه ارسال داده رو بررسی میکنیم بسته های داده هم مثل بسته آدرس 9 بیتی هستن که 8 بیت اطلاعات و یه بیت ACK هستش.


پاسخ
 سپاس شده توسط reza1376
#26
تا اینجا با طرز کار پورت سری TWI آشنا شدیم حالا ساختار ش رو بررسی میکنیم:


همون طور که توی شکل مشخصه پورت سری TWI از 4 قسمت تشکیل شده که توضیح هر قسمت رو میگم:
1) Bit Rate Generator یا واحد تولید کننده پالس ساعت:
پالس ساعت SCl در این واحد ساخت میشه با قرار دادن مقداری توی ثبات TWBR (مخفف TWI Bit Rate ) و بیتهای 0 و 1 ثبات TWSR (مخفف TWI status Register ) پالس ساعت SCL مطابق فرمول زیر ساخته میشه:
فرکانس میکرو
ـــــــــــــــــــــــــــــــــــــــــــ = فرکانس SCL
2TWBR*4^TWPS) +16)
مثلا اگه فرکانس میکرو 8MHZ باشه و مقدار TWBR=0x04 باشه و بیت 0 و 1 TWSR برابر 00 باشه فرکانس SCL میشه: 50KHZ
حتما دقت کنید فرکانس کاری میکروکنترلر Slave باید 16 برابر SCL باشه و همینطور توی میکرو ی Master عدد داخل TWBR بیشتر از 10 باشه.

پاسخ
#27
قسمت دوم پورت سری TWI :
2) Bus InterFace Unit واحد مدار واسط باس:
همون طور که میبینید تو این قسمت تولید کننده و بررسی کننده بیت دریافت پاسخ ACK و عدم دریافت پاسخ NOTACK و همینطور کنترل کننده ارسال و تشخیص پیغامهای Start وStop و Repeaded Start قرار داره.
همین طور شیفت دهنده ی ثبات TWI توی همین قسمته.

قسمت سوم و مهمترین قسمت پورت سری مون:
3) Control Unit واحد کنترله:
این واحد با دو ثبات TWCR و TWSR کارهای پورت رو کنترل میکنه. که هر کدوم از این دو ثبات رو توضیح میدم.
TWCR :

پاسخ
 سپاس شده توسط reza1376
#28
خب حالا هرکدوم از بیت ها رو توضیح میدم
مهمترین بیت بیت شماره 7 هستش یعنی TWINT که مخفف TWI Interrupt هستش همونطور که از اسمش پیداست پورت سری I2C هر کاری رو که به پایان میرسونه این بیت 1 میشه
و کاربر برای انجام عملیات بعدی باید تو این بیت 1 بنویسه تا عملیات بعدی انجام بشه مثلا زمانی که پیغام START ارسال شد این بیت بطوراتوماتیک 1 میشه کاربر تو این مرحله دستورات لازم برای ارسال آدرس SLAVE بصورت SLA+R/W مینویسه حالا برای اینکه میکرو این آدرس رو بفرسته باید تو بیت TWI عدد 1 نوشته بشه پس برای انجام هر عملیات جدید باید بصورت نرم افزاری تو این بیت 1 نوشت یا همون clear اش کرد.
این بیت تو 4 حالات 1 میشه :
1) زمانی که پیغام START یا Repeated START رو میکرو ارسال کرده باشه.
2) آدرس SLAVE رو ارسال کرده باشه و پاسخ ACK رو دریافت کرده باشه
3)آدرس پیغام عمومی توی میکروی SLAVE دریافت شده باشه
4) یک بایت داده رو ارسال یا دریافت کرده باشه و ACK دریافت کرده باشه

بیت ششم TWEA

اگه تو این بیت 1 بنویسیم پاسخ ACK تولید میشه زمانی پاسخ دریافت داده میشه که 1) میکروی SLAVE آدرسش رو دریافت کرده باشه یا اینکه پیغام عمومی را دریافت کرده باشه
2) یه بایت داده در حالت گیرنده MASTER یا Slave دریافت شده باشه
پاسخ
#29
بیت 5 ام TWSTA :
اگه بخواهیم میکروکنترلر بصورت Master باشه تو این بیت یک مینویسیم در واقع با 1 کردن این بیت میکرو باس رو کنترل میکنه و در صورت آزاد بودن باس پیغام START رو میفرسته باید توجه داشته باشید که این بیت بصورت اتوماتیکclear نمیشه و باید با یک نوشتن تو این بیت اون رو بعد فرستادن پیغام START پاک کرد

بیت 4 ام TWSTO :
درمیکروکنترلر MASTER اگه 1 تو این بیت بنویسیم پیغام STOP رو ارسال میکنه این بیت بصورت اتوماتیک 0 میشه


بیت سوم TWWC که مخفف TWI Write Collision flag هستش:
طبق توضیحات داده شده میدونیم زمانی باید توی ثبات ٰTWDR اطلاعات نوشته بشه که بیت TWINT یک شده باشه حالا اگه این بیت 0 باشه و اطلاعات بخواد توی ثبات داده نوشته بشه بیت TWWC برابر 1 میشه که نشانه ی خطاست


بیت دوم TWEN مخفف TWI Enable هستش:
همونطور که از اسمش معلومه با نوشتن 1 تو این بیت پورت سری I2C فعال میشه

بیت 1 رزرو شده و کاربرد نداره

بیت 0 TWIE که مخفف TWI Interrupt Enable :
اگه این بیت رو 1 کنیم و بیت وقفه کلی I توی ثبات وضعیت 1 باشه بنابراین تا زمان 1 بودن TWINT وقفه پورت سری فعالهBig Grin
پاسخ
#30
آخرین ثبات این پورت TWSR هستش 2 بیت 0 و 1 برای فرکانس SCL کاربرد داره که در بالا توضیح دامش بیت سوم این ثبات رزرو شده و استفاده نمیشه بیت چهارم تا آخرین بیت یعنی بیت هفتم واسه ذخیره کدی که با اون میتونیم وضعیت پورت سری رو بررسی کنیم پورت I2c هر کاری رو که به پایان میرسونه نتیجه کار رو رو بصورت کد تو این 5 بیت با ارزشتر ثبات TWSR ذخیره میکنه که با مراجعه به دیتا شیت میکرو میتونید کدهای حاصله واسه هر کاری مشاهده کنید مثلا اگه پیغام START با موفقیت ارسال شده باشه مقدار 0x08 تو این 5 بیت قرار میگیره که میتونید تو دستوراتتون از این قضیه استفاده کنید فقط حواستون باشه برای استفاده از این ثبات 3 بیت اولی یعنی شماره بیتهای 0 و1 و2 رو ماسک کنید



پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش ساخت تابلو روان 3 و 7 رنگ و آموزش ساخت تابلو چرخان moein masoumi 365 129,866 21-12-1396، 09:42 عصر
آخرین ارسال: pad_kay
  آموزش avr studio به فارسی abedanew 0 733 4-11-1393، 02:32 صبح
آخرین ارسال: abedanew
  کتاب آموزش کاربردی AVR peyman9 2 1,203 25-6-1393، 03:01 عصر
آخرین ارسال: peyman9
  آموزش ساخت کامل و جامع ریموت کنترل برای ربات electronicnarm2010 21 8,517 19-10-1392، 10:15 عصر
آخرین ارسال: maysamshirani
  آموزش میکرو کنترلر AVRاز صفر mohammd-98 0 733 29-9-1392، 02:19 عصر
آخرین ارسال: mohammd-98
Video آموزش بسکام پروژه یازدهم( ساخت ساعت با lcd) akbar8 45 18,331 12-1-1392، 11:04 صبح
آخرین ارسال: ehsancompany
  فیلم آموزش avr morteza90 2 1,168 3-1-1392، 07:46 عصر
آخرین ارسال: morteza90
  آموزش مفهومی تایمر/کانتر amir68000 1 1,515 25-9-1391، 11:14 عصر
آخرین ارسال: mohammad_amin
  حل مشکلات تاپیک آموزش قدم به قدم AVR امیرحسین 35 9,931 4-7-1391، 08:38 عصر
آخرین ارسال: atmelboy
  آموزش bascome reza137171 9 2,580 16-4-1391، 04:08 عصر
آخرین ارسال: masal

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان