Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 12.10.2010, 21:54   #51
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от Stanson Посмотреть сообщение
Не нужны.
В стандарте 802.3, который описывает в том числе и физический уровень ethernet по витой паре, вполне внятно сказано - сигнал должен быть 2.2-2.8 В на нагрузке в 100 ом на другом конце линии.
Что и делаем. Нагрузка 100 ом, последовательно с ней резюк 100 ом. Размах на выходах - 5 вольт, делится пополам, на нагрузке имеем 2.5 В.
Тут же переменка, а не постоянка.
Важно еще передаточное соотношение трансформатора, если в данной схеме использовать пушпул то амплитуда возрастет вдвое хотя не знаю надо ли.
DL36 вне форума   Ответить с цитированием
Старый 12.10.2010, 21:58   #52
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Важно еще передаточное соотношение трансформатора, если в данной схеме использовать пушпул то амплитуда возрастет вдвое хотя не знаю надо ли.
открытого стока всё равно нету - онож свободное плечо выше питания должно махать
IgorV вне форума   Ответить с цитированием
Старый 12.10.2010, 21:58   #53
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
И там наверно демпферные цепочки прописаны.
Не-а.

Цитата:
The output signal Vo, is defined at the output of the twisted-pair model as shown in Figure 14–8. The TD transmitter shall provide equalization such that the output waveform shall fall within the template shown in Figure 14–9 for all data sequences. Voltage and time coordinates for inflection points on Figure 14–9 are given in Table 14–1. (Zero crossing points are different for external and internal MAUs. The zero crossings depicted in Figure 14–9 apply to an external MAU.) The template voltage may be scaled by a factor of 0.9 to 1.1 but any scaling below 0.9 or above 1.1 shall not be allowed. The recommended measurement procedure is described in B.4.3.1. Time t = 0 on the template represents a zero crossing, with positive slope, of the output waveform. During this test the twisted-pair model shall be terminated in 100 Ω and driven by a transmitter with a Manchester-encoded pseudo-random sequence with a minimum repetition period of 511 bits.
Ну и дана глазковая диаграмма.
Т.е. никаких требований к передатчику вообще нет, лишь бы он на нагрузке правильную форму давал.

Цитата:
10% потерь на пустой линии это много, хотя возможно это и коллизии.
О том и речь, что много. Я бы понял, если бы вообще не работало, либо потери были бы, скажем 1 на 10 тыс пакетов.

Последний раз редактировалось Stanson; 12.10.2010 в 22:14.
Stanson вне форума   Ответить с цитированием
Старый 12.10.2010, 22:00   #54
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от Stanson Посмотреть сообщение
Ну вообще-то, если требуху логики нарисовать - то там КМОП мост в чистом виде получится.
Не совсем так, зависит от внутреннего порога переключения а он там не равен половине питания. Игорь шит посмотрел и согласился.
Использовать EPWM красивше будет и по два корпуса логики в параллель. И проблема с разным временем в 1 и 0 отпадет.
DL36 вне форума   Ответить с цитированием
Старый 12.10.2010, 22:01   #55
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от IgorV Посмотреть сообщение
На счет любого не, синхронный режим в dsPIC нету например
Ну, значит, любого PIC с Fosc/4 >= 10МГц и синхронным режимом в USART.
Stanson вне форума   Ответить с цитированием
Старый 12.10.2010, 22:04   #56
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от IgorV Посмотреть сообщение
открытого стока всё равно нету - онож свободное плечо выше питания должно махать
Не обязательно, выход же подвязан к питанию и разница будет небольшая.
DL36 вне форума   Ответить с цитированием
Старый 12.10.2010, 22:09   #57
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Не совсем так, зависит от внутреннего порога переключения а он там не равен половине питания. Игорь шит посмотрел и согласился.
Использовать EPWM красивше будет и по два корпуса логики в параллель. И проблема с разным временем в 1 и 0 отпадет.
А проблемы нету, на самом деле.
Вот глазковая диаграмма, в аттаче из стандарта. Там допуски на время вполне приличные, почти по 10 нс в обе стороны.

Я ж осциллом смотрел, как положено, на нагрузке - сигнал изумительно вписывается в нижеприведённый глаз. Тютелька в тютельку. Если и есть искажения, обусловленные вышеописанными причинами, то они не заметны вообще.

