با عرض سلام خدمت اساتید محترم ، من یک مدار انتقال داده با Ethernet بسته ام اما با کامپیوتر نمی تواند ارتباط برقرار کند ،من این مدار را از روی کتاب 11 پروژه با AVR بسته ام ، من تمام اتصالات را چند بار چک کردم و درست بود
اطلاعیه
Collapse
No announcement yet.
کمک در مورد انتقال داده با ethernet
Collapse
X
-
پاسخ : کمک در مورد انتقال داده با ethernet
من هم یک مدار با ATmega32 بستم که برای ارتباط از سریال استفاده میکرد. اما همونقدر که شما از مدار من اطلاع داری من هم از مدار شما و نحوه رفع اشکالتون اطلاع پیدا کردم!
این که شد یه خبر. مشکلتون چیه؟ مدارت چیه؟ برنامه اش کجاست. شماتیکی ... سورس کدی.... چه کابلی استفاده کردین؟ cross یا معمولی؟ اینا همه اش مهمه.
-
پاسخ : کمک در مورد انتقال داده با ethernet
از کابل cross استفاده کردم و چون به کانکتور rj-45 که نویسنده پیشنهاد کرده بود دسترسی نداشتم به جای فیلتر پایین گذری که داخل آن تعبیه شده از آی سی 20F001NG استفاده کردم ، برای کنترلر ethernet نیز از ENC28J60 استفاده کردم،میکرو ATmega32 و بافر HD74HC125P نیز در مدار استفاده کردم .این هم شکل مدار
کد://-------------------------------------------------------------------------- // Project : Transferring Data via Ethernet // Author : Habibollah Abdollahypoor // Chip type : ATmega32 // Program type : Application // Clock frequency : 6.250000 MHz // Memory model : Small // Data Stack size : 512 //-------------------------------------------------------------------------- #include <mega32.h> #include <stdio.h> #include <string.h> #include <delay.h> //-------------------------------------- #asm // LCD Module .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> //-------------------------------------- #define ENC28J60_SPI_PORT PORTB #define ENC28J60_SPI_DDR DDRB #define ENC28J60_SPI_MISO 6 #define ENC28J60_SPI_MOSI 5 #define ENC28J60_SPI_SCK 7 #define ENC28J60_SPI_CS 4 // ethernet buffer size #define BUFFER_SIZE 1024 #include "ethernet.h" //-------------------------------------- #define LCD_BL_ON PORTC.3 = 1 #define LCD_BL_OFF PORTC.3 = 0 #define DIPSWITCH (PIND>>4) #define PUSHBUTTON1 (!PINA.0) #define PUSHBUTTON2 (!PINA.1) //-------------------------------------- unsigned char mymac[6] = {0x11,0x22,0x33,0x44,0x55,0x66}; // MAC unsigned char myip[4] = {192,168,1,10}; // IP unsigned char time_cs = 0; // 1/100 second counter unsigned int time_s = 0; // seconds counter unsigned int counter1 = 0; // button 1 clicks unsigned int counter2 = 0; // button 2 clicks //-------------------------------------- interrupt [TIM1_OVF] void timer1_ovf_isr(void) // Timer 1 overflow ISR { static bit old_btn1 = 0, old_btn2 = 0; if (++time_cs==100) // one second elapsed { time_cs = 0; time_s ++; } if (PUSHBUTTON1) { if (!old_btn1) counter1 ++; old_btn1 = 1; } else old_btn1 = 0; if (PUSHBUTTON2) { if (!old_btn2) counter2 ++; old_btn2 = 1; } else old_btn2 = 0; } //-------------------------------------- void main(void) { uint8_t str[20]=""; // buffer to // Watchdog Timer Enabled with Prescaler: OSC/512k WDTCR=0x0D; // All I/O pins are pulled up PORTA=0xFF; DDRA=0x00; PORTB=0xFF; DDRB=0x00; PORTC=0x00; DDRC=0x04; PORTD=0xFF; DDRD=0x00; // Timer 1 interrupts every 10 ms TCCR1A=0x02; TCCR1B=0x19; ICR1H=0xF4; ICR1L=0x23; // Timer(s) Interrupt(s) initialization TIMSK=0x04; // Analog Comparator: Off ACSR=0x80; // LCD module initialization lcd_init(16); LCD_BL_ON; #asm("wdr"); // setting MAC & IP using dip-switch state mymac[0] += DIPSWITCH; myip[3] += DIPSWITCH; // initialize ethernet ethernet_init(mymac, myip, 80, 1200); // start up display lcd_gotoxy(0,0); lcd_putsf(" MAC "); lcd_gotoxy(0,1); sprintf(str, " %02x%02x-%02x%02x-%02x%02x ", mymac[0], mymac[1], mymac[2], mymac[3], mymac[4], mymac[5]); lcd_puts(str); delay_ms(2000); lcd_gotoxy(0,0); lcd_putsf(" IP "); lcd_gotoxy(0,1); sprintf(str, "%03u.%03u.%03u.%03u", myip[0], myip[1], myip[2], myip[3]); lcd_puts(str); delay_ms(3000); lcd_clear(); // Global enable interrupts #asm("sei") while (1) { #asm("wdr"); sprintf(str, "T=%u,P=%u,%u ", time_s, counter1, counter2 ); lcd_gotoxy(0,0); lcd_puts(str); // process ethernet transactions ethernet_process(); } } //-------------------------------------- unsigned char ethernet_udp(unsigned char* data, unsigned char data_len) { unsigned char str[20]; lcd_gotoxy(0,1); lcd_putsf("UDP: "); strncpy(str, data, 11); lcd_gotoxy(4,1); lcd_puts(str); // response the request sprintf(str, "T=%u,P=%u,%u\n", time_s, counter1, counter2 ); data_len = concatstr(data, 0, str); time_cs = 0; time_s = 0; return data_len; } //-------------------------------------- unsigned int ethernet_tcp(unsigned char* request, unsigned char* response) { unsigned int len; unsigned char str[20]; if (strncmpf(request, "GET /", 5)!=0) return 0; lcd_gotoxy(0,1); lcd_putsf("TCP: "); strncpy(str, request+5, 11); lcd_gotoxy(4,1); lcd_puts(str); // response the request len = concatstrf(response, 0, "HTTP/1.0 200 OK\r\n"); len = concatstrf(response, len, "Content-Type: text/html\r\n"); len = concatstrf(response, len, "Pragma: no-cache\r\n\r\n"); len = concatstrf(response, len, "<HTML><TITLE>11 AVR Projects</TITLE><BODY><CENTER>"); len = concatstrf(response, len, "<P>Transferring Data via Ethernet</P>\n<HR>"); len = concatstrf(response, len, "<P>Time = <FONT COLOR=#00FF00> "); sprintf(str, "%u", time_s); len = concatstr(response, len, str); len = concatstrf(response, len, "</FONT></P>\n"); len = concatstrf(response, len, "<P>Counter_1 = <FONT COLOR=#0000FF> "); sprintf(str, "%u", counter1); len = concatstr(response, len, str); len = concatstrf(response, len, "</FONT></P>\n"); len = concatstrf(response, len, "<P>Counter_2 = <FONT COLOR=#FF0000> "); sprintf(str, "%u", counter2); len = concatstr(response, len, str); len = concatstrf(response, len, "</FONT></P>\n"); len = concatstrf(response, len, "<P><A HREF=\".\">refresh</A><P></CENTER><HR>\n"); time_cs = 0; time_s = 0; return len; }
دیدگاه
-
پاسخ : کمک در مورد انتقال داده با ethernet
این مدار ارتباط بین میکرو و ENC28j60 را انجام داد اما از ENC28j60 به 20F001NG مشکل دارد.این مدار را توسط cross cable به کامپیوتر وصل می کنیم و باید دفعات فشرده شدن کلید را در کامپیوتر نشان دهد.در مدار من روی lcd اطلاعات را نشان می دهد و این به معنی ارتباط درست بین میکرو و ENC28j60 است
دیدگاه
دیدگاه