![]() |
|
|
Своими руками Завершенные и текущие проекты, хард & софт |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Была задачка, сделать реально копеечные устройства, которые могли бы
плеваться в ethernet пакетиками с собранной с датчиков информацией. IgorPlugUDP - не интересно совсем, там пакет заранее готовый шлётся, с единственным байтом. Да и AVR там нужен здоровенный, ибо маленьких на 20МIPS нету. FPGA тоже неинтересно. Ставить ENC28J60 для таких вещей - глупость. Пришлось придумать как слать ethernet пакеты прямо из PIC'а Собственно, задачка решена, всё оказалось проще простого, кварц на 10 МГц + PIC18F1320 + 74AC86 + резистор 100 ом + трансформатор на колечке + RJ45 мама. Упрощённая схема (только сеть) - в аттаче. Софтом генерируются NLP, чтобы линк загорелся. Софтом же генерируется фрейм - EUSART включается на 10МГц тактовой и несложным кодом, который плотно упихивает байты в TXREG, туда отправляется весь ethernet фрейм. В общем, 10Base-T на передачу - чтобы с датчиков по UDP слать инфу - просто чудесно. Сигнал на выходе - изумительный, как в учебнике. чистенький и правильный. Но есть одна проблема - пакеты теряются. В принципе, это не важно, потому как даже потеря половины пакетов некритична в данном применении, но хотелось бы понять, почему это происходит. Сам пакет с FCS и пр. - правильный, иначе сыпались бы ошибки. Но ошибок нет ни единой, за сутки работы. Просто сетевуха или свитч (в зависимости от того, куда воткнуто - я кучу устройств перепробовал - все одинаково себя ведут) не принимает пакет периодически. Пакет есть, хороший, но принимать его всякие устройства отказываются. Я грешил и на кварц, и на трансформатор, да на всё что угодно. По 100 раз проверил, перечитал 802.3 - не помогает. Пакеты всё равно теряются. Может ли быть, что режим HSPLL генератора даёт не частоту кварца умноженную на 4, а слегка меньше или больше? Или, может быть 10Base-T Half Duplex требует помимо Normal Link Pulse и собственно фрейма ещё какие-то сигналы, чтобы на пустой линии принимать пакеты? Если вылечить этот единственный косяк - то будет весьма дешёвое ethernet-решение, которым не только всякую температуру можно будет собирать, но и чего-нибудь быстро меняющееся или требующее гарантированной доставки пактетов. Собственно код: Код:
/*************************************************************************** * Copyright (C) 2009 by Stanson * * GPL v3 code, read COPYING file * * * * Ethernet 10BASE-T protocol * * * * Bit time 100 ns * * * * Logical 0 - Hi to Low * * Logical 1 - Low to Hi * * * * Ethernet packet structure * * * * [ Preamble ] 7 bytes 0x55 * * [ SFD ] 1 byte 0xD5 Start of Frame Delimiter * * [ Destination MAC ] 6 bytes of destination MAC * * [ Source MAC ] 6 bytes of source MAC * * [ Type / Length ] 2 bytes of type or length * * [ Payload ] 46 or more bytes of data * * [ FCS ] 4 bytes of CRC32, 31 bit sent first * * * * After packet goes TD_IDL pulse - Hi for 300 ns * * * * EUSART in syncronous master mode output data to DT/CK pins * * Baudrate is set to 10MHz * * using XOR gate on this pins we can get required Manchester encoding * * * * To keep link alive issue Normal Link Pulse (Hi for 100ns) every 8-24 ms * * * **************************************************************************/ #include <pic18fregs.h> #include "hardware.h" #include "main.h" #include "ethernet_tx.h" #define SET_TMR1_100nS(x) { TMR1H = HIGH(-(x)); TMR1L = LOW(-(x)); } #define ETX_PAYLOAD_SIZE 46 /* minimum frame payload size as of 802.3 3.1.1 */ #define ETX_IP_HEADER_SIZE 20 #define ETX_UDP_HEADER_SIZE 8 #define ETX_DATA_SIZE ( ETX_PAYLOAD_SIZE - ETX_IP_HEADER_SIZE - ETX_UDP_HEADER_SIZE ) #define ETX_DATA_OFFSET ( ETX_IP_HEADER_SIZE + ETX_UDP_HEADER_SIZE ) #define ETX_UDP_DATAGRAM_SIZE ( ETX_UDP_HEADER_SIZE + ETX_DATA_SIZE ) #define ETX_FRAME_SIZE ( 8 + 14 + ETX_PAYLOAD_SIZE + 4 ) #define ETX_NLP_PERIOD 16 /* 16 ms normal link pulse period */ typedef union _ethernet_frame { struct { byte pre[8]; /* preamble */ byte dst[6]; /* destination MAC */ byte src[6]; /* source MAC */ byte type[2]; /* type or size */ byte payload[ETX_PAYLOAD_SIZE]; dword crc; }; byte raw[ETX_FRAME_SIZE]; } ethernet_frame; #pragma udata bank0 etx_frame ethernet_frame etx_frame; byte etx_cnt; byte etx_nlp; const byte etx_header[] = { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5, /* preamble */ 0x00, 0x11, 0x11, 0x3F, 0x4A, 0x37, /* destination MAC */ 0x00, 0xDE, 0xAD, 0xBE, 0xEF, 0x00, /* source MAC */ 0x08, 0x00, /* EtherType (IPv4) */ /* IPv4 header */ 0x45, /* Version, Length */ 0x00, /* Type of Service */ 0x00, ETX_PAYLOAD_SIZE, /* IP data length */ 0x00, 0x00, /* Packet counter */ 0x00, /* IP flags, fragment offset */ 0x00, /* IP offset */ 0x40, /* Time To Live */ 0x11, /* IP protocol (UDP) */ 0x00, 0x00, /* IP header checksum */ 192, 168, 253, 200, /* Source IP */ 192, 168, 253, 16, /* Destination IP */ /* UDP header */ 0x04, 0x00, /* Source UDP port */ 0x04, 0x00, /* Destination UDP port */ 0x00, ETX_UDP_DATAGRAM_SIZE, /* UDP datagram size */ 0x00, 0x00 /* UDP pseudoheader checksum */ }; void etx_crc32( void ) { unsigned long crc; byte i, j; crc = ~0; /* First 32 bits of frame is complemented */ for (i = sizeof(etx_frame.pre); i < sizeof(etx_frame) - sizeof(etx_frame.crc); i++) { crc ^= etx_frame.raw[i]; for (j = 0; j < 8; j++) { crc >>= 1; if(STATUSbits.C) crc ^= 0xEDB88320; } } etx_frame.crc = ~crc; /* result is complemented */ } void etx_ip_checksum( void ) { unsigned long sum; word w; byte i; etx_frame.payload[10] = 0; etx_frame.payload[11] = 0; for( sum = 0, i = 0; i < ETX_IP_HEADER_SIZE; i+=2 ) { w = etx_frame.payload[ i ]; w <<= 8; w |= etx_frame.payload[ i + 1 ]; sum += w; } while( w = sum >> 16 ) { sum = ( sum & 0xFFFF ) + w; } sum = ~sum; etx_frame.payload[10] = ( sum >> 8 ) & 0xFF; etx_frame.payload[11] = sum & 0xFF; } void etx_init( void ) { byte i; /* EUSART init */ BAUDCTL = 0x00; /* 10MHz baudrate */ SPBRGH = 0x00; SPBRG = 0x00; TXSTA = 0xB0; /* master, 8-bit, TX enabled, synchronous */ RCSTA = 0x00; for( i = 0; i < sizeof(etx_frame.payload); i++ ) { etx_frame.payload[i] = 0; } /* fill header */ for( i = 0; i < sizeof(etx_header); i++ ) { etx_frame.raw[i] = etx_header[i]; } /* timer2 for NLP */ T1CON = 0x81; /* Fosc/4 clock 100ns, 1:1 prescaler, enabled */ SET_TMR1_100nS( 10000 - 22 ); /* 1000 uS period */ IPR1bits.TMR1IP = 0; PIR1bits.TMR1IF = 0; PIE1bits.TMR1IE = 1; etx_nlp = ETX_NLP_PERIOD; } void etx_send_data( void ) { etx_ip_checksum(); etx_crc32(); INTCONbits.GIE = 0; /* prepare RB1 and RB4 for Hi signal after turning off EUSART */ ETX_CLK = 0; ETX_DATA = 1; /* send frame */ etx_cnt = sizeof(etx_frame) - 1; _asm LFSR 0, _etx_frame _endasm; /* turn on EUSART */ _asm BSF _RCSTA, 7 _endasm; /* and feed EUSART with bytes of frame */ _asm MOVF _POSTINC0, W _endasm; _asm MOVWF _TXREG _endasm; _asm BSF _PORTB, 0 _endasm; /* 1 cycle */ _asm _etx_ram: NOP _endasm; /* 1 cycle [ b0 ] <---------+ */ _asm NOP _endasm; /* 1 cycle [ b1 ] | */ _asm NOP _endasm; /* 1 cycle [ b2 ] | */ _asm MOVF _POSTINC0, W _endasm; /* 1 cycle [ b3 ] | */ _asm MOVWF _TXREG _endasm; /* 1 cycle [ b4 ] | */ _asm DECF _etx_cnt, F, B _endasm; /* 1 cycle [ b5 ] | */ _asm BNZ _etx_ram _endasm; /* 1/2 cycle [ b6 ] <if !0> [ b7 ] */ _asm NOP _endasm; /* 1 cycle [ b7 ] */ /* wait while last byte come out and turn off EUSART */ _asm NOP _endasm; /* 1 cycle [ b0 ] */ _asm NOP _endasm; /* 1 cycle [ b1 ] */ _asm NOP _endasm; /* 1 cycle [ b2 ] */ _asm NOP _endasm; /* 1 cycle [ b3 ] */ _asm NOP _endasm; /* 1 cycle [ b4 ] */ _asm NOP _endasm; /* 1 cycle [ b5 ] */ _asm NOP _endasm; /* 1 cycle [ b6 ] */ _asm BCF _RCSTA, 7 _endasm; /* 1 cycle [ b7 ] */ /* generate TP_IDL (300ns of Hi) */ _asm NOP _endasm; /* 1 cycle */ _asm NOP _endasm; /* 1 cycle */ _asm BCF _PORTB, 0 _endasm; /* 1 cycle */ PIR1bits.TMR1IF = 0; etx_nlp = ETX_NLP_PERIOD; INTCONbits.GIE = 1; } void etx_process( void ) { /* send 100ns Normal Link Pulse every 16 ms */ SET_TMR1_100nS( 10000 - 22 ); /* 1000 uS period */ PIR1bits.TMR1IF = 0; if( --etx_nlp ) return; ETX_CLK = 0; ETX_DATA = 1; _asm BSF _PORTB, 0 _endasm; /* 1 cycle */ _asm BCF _PORTB, 0 _endasm; /* 1 cycle */ etx_nlp = ETX_NLP_PERIOD; } Последний раз редактировалось Stanson; 11.10.2010 в 07:50. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
|
![]()
А зачем гемор себе устраивать из-за 70 рублей?
Цитата:
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Гемор - это когда из 100 ног микрухи используется 4. Вообще, это даже не гемор, это маразм.
Если уж речь о TQFP - то накой мне в таком корпусе убогий PIC дался? Я уж лучше человеческий ARM поставлю со всеми пирогами, раз уж плату разводить. Не, были бы девайсы типа PIC16F675 со встроеным контроллером Ethernet - не было бы вопросов. Но что-то я не встречал ничего в DIP с количеством ног не более 18 и с контроллером. Появятся - тогда приходите и ценники вывешивайте. Я, кстати, не спрашивал ничего про то, какие есть девайсы с контроллером ethernet. Я про них сам знаю, и Microchip'овская продукция в этом сегменте мне совершенно неинтересна. Я спрашивал о возможных причинах потерь пакетов в вышеописанной ситуации. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
|
![]() Цитата:
![]() А разве не маразм использовать интернет интерфейс для опроса датчиков температуры? ![]() ![]()
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
И какой же, интересно, интерфейс позволит отсылать состояние датчика в любую точку земного шара, да ещё и используя уже имеющуюся сетевую инфраструктуру?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
|
![]()
Ага, и сотня таких датчиков засрёт локалку напрочь. Если честно то нет большого смысла от датчика у которого нельзя спросить: "кто ты?", "повтори", "сколько градусов?" и подобное... А тупа слать пакеты хз куда и примет ли их сервак вот это маразм...
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость. |
![]() |
![]() |
![]() |
#7 |
Senior Member
|
![]()
Интернет, но не так тупо организованный...
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость. |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Не, конечно, если сеть настолько плоха, что требуются к датчику запросы. - то тут может много набежать. Но если сеть нормальная - зачем что-то для датчика посылать? Он выдаёт раз в секунду данные, идентификатор его - в пакете, в виде IP адреса, что у него спрашивать? UDP, между прочим - он для того и есть, чтобы слать пакеты х.з. куда и ничего не спрашивать, не ждать подтверждения и т.п. Странно, что человек дающий советы насчёт того, как правильно ethernet'ы на PIC'ах делать, таких вещей не знает. Последний раз редактировалось Stanson; 11.10.2010 в 09:46. |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
|
![]() Цитата:
модуль trt непосредственно воткнут в комп. - для размышления и мне и другим. Это я использовал пример микрочиповского шторма. |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Кроме того, нормальный комп через нормальную верёвку нормальный шторм, с положенным interframe gap через 10Base-T принять должен без потерь. Если нет gap'а или пакеты кривенькие - то, конечно, бывает вплоть до зависания сетевухи или свитча. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#13 |
Super Moderator
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 45
Сообщений: 3,334
Вес репутации: 2341/103 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
а что мешает организовать сеть (can, rs485...) на этих мелких процах и поставить один нормальный мост на TCP/IP, который уже полноценно будет заниматься сборкой/рассылкой?
|
![]() |
![]() |
![]() |
#14 | |
Super Moderator
|
![]()
Помочь к сожалению, ничем не могу, с ethernet не работал, но это круто, решение понравилось. Проблемы с PLL контроллера можно исключить если подать сигнал снаружи. Но я думаю все же он тут не причем.
Цитата:
__________________
даташит читать до того , а не после |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Регистрация: 09.02.2009
Адрес: Недалеко от Пятигорска
Возраст: 48
Сообщений: 618
Вес репутации: 1419/60 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Может и в PIC18F1320 эта же пробема, хотя еррата молчит. |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Но. Пакет с лишним битом дал бы ошибку на принимающей стороне - frame error. Но ошибок нет - вообще никаких. Либо пакет принимается, либо он вообще игнорируется, как будто частота совсем другая. |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Регистрация: 30.09.2008
Сообщений: 1,500
Вес репутации: 2750/83 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
А вот Вы будете смеятццо, Ё, все же страшно заняты.. комуникашка с устройством это либо в пятом квартале, либо http port 80 server на устройстве (Ё), or fttp, либо сам пиши вааще всё (Ё, если бы ябыникогдабы не ошибался, (бы) на кой хер (бы) мне работать (бы) по найму? (бы) Ё)
|
![]() |
![]() |
![]() |
#19 | |
Super Moderator
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 45
Сообщений: 3,334
Вес репутации: 2341/103 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
либо пьян, либо его аккаунт албанцы захватили... |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Регистрация: 30.09.2008
Сообщений: 1,500
Вес репутации: 2750/83 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
![]() ![]() А проблема реальная, нихрена невозможно добиться для поддержки железа, заняты все (Ё)(как выяснилось, HTTP - это просто) |
|
![]() |
![]() |
![]() |
#21 |
Junior Member
Регистрация: 11.10.2010
Возраст: 10
Сообщений: 7
Вес репутации: 100/0 ![]() ![]() |
![]()
Прототол UDP не гарантирует доставку пакетов. Может в этом "прикол"?
Пробовал в идеальном случае девайс->кросовый шнурок->комп? |
![]() |
![]() |
![]() |
#22 | |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Он не гарантирует в том смысле, что протоколом не предусмотрено какое-либо подтверждение приёма пакета или какие-то действия в случае пропажи пакета. В отличии от TCP, например.
Но это не значит, что пакеты обязаны теряться на чистой и незагруженной линии. Цитата:
Причём ведь все пакеты, и потерянные и принятые генерируются одним и тем же кодом, так что на код грешить вроде причин нету. Был бы код кривой - не было бы принятых пакетов вообще, в ethernet с этим строго. |
|
![]() |
![]() |
![]() |
#23 |
Senior Member
|
![]()
2 Stanson
Выложи либо тут, либо пришли мне (qbit[ DOG] inbox[POINT] ru) лог сниффера, например, Wireshark. Рекомендую поставить фильтр на твой хост: “host x.x.x.x”, где x.x.x.x - IP твоего девайса. Посниффери минут 15-20, чтоб набрать ~10^3 пакетиков. Далее подскажу в каком направлении двигаться. PS: Да, важное: схема такая – писюк, твой девайс. На писюке отдельный Eth адаптер для этих целий с одним IP (если есть другие ip на этом Eth - убрать). Одна подсеть! Последний раз редактировалось bzx; 12.10.2010 в 01:54. |
![]() |
![]() |
![]() |
#24 | |
Senior Member
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/42 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
4 пакета в секунду, например: Код:
# tcpdump -nxxevvi eth0 udp port 65000 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 10:18:25.775512 00:de:ad:be:ef:00 > 00:11:11:3f:4a:37, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto: UDP (17), length: 46) 192.168.253.200.1024 > 192.168.253.16.65000: [no cksum] UDP, length 18 0x0000: 0011 113f 4a37 00de adbe ef00 0800 4500 0x0010: 002e 0000 0000 4011 fe94 c0a8 fdc8 c0a8 0x0020: fd10 0400 fde8 001a 0000 0f12 1900 1448 0x0030: 01a3 007a 0100 0100 0000 0000 10:18:26.320441 00:de:ad:be:ef:00 > 00:11:11:3f:4a:37, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto: UDP (17), length: 46) 192.168.253.200.1024 > 192.168.253.16.65000: [no cksum] UDP, length 18 0x0000: 0011 113f 4a37 00de adbe ef00 0800 4500 0x0010: 002e 0000 0000 4011 fe94 c0a8 fdc8 c0a8 0x0020: fd10 0400 fde8 001a 0000 0f12 1900 1447 0x0030: 01a3 007a 0100 0100 0000 0000 10:18:26.865131 00:de:ad:be:ef:00 > 00:11:11:3f:4a:37, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto: UDP (17), length: 46) 192.168.253.200.1024 > 192.168.253.16.65000: [no cksum] UDP, length 18 0x0000: 0011 113f 4a37 00de adbe ef00 0800 4500 0x0010: 002e 0000 0000 4011 fe94 c0a8 fdc8 c0a8 0x0020: fd10 0400 fde8 001a 0000 0f12 1900 144a 0x0030: 01a3 007a 0100 0100 0000 0000 10:18:27.410063 00:de:ad:be:ef:00 > 00:11:11:3f:4a:37, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto: UDP (17), length: 46) 192.168.253.200.1024 > 192.168.253.16.65000: [no cksum] UDP, length 18 0x0000: 0011 113f 4a37 00de adbe ef00 0800 4500 0x0010: 002e 0000 0000 4011 fe94 c0a8 fdc8 c0a8 0x0020: fd10 0400 fde8 001a 0000 0f12 1900 1449 0x0030: 01a3 007a 0100 0100 0000 0000 10:18:27.954995 00:de:ad:be:ef:00 > 00:11:11:3f:4a:37, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto: UDP (17), length: 46) 192.168.253.200.1024 > 192.168.253.16.65000: [no cksum] UDP, length 18 0x0000: 0011 113f 4a37 00de adbe ef00 0800 4500 0x0010: 002e 0000 0000 4011 fe94 c0a8 fdc8 c0a8 0x0020: fd10 0400 fde8 001a 0000 0f12 1900 144a 0x0030: 01a3 007a 0100 0100 0000 0000 Ну нет ошибок или кривых пакетов. Ни единого. Есть только непринятые вообще никак пакеты. Проигнорированные железом первого приёмника. Никаких ошибок при этом на первом приёмнике нет. |
|
![]() |
![]() |
![]() |
#25 | |
Senior Member
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/102 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Что если попробовать так? |
|
![]() |
![]() |
![]() |
Метки |
ethernet, eusart, pic18f1320, udp |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопросы по Ethernet устройствам... | Timik | Общетехнические вопросы | 17 | 25.06.2011 19:50 |