Сигнал проседает до 1 вольта, разумеется, как и на диаграмме. 10МГц, однако.
На импульсы NLP и на TP_IDL - тоже есть картинки - там максимум в 3.1 В, минимум в 585 мВ и реально, 300 нс TP_IDL до 2 В взлетает.

В общем, не в формирователе сигнала проблема, это точно.
Либо софт, либо логика работы 10Base-T Half Duplex.
Миниатюры
10Base-T_eye.png  
Stanson вне форума   Ответить с цитированием
Старый 12.10.2010, 22:12   #58
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от Stanson Посмотреть сообщение
О том и речь, что много. Я бы понял, если бы вообще не работало, либо потери были бы, скажем 1 на 10 тыс пакетов.
Вот я и пытаюсь высказать возможные причины.
Попробовал бы в таком порядке
- пушпул используя EPWM и формируя Манчестер с каждой стороны транса двумя элементами, амплитуда повысится может и будет нормально.
- попробовать засинхронизировать осциллограф и началом передачи пакета, может там действительно коллизии, хотя вроде много. Но там же две пары, я так понимаю прием и передача.
DL36 вне форума   Ответить с цитированием
Старый 12.10.2010, 22:18   #59
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Вот я и пытаюсь высказать возможные причины.
Попробовал бы в таком порядке
- пушпул используя EPWM и формируя Манчестер с каждой стороны транса двумя элементами, амплитуда повысится может и будет нормально.
А данные-то я как туда гнать буду? Без данных пакет проигнорируется однозначно. Мне надо преамбулу хотя бы правильную и FCS в конце обязательно.

Цитата:
- попробовать засинхронизировать осциллограф и началом передачи пакета, может там действительно коллизии, хотя вроде много. Но там же две пары, я так понимаю прием и передача.
Разумеется 2 пары. Если что и есть кроме моего сигнала - то только во второй. В общем, надо будет всё-же принудительно Full-Duplex на приёмной стороне попробовать.
Stanson вне форума   Ответить с цитированием
Старый 12.10.2010, 22:33   #60
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Важно еще передаточное соотношение трансформатора, если в данной схеме использовать пушпул то амплитуда возрастет вдвое хотя не знаю надо ли.
Трансформатор 1:1, по 20 витков на колечке диаметром 7.15мм и сечением 2х1.5мм, с магнитной проницаемостью 2000. Индуктивность обмоток - по 370мкГн (требуют не менее 350 мкГн).

Если кто хочет поиграться - для экспериментов трансформатор вообще не нужен. Можно прямо в витуху через 100 ом сигнал пускать - на приёмнике всё равно трансформатор есть. А вот для нормальной работы - транс обязателен. Это один из огромных плюсов Ethernet - полная гальваническая развязка.

Последний раз редактировалось Stanson; 12.10.2010 в 22:52.
Stanson вне форума   Ответить с цитированием
Старый 12.10.2010, 23:17   #61
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от Stanson Посмотреть сообщение
Трансформатор 1:1, по 20 витков на колечке диаметром 7.15мм и сечением 2х1.5мм, с магнитной проницаемостью 2000. Индуктивность обмоток - по 370мкГн (требуют не менее 350 мкГн).
Это с учетом отвода от середины? первичная 10+10 и вторичная 20?. Или 20+20 и вторичная 20?
DL36 вне форума   Ответить с цитированием
Старый 12.10.2010, 23:36   #62
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Это с учетом отвода от середины? первичная 10+10 и вторичная 20?. Или 20+20 и вторичная 20?
У меня нет отвода от середины. 20 витков одна обмотка и 20 другая. Всё.
На схеме - тупо первое попавшееся гнездо с трансом.
Я своих трансов намотал, ибо под руками не оказалось сетевух ненужных, а купить трансы - это куда-то надо ехать и т.п.
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 00:12   #63
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от Stanson Посмотреть сообщение
А данные-то я как туда гнать буду? Без данных пакет проигнорируется однозначно. Мне надо преамбулу хотя бы правильную и FCS в конце обязательно.
Пролистал ШИТ по диагонали, вроде никаких ограничений нет.
RB2, RB3 PWM выходы пока модуль не включен используй как RB1, RB4.
Когда модуль включен на RB2, RB3 будут противофазные сигналы если их сложить с выходом USARTа то получится манчестер, как мне кажется. Пускай и без пушпула у меня нарисованного. Но на частоту грешить не придется.
Миниатюры
ezernet.PNG  
DL36 вне форума   Ответить с цитированием
Старый 13.10.2010, 04:35   #64
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Ща все будут ржать, но я победил потери.

