سلام دوستان من به یه مشکل عجیبی برخورد کردم در مورد i2c
اولش تو حلقه while یه پین رو تاگل کردم به اسکوپ وصل کردم دیدم فرکانس خروجی خیلی زیاده یعنی فاصله هر روشن خاموش شدن حدود 1 میکرو ثانیه یا حتی کمتر
بعدش اومدم یه دستور i2c نوشتم به این شکل
دیدم همون پینه اینبار تو اوسکوپ هر 500 میکروثانیه خاموش و روشن میشه یعنی انگار تو هر سیکل این دستورات i2c یه تاخیر میندازه هر چی تعداد دستوراتی که با i2c سرو کار داره زیادتر میشه تاخیر هم بیشتر میشه مثلا این دستور تاخیرمو به 2 میلی ثانیه رسوند
دستور i2c رو تو تایمر نوشتم دیدم کلا قاطی کرد دو تا شکل موج 1 میکرو ثانیه و 500 میکرو ثانیه با هم کانوالو شد oo:
دوستان کسی به این مشکل برنخورده ؟ راه حل چیه؟
اولش تو حلقه while یه پین رو تاگل کردم به اسکوپ وصل کردم دیدم فرکانس خروجی خیلی زیاده یعنی فاصله هر روشن خاموش شدن حدود 1 میکرو ثانیه یا حتی کمتر
کد:
while (1) { PORTD.0=~PORTD.0; }
کد:
while (1) { i2c_start(); b=3; i2c_write(b); a=i2c_read(23); i2c_stop(); PORTD.0=~PORTD.0; }
کد:
while (1) { i2c_start(); b=3; i2c_write(b); i2c_write(b); i2c_write(b); i2c_write(b); i2c_write(b); i2c_write(b); i2c_write(b); a=i2c_read(23); i2c_stop(); PORTD.0=~PORTD.0; }
دوستان کسی به این مشکل برنخورده ؟ راه حل چیه؟
دیدگاه