اطلاعیه

Collapse
No announcement yet.

اتباط ٢ میکرو با i2c

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

    اتباط ٢ میکرو با i2c

    با سلام...
    من میخوام دو تا میکرو(یکی master transmitter و یکی slave reciver) رو با i2c شبکه کنم(بعدا تعمیمش میدم!!)...مثلا master یه عدد رو بفرسته تو slave...همین!!
    اگه میشه یکی توضیح کامل بده که با codevision چه جوری میتونم این کاررو انجام بدم....میخوام از توابعi2c(مثلا i2c_read و i2c write و...) استفاده کنم (هرچی مثال دیده بودم از رجیسترها استفاده کرده بودن!!)
    بیشتر پستهای سایت رو هم دیدم اما به جواب نرسیدم.(یکی که ارتباط با EPROM بود رو مشکل داشتم که به جناب حسام الدین خان هم گفتم که امیدوارم رفع بشه!!...اما اینجا واسه ٢ میکرو و بعدا تعداد بیشتری می خوام)
    اگه میشه جواب بدین ...ممنون...

    #2
    پاسخ : اتباط 2 میکرو با i2c

    سلام من یه مقاله ی کامل د رمورد تمامیه روشهای شبکه کردن میکرو ها دارم . حجمش یکم زیاد شده .
    کجا بذارم ؟

    برای داشتن چیزهایی که تا کنون نداشته ام - باید کسی باشم که تا کنون نبوده ام .
    http://www.elec4u.ir

    دیدگاه


      #3
      پاسخ : اتباط ٢ میکرو با i2c

      هرجا بتونین upload کنین خوبه!!...همون 4shared فکر کنم راحت ترینش باشه...
      از بقیه دوستان هم میخوام در مورد سوالم کمک کنن
      ممنون...

      دیدگاه


        #4
        پاسخ : اتباط ٢ میکرو با i2c

        با سلام....
        کسی که فعلا جواب منو نداده اما امیدوارم تو این مورد کمک کنین:
        من این برنامه رو واسه فرستنده نوشتم:(master transmitter(
        کد:
           i2c_start();
           i2c_write(0x01);
           i2c_write(i);
           i2c_stop();
           delay_ms(10);
           i++;
           if(i==126)i=0;
           delay_ms(800);
        که از 0 تا 126 رو روی باس میفرسته...
        حالا این برنامه به نظر شما درسته؟
        مهم تر اینکه برای slave reciever(گیرنده) چی کار کنم؟
        الگوریتم کاریش چه جوریه؟

        دیدگاه


          #5
          پاسخ : اتباط ٢ میکرو با i2c

          سلام دوست عزیز ...
          منم تازه i2c رو شروع کردم و امیدوارم دوستان کمک کنند...
          قبل از شروع نباید ()i2c_init رو نوشت ..
          ذکات علم یاد دادنه ....

          دیدگاه


            #6
            پاسخ : اتباط ٢ میکرو با i2c

            نوشته اصلی توسط majid.4206
            سلام دوست عزیز ...
            منم تازه i2c رو شروع کردم و امیدوارم دوستان کمک کنند...
            قبل از شروع نباید ()i2c_init رو نوشت ..
            منم همجنان امیدوارم........
            بله باید نوشت(من فقط کد برنامه رو نوشتم)

            دیدگاه


              #7
              پاسخ : اتباط ٢ میکرو با i2c

              سلام
              این موضوع دقیقا مشکل من هم هست
              تئوریش رو متوجه شدم اما هنوز نتونستم یه دیتا باهاش بفرستم
              من می خوام یه ارایه 20 تایی بفرستم
              از دوستانی که تو این ضمینه کار کردن خواهش میکنم پاسخگو باشند
              ممنون
              در میان مردم پی دستی هستم پی گرمای نگاهی حتی در پس این همه چشم سردی غربت انسان پیداست
              در پس، این همه نور این همه رنگ چه کسی میبیند اشک آن کودک را چشم آن مردی را
              که شبانگاه، سر افکنده ز شرم و به یاد طفل اش بی صدا میگرید، می شکند
              آری این شهر من است این همان شهر شما است در پی چشمی باش که نگاه اش آبی است و پر از نم نم باران بهار

              دیدگاه


                #8
                پاسخ : اتباط ٢ میکرو با i2c

                جناب یغمایی تونستین به جواب برسین؟
                ذکات علم یاد دادنه ....

                دیدگاه


                  #9
                  پاسخ : اتباط ٢ میکرو با i2c

                  والا من دارم روش کار میکنم....
                  کسی هم که کمک نمیکنه :angry:
                  برنامه ی master رو که گذاشتم(امیدوارم درست باشه)...برای slave هم فقط به فکرم رسید که اول یه i2c_read() داشته باشیم و اگه برابر آدرس فرستاده شده از طرف master باشه،شروع میکنه به خوندن i2c bus و هر کار دیگه(با یه if میشه این کارو انجام داد)...اما هنوز درست جواب نمیده
                  البته این روش فکر نکنم خیلی درست باشه چون طبق پروتکل،slave باید ack بفرسته که فکر کنم اینجا انجام نمیشه و از رجیستر TWAR هم استفاده نمیشه....
                  باز هم از دوستان درخواست می کنم کمک کنن
                  ممنون...

                  دیدگاه


                    #10
                    پاسخ : اتباط ٢ میکرو با i2c

                    یعنی کسی با این پروتکل کار نکرده :cry2:
                    بابا دوتون گرم لااقل راهنمایی کنید بقیشو خودمون میریم
                    یا علی...
                    ذکات علم یاد دادنه ....

                    دیدگاه


                      #11
                      پاسخ : اتباط ٢ میکرو با i2c

                      توی کتاب مرجع کامل میکرو های AVR نوشته پرتووی فر انتشارات نص تو صفحه 341 تا 344 نمونه برنامه هارو واسه مستر و اسلیو گذاشته . اونو امتحان کردید ؟! یا اگه امتحانش نکردین بشینم تایپش کنم تو پروتیوس اجراش کنم براتون پ کنم !؟!؟! oo:

                      دیدگاه


                        #12
                        پاسخ : اتباط ٢ میکرو با i2c

                        نوشته اصلی توسط علیفری
                        توی کتاب مرجع کامل میکرو های AVR نوشته پرتووی فر انتشارات نص تو صفحه 341 تا 344 نمونه برنامه هارو واسه مستر و اسلیو گذاشته . اونو امتحان کردید ؟! یا اگه امتحانش نکردین بشینم تایپش کنم تو پروتیوس اجراش کنم براتون پ کنم !؟!؟! oo:
                        ممنون از اینکه جواب دادین
                        بله من اونو خوندم...کتاب ره افروز و کتاب آقای بادامی رو هم خوندم....بیشتر پستهای سایت رو هم خوندم...
                        اما من می خواستم با استفاده از توابع(مثل i2c_read()و ...) برنامه رو بنویسم....
                        و یا حداقل نظر بدین که برنامه master درسته و الگوریتم (و برنامه) slave چیه....
                        باز هم ممنون و امید به کمک دوستان دارم

                        دیدگاه


                          #13
                          پاسخ : اتباط ٢ میکرو با i2c

                          جداً کسی با i2c کار نکرده؟؟ :surprised:
                          الگوریتم طرف slave reciever رو هم کسی نمیدونه تا به ما یک کمکی کرده باشه؟ :angry:

                          دیدگاه


                            #14
                            پاسخ : اتباط ٢ میکرو با i2c

                            دوست عزیز سلام
                            من همین امشب بعداز یک هفته الافی تونستم از i2c جواب بگیرم اما من یه مشکل دارم که نمی تونم دو تا میکرو متفاوت مثلا mega64 ,mega8 رو به هم وصل کنم
                            این برنامه که الان کار می کنه با کد ویژن و مگا هشت نوشتم و فرکاش هر دو IC هم 1mhz
                            هست اما من باید یه 64 و 8 رو که دو فرکانس متفاوت دارن بهم وصل کنم البته باید بگم می شه فرکانس I2C رو محاسبه کرد اما من امتحان کردم جواب نمی ده اما با 2 مگا مثل هم و هم فرکانس مشکلی نداره
                            چند نکته1- زمین هر دو مدار مستر و اسلیو باید بهم وصل باشه
                            2- در یکی آدرس اسلیو منظورم رجیستر TWAR هست باید تعریف بشه که در حقیقت اون مدار اسلیو شماست
                            سورس دو برنامه رو می گذارم فقط اگه تونستی با دو مگا که مثل هم نیستند جواب بگیری
                            به من هم بگو تا ازش استفاده کنم

                            پیروز باشید

                            مهندس هاشمی
                            برای رسیدن به خوشبختی نیازی به تلاش بی وقفه نیست کافی است مثبت اندیشه کنید

                            دیدگاه


                              #15
                              پاسخ : اتباط ٢ میکرو با i2c

                              برنامه مستر


                              #include <mega8.h>
                              #include <delay.h>

                              // I2C Bus functions
                              #asm
                              .equ __i2c_port=0x15 ;PORTC
                              .equ __sda_bit=0
                              .equ __scl_bit=1
                              #endasm
                              #include <i2c.h>
                              void myi2c_write(unsigned char bus_adrs,unsigned char mdata)
                              {
                              unsigned char i;
                              //while(1){
                              for(i=0;i<=4;i++){
                              i2c_start();
                              i2c_write(bus_adrs);//ferestadan address slave
                              i2c_write(mdata);
                              i2c_stop();
                              delay_ms(10);
                              PORTB.0=0x01;
                              };

                              }
                              // Declare your global variables here
                              unsigned char o[10]={0x77,0x90,0x77,'a',0x77,'b', 0x77,0x99,0x77,0x90};
                              void main(void)
                              {
                              // Declare your local variables here
                              unsigned char i;
                              // Input/Output Ports initialization
                              // Port B initialization
                              // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                              // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                              PORTB=0x00;
                              DDRB=0xFF;

                              // Port D initialization
                              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                              PORTD=0x00;
                              DDRD=0x00;

                              // Timer/Counter 0 initialization
                              // Clock source: System Clock
                              // Clock value: Timer 0 Stopped
                              TCCR0=0x00;
                              TCNT0=0x00;

                              // Timer/Counter 1 initialization
                              // Clock source: System Clock
                              // Clock value: Timer1 Stopped
                              // Mode: Normal top=FFFFh
                              // OC1A output: Discon.
                              // OC1B output: Discon.
                              // Noise Canceler: Off
                              // Input Capture on Falling Edge
                              // Timer1 Overflow Interrupt: Off
                              // Input Capture Interrupt: Off
                              // Compare A Match Interrupt: Off
                              // Compare B Match Interrupt: Off
                              TCCR1A=0x00;
                              TCCR1B=0x00;
                              TCNT1H=0x00;
                              TCNT1L=0x00;
                              ICR1H=0x00;
                              ICR1L=0x00;
                              OCR1AH=0x00;
                              OCR1AL=0x00;
                              OCR1BH=0x00;
                              OCR1BL=0x00;

                              // Timer/Counter 2 initialization
                              // Clock source: System Clock
                              // Clock value: Timer2 Stopped
                              // Mode: Normal top=FFh
                              // OC2 output: Disconnected
                              ASSR=0x00;
                              TCCR2=0x00;
                              TCNT2=0x00;
                              OCR2=0x00;

                              // External Interrupt(s) initialization
                              // INT0: Off
                              // INT1: Off
                              MCUCR=0x00;

                              // Timer(s)/Counter(s) Interrupt(s) initialization
                              TIMSK=0x00;

                              // Analog Comparator initialization
                              // Analog Comparator: Off
                              // Analog Comparator Input Capture by Timer/Counter 1: Off
                              ACSR=0x80;
                              SFIOR=0x00;


                              //--- Start Condition and Transmitting SLA+W ----
                              //_____________________khodam ezafe kardam
                              TWBR=0x05; // Bit Rate: 38.462 kHz
                              TWCR = 0xA4; // Transmit Start Condition
                              // I2C Bus initialization
                              i2c_init();
                              i=0;
                              while(1){

                              myi2c_write(0x01,o[i]);
                              delay_ms(60);
                              i++;
                              PORTB.2=0x01;
                              };
                              }
                              برای رسیدن به خوشبختی نیازی به تلاش بی وقفه نیست کافی است مثبت اندیشه کنید

                              دیدگاه

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