Стандарты, как обычно - стандартами, а вот реальность оказалась немного другой.

Дело было в резисторе.
Не ржите.
100 ом дают соответствующую стандарту картину.
Однако, чувствительность приёмников оказалась не такой, как положено.
Я уменьшил резистор до 75 ом - и о чудо. D-Link DIR-320 увидел ВСЕ пакеты. Ни единой потери за 10 минут при 4-х пакетах в секунду.
Однако, на сетевухе ноута потери оставались.
68 ом устранили потери и на ноутбуке.
Дольше всех держался древнючий 8-ми портовый свитчик Planet FSD-803.
однако 33 ома решили и эту проблему.

Забавно, но даже с 33 омами сигнал не выбивается из норм. Видимо у Интеграловской IN74AC86 достаточно приличное сопротивление у выходных КМОП-транзисторов.

Интересно поэкспериментировать и с другими железками, и ещё попробовать в качестве выходного буфера поставить всякие там 74F86, 74AHCT86 и пр.

Но в общем, и целом всё получилось.
Работает идеально, уже пару часов ни одного пакета не потерялось.

В общем, решение из начала топика оказалось весьма удачным и теперь даже вполне безглючным
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 05:07   #65
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Пролистал ШИТ по диагонали, вроде никаких ограничений нет.
RB2, RB3 PWM выходы пока модуль не включен используй как RB1, RB4.
Когда модуль включен на RB2, RB3 будут противофазные сигналы если их сложить с выходом USARTа то получится манчестер, как мне кажется. Пускай и без пушпула у меня нарисованного. Но на частоту грешить не придется.
А PWM я не стал пробовать, хотя идею оценил. Только есть вопрос - как сделать, чтобы высокий уровень на P1A был в тактах Q4 и Q1? Это надо потому что очередной бит на выходе USART появляется в начале такта Q4 и длится ровно один цикл. Т.е. чтобы манчестер получился, в Q4 и Q1 нужен один уровень, а в Q2 и Q3 - другой. CK USART'а как раз так и делает, а вот сможет ли PWM?

Насколько я понимаю оно может высокий уровень установить на P1A только в Q1, Q1+Q2, Q1+Q2+Q3 (PR2 = 0, CCPR1L = 0 и Duty Cycle в CCP1CON<5:4>)...
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 05:36   #66
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Вот вам для полного счастья ещё тупенький демон на перле, для собирания
посланных PIC'ом UDP пакетов.
После запуска работает в фоне, слушая указанный UDP порт.
Для нескольких устройств шлющих данные на один IP достаточно одного демона на одном порту - читайте доки, как узнать адрес отправителя UDP пакета, ну и потом сортируйте по отправителю.

Код:
#!/usr/bin/perl -w                 

use strict;
use IO::Socket;
use POSIX qw(setsid);  

my $server = IO::Socket::INET->new(LocalPort => 65000, Proto => "udp") 
    or die "Can't create UDP server: $@";                              

my $datagram;

my $pid = fork();

exit if $pid;

setsid;
umask 0022;

while( $server->recv( $datagram, 18 ) )
{
    # Каждый раз, когда от PIC'а приезжает пакет
    # тут в $datagram оказываются 18 байт которые приехали в пакете
    # от PIC'a. В PIC'е это байты от etx_frame.payload[ETX_DATA_OFFSET + 0]
    # до etx_frame.payload[ETX_DATA_OFFSET + 17] в котрые PIC может положить
    # любые данные. Если 18 байт мало, то можно увеличить размер пакета.
    # через ETX_PAYLOAD_SIZE. Увеличивать payload можно до 1500 байт
    # 28 байт займёт IP + UDP header, остальное - ваше, если в PIC'e памяти хватит.
    # Меньше 46 байт payload делать нельзя - пакеты пропадут!

    # В общем, с данными в $datagram тут можно делать что угодно -
    # что-то вычислять, писать в базу, сохранять в файл и т.д.
}
Да, разумеется, если у девайса есть какой-то интерфейс с пользователем, то можно предусмотреть настройку и сохранение в EEPROM MAC, IP и порта UDP как девайса, так и получателя, ибо пакет весь лежит в RAM, из статической таблицы он только инициализируется, чтобы всякие поля типа ethernet type и пр
не заполнять в коде.

