اطلاعیه

Collapse
No announcement yet.

بردی برای ENC28j60

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

    #31
    پاسخ : بردی برای ENC28j60

    سلام .

    اصل مدار مال جناب بن نیست و ایشون فقط برنامه بسکام اونو نوشتن. اصل برد مال tuxgraphic هست . و من تونستم اونو با atmega 128 بالا بیارم .
    فقط باید یک سری تغیرات کوچیک داده بشه .
    نوفن پردازش هوشمند

    دیدگاه


      #32
      پاسخ : بردی برای ENC28j60

      سلام دوستان یه سوال داشتم.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

      موقعی که یک packet رو می خونیم از کجا باید بفهمیم که نوع داده چیه که عملیات لازم رو روش انجام بدیم .یعنی از کجا بفهمیم نوع بسته چیه.ip,tcp,arp,upd,????????
      http://www.eca.ir/forum2/index.php/topic,10159.0.html
      Engineering is the art of making what you want from things you can get.
      اموزش DSP ...........................
      http://www.eca.ir/forum2/index.php?topic=29824.0
      http://www.eca.ir/forum2/index.php?topic=32324.0

      دیدگاه


        #33
        پاسخ : بردی برای ENC28j60

        نوشته اصلی توسط h_namazian66
        سلام اقاى رستمى
        یه سوال شما جاى ferrit bead که تو دیتا شیت کشیده جى کذاشتین
        خیلى ممنون
        از هستهٔ داخل IF !

        برنامه هم امروزو فردا توضیح میدم قضیشو ، الان نزدیکای صبحه کمی خوابم میاد!

        البته اگر دوستان کمی زرنگ بودن از همون لینکی که در پست اولم دادم برنامه رو دانلود میکردن و با کمی تغییرات در این برد استفاده میآ‌کردن!
        چگونه هوشمندانه بپرسیم

        دیدگاه


          #34
          پاسخ : بردی برای ENC28j60

          توضیحاتی که میدم روشی هست که خودم کار میکنم و ممکنه برای عزیزان کمی سخت باشه.
          مطمئنا راهآ‌های سادهآ‌تر برای کامپایل و پروگرام کردن هست که انتخاب اینآ‌ها به عهده خواننده است.

          موارد مورد نیاز! :
          * فایل سورس ضمیمه شده
          * پروگرامر USBASP
          * کامپایلر Avr-gcc یا معادل تحت ویندوز آن بنام Winavr
          * برنامهٔ avrdude برای پروگرام کردن آی سی
          * آشنایی مختصر با ترمینال

          فایل سورس ضمیمه شده را دانلود کرده و از حالت فشرده خارج نمایید.
          یک ترمینال باز کرده و به مسیر دایرکتوری سورسآ‌کد بروید.
          کد:
          unzip Ethernet_tutorial_0.1.zip
          cd /WhenEver/Ethernet_tutorial_0.1


          ابتدا باید پروٰژه را کامپایل کنیم تا فایل هگز مورد نیاز برای پروگرام کردن ساخته شود.
          کد:
          make all


          اگر همه چیز درست باشد ، خروجیآ‌ای مانند زیر را خواهیم داشت و فایلی بنامآ‌ output.hex ساخته میآ‌شود :
          کد:
          hamid@hamid-laptop:~/Desktop/Ethernet_tutorial_0.1$ make all
          avr-gcc -c ip_arp_udp_tcp.c -Wall -I. -I./avrlib -mmcu=atmega8 -O1 -oip_arp_udp_tcp.o
          avr-gcc -c enc28j60.c -Wall -I. -I./avrlib -mmcu=atmega8 -O1 -oenc28j60.o
          avr-gcc -c main.c -Wall -I. -I./avrlib -mmcu=atmega8 -O1 -omain.o
          avr-gcc ip_arp_udp_tcp.o enc28j60.o main.o -o output.o -I. -I./avrlib -mmcu=atmega8 -O1 -Wall
          avr-objcopy output.o output.hex -O ihex
          [Done]


          حالا باید فیوز بیتهای میکروکنترلر را تنظیم کنیم.
          کد:
          make fuse


          و حالا هم فایل output.hex را در میکروکنترلر پروگرام میآ‌کنیم :
          کد:
          make flash


          و خروجیآ‌ای مانند زیر رو میآ‌بینیم :
          کد:
          hamid@hamid-laptop:~/Desktop/Ethernet_tutorial_0.1$make flash
          avrdude -c usbasp -p atmega8 -U flash:w:output.hex
          
          avrdude: AVR device initialized and ready to accept instructions
          
          Reading | ################################################## | 100% 0.01s
          
          avrdude: Device signature = 0x1e9307
          avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
               To disable this feature, specify the -D option.
          avrdude: erasing chip
          avrdude: reading input file "output.hex"
          avrdude: input file output.hex auto detected as Intel Hex
          avrdude: writing flash (5024 bytes):
          
          Writing | ################################################## | 100% 1.20s
          
          
          
          avrdude: 5024 bytes of flash written
          avrdude: verifying flash memory against output.hex:
          avrdude: load data flash data from input file output.hex:
          avrdude: input file output.hex auto detected as Intel Hex
          avrdude: input file output.hex contains 5024 bytes
          avrdude: reading on-chip flash data:
          
          Reading | ################################################## | 100% 1.44s
          
          
          
          avrdude: verifying ...
          avrdude: 5024 bytes of flash verified
          
          avrdude: safemode: Fuses OK
          
          avrdude done. Thank you.


          خب ، حالا باید دستگاه خودمون را در شبکه قرار بدیم و یک تست ping بگیریم. پس با فرض اینکه IP دستگاه 192.168.1.10 باشد ، میآ‌نویسیم :
          کد:
          ping 192.168.1.10


          باید خروجیآ‌ای مانند این داشته باشیم :
          کد:
          hamid@hamid-laptop:~/Desktop/Ethernet_tutorial_0.1$ ping 192.168.1.10
          PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
          64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=7.45 ms
          64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=2.62 ms
          64 bytes from 192.168.1.10: icmp_seq=3 ttl=64 time=2.70 ms
          64 bytes from 192.168.1.10: icmp_seq=4 ttl=64 time=2.67 ms
          64 bytes from 192.168.1.10: icmp_seq=5 ttl=64 time=2.96 ms
          ^C
          --- 192.168.1.10 ping statistics ---
          5 packets transmitted, 5 received, 0% packet loss, time 4017ms
          rtt min/avg/max/mdev = 2.624/3.687/7.459/1.890 ms


          الان دستگاه ما بدون مشکل در حال کار کردن است.
          این برنامهٔ نمونهآ‌ای که ضمیمه کردم ، یک واسط WebBase برای یک و صفر کردن یک خروجی هم دارد. ( PORTD.7 )
          برای دیدنش یک مرورگر وب باز کنید و در خط آدرس آن بنویسید :
          کد:
          http://192.168.1.10/secret/


          همچین صفحهآ‌ای را خواهید دید که با کلیک روی لینک Switch on یا Switch off خروجی کنترل میشه.

          پیآ‌نوشنت :
          برای تنظیم MAC و یا IP دستگاه فایل main.c را با ادیتور متن مورد علاقهٔ خود باز کنید و خطوط شمارهٔ 29 و 31 را تنظیم کنید( و بعد هم مراحل کامپایل و پروگرام کردن را تکرار نمایید! )
          کد PHP:
          // please modify the following two lines. mac and ip have to be unique
          // in your local area network. You can not have the same numbers in
          // two devices:
          static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
          // how did I get the mac addr? Translate the first 3 numbers into ascii is: TUX
          static uint8_t myip[4] = {192,168,1,10}; 



          موفق باشید ، سوالی بود در خدمتم
          الان برم سراغ ثبتآ‌نام دانشگاه !
          فایل های پیوست شده
          چگونه هوشمندانه بپرسیم

          دیدگاه


            #35
            پاسخ : بردی برای ENC28j60

            سلام
            با تشکر از جناب رستمی
            میشه بگین این سورس که گذاشتین دقیقا چه کار می کنه؟ مثلا میشه به عنوان مبدل سریال به lan ازش استفاده کرد؟
            مداری که الان بستین با چه میکرو یی هست؟
            Don't hesitate to ask any question ..

            دیدگاه


              #36
              پاسخ : بردی برای ENC28j60

              نوشته اصلی توسط syavash_kasraeee
              میشه بگین این سورس که گذاشتین دقیقا چه کار می کنه؟ مثلا میشه به عنوان مبدل سریال به lan ازش استفاده کرد؟
              خیر ، این سورس رو نمیشه بعنوان مبدل سریال به موازی استفاده کرد!
              این فقط یک صفحهٔ وب برای کنترل یک خروجی در اختیار کاربر قرار میده ، بیشتر جنبهٔ معرفی و آموزشی داره.

              نوشته اصلی توسط syavash_kasraeee
              مداری که الان بستین با چه میکرو یی هست؟
              با ATMEGA8 ، پست اول تاپیک رو مطالعه بفرمایید..
              چگونه هوشمندانه بپرسیم

              دیدگاه


                #37
                پاسخ : بردی برای ENC28j60

                توی پست اول این تاپیک ، لینکی دادم که شماتیک توش هست.



                (برای دانلود شماتیک در فرمت PDF روی عکس کلیک کنید)
                چگونه هوشمندانه بپرسیم

                دیدگاه


                  #38
                  پاسخ : بردی برای ENC28j60

                  سلام
                  حمید جان میشه پایه های این سوکت رو ( YRC rj000002 ) رو رو شکل شماره گذاری کنی؟
                  من میدونم هر کدوم از پایه ها به چه چزی در داخل سوکت شبکه متصل هست ( البته طبق اون لینکی که قرار دادید )
                  اما نمیدونم تو شکل فیزیکی اون کدوم پایه 1 کدوم 2 کدوم آند LED کدوم کاتد LED هست.
                  میخوام برد رو کوچیک کنم و دو رو بزنم برای همین لازم به دونستن این موارد هستم.

                  دیدگاه


                    #39
                    پاسخ : بردی برای ENC28j60

                    خدمت شما :smile:

                    نمای از بالای سوکت

                    چگونه هوشمندانه بپرسیم

                    دیدگاه


                      #40
                      پاسخ : بردی برای ENC28j60

                      بنده Footprint , RJ00002 رو برای Altium Designer طراحی کردم.
                      از Library: Miscellaneous Connectors قابل دسترسی هست. البته Replace کنید.

                      از اینجا قابل دریافت است.

                      اضافه شده در تاریخ :
                      در چند روز آینده بورد دورویه رو هم جهت استفاده دوستان قرار میدم. :nerd:

                      دیدگاه


                        #41
                        پاسخ : بردی برای ENC28j60

                        آقای رستمی با عرض تشکر برای مطالب مفیدتان.
                        اگر امکان دارد شماتیک مدار را نیز به صورت PDF قراردهید اگر زحمتی نیست.
                        اگر امکان دارد لطفا توضیح دهید پس از تبدیل ATMega88 به ATMega8 در شماتیک و سورس برنامه چه تغییراتی را به وجود آوردید؟
                        می خواهم بدانم اصلا در شماتیک تغییری به وجود آورده اید یا نه؟ زیرا برطبق گفته شما ( جا نبود RFC بزارم روی برد یه زره ترک رو پیچوندم )
                        در واقع این RFC چی چیه؟ خودتون به مدار اصلی اضافه کردید یا در مدار اصلی هم این RFC وجود داره؟
                        اگه وجود داره لطفا بگید کدام قسمت از مدار RFC را تشکیل میدهند؟ ( ببخشید که در این زمینه یکم کم اطلاع یا اصلا بی اطلاع هستم! )
                        زیرا اگر بخواهم در PCB شما کوچکترین تغییری را بوجود بیاورم نه نقشه آن را دارم و نه میدانم آن قسمت از برد را چگونه پیچانده اید!!!
                        در مورد سورس هم که آنرا برای ATMega8 تغییر داده اید لطفا حتما توضیح دهید که کدام خطوط را تغییر داده اید؟ و چرا آنها را تغییر داده اید؟

                        دیدگاه


                          #42
                          پاسخ : بردی برای ENC28j60

                          با سلام

                          در مورد سورسآ‌کد باید عرض کنم که تغییر زیادی ندادم.
                          فرقی که Atmega88 با Atmega8 دارد این است که فرکانس کلاک آن توسط رجیستر CLKPR قابل تقسیم کردن است. (مخفف CLocK PRescaler است)
                          که در Atmega8 این امکان وجود ندارد و اصلا رجیستری بنام CLKPR در Atmega8 نیست، بنابراین در هنگام کامپایل برنامه برای Atmega8 کامپایلر خطا میآ‌دهد.
                          من هر جا که از این رجیستر در برنامه استفاده شده بود (که فقط یکجا در اول برنامه بود) را کامنت کردم.
                          همچین خطوطی را :
                          کد PHP:
                          // set the clock speed to 8MHz
                          // set the clock prescaler. First write CLKPCE to enable setting of clock the
                          // next four instructions.
                          CLKPR=(1<<CLKPCE);
                          CLKPR=0// 8 MHZ 


                          حالا در مورد RFC :
                          مبدل آنالوگ به دیجیتال در AVRها را باید از طریق دو پایهٔ AVCC و AGND ( حرف A در اول VCC و GND مخفف Analog است ) تغذیه کرد.
                          که معمولا همان ولتاژ VCC را که برای تغذیهآ‌ٔ میکروکنترلر استفاده میآ‌کنند به AVCC اتصال میآ‌دهند. که در شماتیک اصلی همین کار را کرده است.

                          منتها برای اینکه نویز روی ولتاژ واحد ADC کمتر شود ، از یک فیلتر LC برای اینکار استفاده میآ‌کنند.
                          مقدار سلف هم معمولا از 10 تا 100 میکروهانری انتخاب میآ‌شود که معمولا از یک RFC استفاده میآ‌شود. ( Radio Frequency choke )
                          به اینصورت :

                          حالا برای اینکه در PCB جایی برای قرار دادن یک RFC پیدا نکردم همینجوری الکی Track متصل به پایهٔ AVCC رو پیچوندم تا تشکیل یک سلف بده!
                          چگونه هوشمندانه بپرسیم

                          دیدگاه


                            #43
                            پاسخ : بردی برای ENC28j60

                            آقای رستمی سلام
                            من از برنامه آقای بن جواب گرفتم ولی بسکام مشکلات خودش رو دارد :sad:
                            برنامه شما را هم لود کردم اما جواب نگرفتم !
                            البته من نقشه را یکم تغییر دادم INT1/PD3 = INT PIN4 PD4 = CS PIN9 PD5 = LED IC = Atmega16
                            و بزبان سی مسلط هستم ولی با WinAvr کار نکردم . برنامه را تغییر دادم و کامپایل کردم بدون اشکال اما جواب نداد !؟
                            حالا پرسش این است که آیا فایل output.hex تنها کد برنامه است یا همراه با فیوز بیت هاست چون من فایل هگز را با پروگرمر
                            STK300 و با کدویژن لود کردم و دیگر اینکه در کد شما چرا CS فعال نشده ؟
                            من می خواهم از طریق winsock با پرتکل UDP Or TCP یک پاکت 100 بایتی را منتقل کنم ا گه تجربه ای دارید لطفا بفرمایید.
                            در دامه کد تغییر داده شده را ذیل بپیوست می گذارم .
                            متشکرم آرمان

                            کد:
                             
                             
                                // LED
                                /* enable PB1, LED as output */
                                DDRD|= (1<<DDD5);
                            
                                /* set output to Vcc, LED off */
                                PORTD|= (1<<PORTD5);
                            
                                // the CS on PD4
                                DDRD|= (1<<DDD4);
                                PORTD &= ~(1<<PORTD4);// CS Enable
                                
                                // the transistor on PD7
                                DDRD|= (1<<DDD7);
                                PORTD &= ~(1<<PORTD7);// transistor off
                                
                                /* Magjack leds configuration, see enc28j60 datasheet, page 11 */
                                // LEDB=yellow LEDA=green
                                //
                                // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
                                // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
                                enc28j60PhyWrite(PHLCON,0x476);
                                _delay_loop_1(50); // 12ms
                                
                                /* set output to GND, red LED on */
                                PORTD &= ~(1<<PORTD5);
                                i=1;
                            
                                   // led----------
                                    if (i){
                                        /* set output to Vcc, LED off */
                                        PORTD|= (1<<PORTD5);
                                        i=0;
                                    }else{
                                        /* set output to GND, LED on */
                                        PORTD &= ~(1<<PORTD5);
                                        i=1;
                                    }
                                    
                                    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){

                            دیدگاه


                              #44
                              پاسخ : بردی برای ENC28j60

                              نوشته اصلی توسط arman_a
                              آقای رستمی سلام
                              من از برنامه آقای بن جواب گرفتم ولی بسکام مشکلات خودش رو دارد :sad:
                              برنامه شما را هم لود کردم اما جواب نگرفتم !
                              البته من نقشه را یکم تغییر دادم INT1/PD3 = INT PIN4 PD4 = CS PIN9 PD5 = LED IC = Atmega16
                              و بزبان سی مسلط هستم ولی با WinAvr کار نکردم . برنامه را تغییر دادم و کامپایل کردم بدون اشکال اما جواب نداد !؟
                              حالا پرسش این است که آیا فایل output.hex تنها کد برنامه است یا همراه با فیوز بیت هاست چون من فایل هگز را با پروگرمر
                              STK300 و با کدویژن لود کردم و دیگر اینکه در کد شما چرا CS فعال نشده ؟
                              من می خواهم از طریق winsock با پرتکل UDP Or TCP یک پاکت 100 بایتی را منتقل کنم ا گه تجربه ای دارید لطفا بفرمایید.
                              در دامه کد تغییر داده شده را ذیل بپیوست می گذارم .
                              متشکرم آرمان
                              اگر پست من رو در مورد نحوهٔ استفاده از برنامه خوب مطالعه کرده باشید عرض کردم که شما باید جداگانه فیوزبیتها را تنظیم کنید. فایل output.hex فقط خود برنامه است.
                              LFUSE = 0x64 و HFUSE = 0xd9

                              تنظیم فیوزبیتها با Makefileی که نوشته شده بسادگی قابل انجام هست.
                              این پست رو مطالعه بفرمایید.

                              در مورد CS هم فعال و غیرفعال کردن این سیگنال بعهدهٔ enc28j60.c هست. در خطوط 35 الی 38 این سورسآ‌کد داریم :
                              کد PHP:
                              // set CS to 0 = active
                              #define CSACTIVE ENC28J60_CONTROL_PORT&=~(1<<ENC28J60_CONTROL_CS)
                              // set CS to 1 = passive
                              #define CSPASSIVE ENC28J60_CONTROL_PORT|=(1<<ENC28J60_CONTROL_CS) 


                              برای راحتی کار دو ماکروی CSACTIVE و CSPASSIVE تعریف شده که در قسمتهای مختلف سورس از اونها استفاده میشه..
                              چگونه هوشمندانه بپرسیم

                              دیدگاه


                                #45
                                پاسخ : بردی برای ENC28j60

                                قول اون مدار دورو رو که داده بودم.
                                ممکنه ایراداتی داشته باشه. لطفا بنده رو در جریان قرار بدید تا اصلاح کنم.

                                http://rapidshare.com/files/309571175/PCB2.PcbDoc

                                دیدگاه

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