Последний раз редактировалось Stanson; 13.10.2010 в 05:56.
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 07:04   #67
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Пролистал ШИТ по диагонали, вроде никаких ограничений нет.
RB2, RB3 PWM выходы пока модуль не включен используй как RB1, RB4.
Когда модуль включен на RB2, RB3 будут противофазные сигналы если их сложить с выходом USARTа то получится манчестер, как мне кажется. Пускай и без пушпула у меня нарисованного. Но на частоту грешить не придется.
еще раз грю, нет открытых стоков - за питание центральный вывод цеплять нет смысла, а резистор как у автора цеплять последовательно одному из выходов.

2 Stanson: ну тут вероятность 50% не читая шита. Если будет смещение на 1/4 цикла проца. Если на 1/2 то просто начало-конец транса махнуть на первичке(например)

просто раз в одном корпусе все-равно 4 элемента, то умощнение только в плюс.
IgorV вне форума   Ответить с цитированием
Старый 13.10.2010, 08:49   #68
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Ethernet за 3 копейки без ENC

Поздравляю!

Дело было таки в амплитуде.

Цитата:
Сообщение от Stanson Посмотреть сообщение
А PWM я не стал пробовать, хотя идею оценил. Только есть вопрос - как сделать, чтобы высокий уровень на P1A был в тактах Q4 и Q1? Это надо потому что очередной бит на выходе USART появляется в начале такта Q4 и длится ровно один цикл. Т.е. чтобы манчестер получился, в Q4 и Q1 нужен один уровень, а в Q2 и Q3 - другой. CK USART'а как раз так и делает, а вот сможет ли PWM?

Насколько я понимаю оно может высокий уровень установить на P1A только в Q1, Q1+Q2, Q1+Q2+Q3 (PR2 = 0, CCPR1L = 0 и Duty Cycle в CCP1CON<5:4>)...
Теоретически это ариант Q1+Q2 сдвинутый на такт, как сделать не знаю.
DL36 вне форума   Ответить с цитированием
Старый 13.10.2010, 08:54   #69
oll
Member
 
Регистрация: 26.08.2007
Возраст: 55
Сообщений: 39
Вес репутации: 102/0
oll will become famous soon enougholl will become famous soon enough
По умолчанию Re: Ethernet за 3 копейки без ENC

Спасибо автору - очень интересно. Если можно выложите весь проект, включая:
hardware.h
main.h
ethernet_tx.h
oll вне форума   Ответить с цитированием
Старый 13.10.2010, 10:26   #70
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от DL36 Посмотреть сообщение
Поздравляю!

Дело было таки в амплитуде.


Теоретически это ариант Q1+Q2 сдвинутый на такт, как сделать не знаю.
кстати легко !!!! dyuty сделать не 50% а 1/4 или 3/4 и добавить delay 1/4
IgorV вне форума   Ответить с цитированием
Старый 13.10.2010, 12:01   #71
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Цитата:
Сообщение от oll Посмотреть сообщение
Спасибо автору - очень интересно. Если можно выложите весь проект, включая:
hardware.h
main.h
ethernet_tx.h
hardware.h не нужен.
Остальное - вот:

ethernet_tx.h
Код:
#ifndef _ETHERNET_TX_H                                         
#define _ETHERNET_TX_H                                         

/* Ethernet */
#define ETX_E           PORTBbits.RB0
#define ETX_CLK         PORTBbits.RB1
#define ETX_DATA        PORTBbits.RB4
#define ETX_TRISB       0xEC         

#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;

extern ethernet_frame etx_frame;

extern void etx_init( void );
extern void etx_send_data( void );
extern void etx_process( void ); /* call this every 1ms */

#endif
ethernet_tx.c
Код:
/***************************************************************************
 *   Copyright (C) 2009 by Stanson <stanson@pangolin.ru>                   *
 *   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 "main.h"      
#include "ethernet_tx.h"

#define SET_TMR1_100nS(x) { TMR1H = HIGH(-(x)); TMR1L = LOW(-(x)); }

ethernet_frame  etx_frame;   
byte            etx_cnt;     
byte            etx_nlp;     

const byte      etx_header[] =
{                             
    0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5,     /* preamble */
    0x00, 0x22, 0xB0, 0x4A, 0x11, 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, 255, 200,                                 /* Source IP */                
    192, 168, 255, 1,                                   /* 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;

    TRISB &= ETX_TRISB;

    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;

}
config.h
Код:
/* Configuration bits */                                  

code at (__CONFIG1H) byte config1h = 
    _IESO_OFF_1H &                   
    _FCMEN_OFF_1H &                  
    _OSC_HS_PLL_1H;                  

code at (__CONFIG2L) byte config2l = 
    _BODEN_OFF_2L &                                     // Не следить за питанием
    _PUT_ON_2L;                                         // PWRT                  

code at (__CONFIG2H) byte config2h = 
    _WDT_ON_2H &                     
    _WDTPS_1_1024_2H;                                   /* watchdog 4 sec */

code at (__CONFIG3H) byte config3h =
    _MCLRE_MCLR_disabled_RA5_input_en_3H;

code at (__CONFIG4L) byte config4l =
    _BACKBUG_OFF_4L &
    _LVP_OFF_4L &
    _STVR_OFF_4L;

code at (__CONFIG5L) byte config5l = 0xFF;
code at (__CONFIG5H) byte config5h = 0xFF;
code at (__CONFIG6L) byte config6l = 0xFF;
code at (__CONFIG6H) byte config6h = 0xFF;
code at (__CONFIG7L) byte config7l = 0xFF;
code at (__CONFIG7H) byte config7h = 0xFF;
main.h
Код:
#ifndef _MAIN_H
#define _MAIN_H

/* всякие полезные типы данных*/
typedef unsigned char   byte;           // 8-bit
typedef unsigned short  word;           // 16-bit
typedef unsigned long   dword;          // 32-bit

#define LOW(x) (((word)(x)) & 0xFF)
#define HIGH(x) ((((word)(x)) >> 8) & 0xFF)

#endif
Пример использования:
main.c

Код:
#include <pic18fregs.h>
#include "main.h"
#include "config.h"
#include "ethernet_tx.h"

#define SET_TMR0_uS(x) { TMR0H = HIGH(-(x) * 5); TMR0L = LOW(-(x) * 5); }

word delay_ms;

#pragma stack 0x0C0 64

#pragma code _reset 0x0000
void _reset (void) _naked
{
    _asm        GOTO _main              _endasm;
}

#pragma code _high_ISR 0x0008
void _high_ISR (void) _naked
{
    _asm        GOTO _high_interrupt    _endasm;
}

#pragma code _low_ISR 0x0018
void _low_ISR (void) _naked
{
    _asm        GOTO _low_interrupt     _endasm;
}


void high_interrupt(void) interrupt
{
}

void low_interrupt(void) interrupt
{
    if( PIR1bits.TMR1IF ) etx_process();
}

void main(void)
{
    _asm
    LFSR 1, _stack_end
    LFSR 2, _stack_end
    _endasm;

    /* Включить таймер (16 бит, CLK 5 МГц (40 МГц / 4 / 2) 0.2 мкс) */
    T0CON = 0x80;
    SET_TMR0_uS(1000);
    INTCONbits.TMR0IF = 0;

    delay_ms = 1000;

    etx_init();

    /* enable interrupts */
    RCONbits.IPEN = 1;
    INTCONbits.GIEL = 1;
    INTCONbits.GIEH = 1;

    while(1)
    {
        if(INTCONbits.TMR0IF)
        { /* таймер сработал (1 mS) */
            /* Снова зарядить таймер на 1000 мкс */
            SET_TMR0_uS(1000);
            INTCONbits.TMR0IF = 0;
            if(--delay_ms == 0)
            {
                delay_ms = 1000;
                etx_frame.payload[ ETX_DATA_OFFSET +  0 ] = PORTA;
                etx_frame.payload[ ETX_DATA_OFFSET +  1 ] = PORTB;
                /* .... */
                etx_frame.payload[ ETX_DATA_OFFSET + 17 ] = RCONbits.TO;
                etx_send_data();
            }
            _asm        CLRWDT  _endasm;
        }
    }
}
Makefile
Код:
PIC = 18f1320                                            
SDCC = sdcc                                              
ARCH = -mpic16 -p$(PIC)                                  

CFLAGS = $(ARCH) -c \
--fomit-frame-pointer \
--model-large \        
--obanksel=2 \         
--opt-code-size \      
--optimize-cmp         

LDFLAGS = $(ARCH) --no-crt -Wl -m

INCLUDEDIR = 
PROJ = ethernet_test

OBJS = main.o ethernet_tx.o

DEP_FILES = .deps/*.P

COMPILE = $(SDCC) $(CFLAGS) $(INCLUDEDIR)

all: $(PROJ).hex

DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
%o: %c
        @echo '  [CC] $@'; $(COMPILE) -Wp,-MD,.deps/$(*F).P $<

$(PROJ).hex: $(OBJS)
        @echo '  [LD] $@'; $(SDCC) $(LDFLAGS) -o $(PROJ).hex $(OBJS)

clean:
        @echo '  [CLEAN] $(OBJS) $(PROJ).hex'; rm -f *.o *.asm *.hex *.cod *.lst *.map
        @echo '  [CLEAN] .deps'; rm -fr .deps

flash: $(PROJ).hex
        pk2cmd -PPIC$(PIC) -F$(PROJ).hex -JN -Z -M
Рассчитано на SDCC. Раз в секунду послылает пакет с состояниями портов и битом где хранится флажок срабатывания WDT.

Думаю, переписать под C18 или там ASM - не проблема.

На схеме - резистор нужно ставить меньше, чем 100 ом, вплоть до 33 ом, подобрать, чтобы не было потерь.
Процессор - PIC18F1320
Логика - IN74AC86N
Кварц - 10МГц
Трансформатор - 2 обмотки без отводов по 20 витков на колечке 2000НМ 7.15х2х1.5 (чтоб каждая обмотка была >350 мкГн)
Разъём - банальная мама RJ45
Питание - 5В
Миниатюры
EtherPIC.png  

Последний раз редактировалось Stanson; 13.10.2010 в 12:08.
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 12:26   #72
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

А, забыл. В инициализации не забудьте где-нибудь
ADCON1 = 0x7F;
Ну или чтобы как минимум RB0, RB1 и RB4 были digital I/O а не AN4, AN5, AN6
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 12:39   #73
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 36
Сообщений: 4,264
Вес репутации: 2731/109
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: Ethernet за 3 копейки без ENC

Спасибо! Интресный опыт.
Machine slave вне форума   Ответить с цитированием
Старый 13.10.2010, 12:53   #74
Stanson
Senior Member
 
Регистрация: 11.10.2010
Сообщений: 255
Вес репутации: 674/38
Stanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to beholdStanson is a splendid one to behold
По умолчанию Re: Ethernet за 3 копейки без ENC

Схему и все исходники минимального Ethernet-девайса который раз в секунду шлёт пакет с данными портов и битом срабатывания WDT выложил к себе на

http://213.109.31.88/projects/index....s&dir=EtherPIC

Всё проверено, собрал на breadboard и убедился, что прошивка и схема живые и работают как задумано. Резистор только 33 ом надо ставить. Потом подробный трактатъ напишу, как время будет.

Последний раз редактировалось Stanson; 13.10.2010 в 13:01.
Stanson вне форума   Ответить с цитированием
Старый 13.10.2010, 13:00   #75
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 41
Сообщений: 3,577
Вес репутации: 4386/121
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Re: Ethernet за 3 копейки без ENC

Спасибо! Очень интересный эксперимент.
tester вне форума   Ответить с цитированием
Ответ

Метки
ethernet, eusart, pic18f1320, udp


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросы по Ethernet устройствам... Timik Общетехнические вопросы 17 25.06.2011 19:50


Часовой пояс GMT +3, время: 16:52.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot