среда, 22 июня 2011 г.

Библиотека для работы МК Renesas V850ES совместно с ЖК модулем

Библиотека предназначена для работы с модулями на контроллере KS0066U, HD44780U и совместимыми и микроконтроллером Renesas UPD70F3793 но может быть адаптирована под любой МК.
Питание дисплея осуществляется от 3.3V.
На вывод контраста подается отрицательное напряжение полученое на инвертирующем зарядовом насосе.
Подключение дисплея к МК осуществляется так:
ЖК модуль <-> uPD70f3793
-----------------------
DB0 <-> PDL0
DB1 <-> PDL1
DB2 <-> PDL2
DB3 <-> PDL3
DB4 <-> PDL4
DB5 <-> PDL5
DB6 <-> PDL6
DB7 <-> PDL7

RS -> PDL8
R/W -> PDL9
E -> PDL10
-----------------------
На таймере P генерируется ШИМ 200КГц и подается с вывода P35 на зарядовый насос.
Ограничивая ширину импульсов, можно регулировать контрастность дисплея.
Схема зарядового насоса:

Перед выполнением функций чтения/записи, надо вызвать LCD_init()

Функция LCD_write_command_or_data имеет два параметра - первый указывает что будем записывать - команды (LCD_COMMAND или LCD_COMMAND_NO_BF_CHECK) или данные (LCD_DATA или LCD_DATA_NO_BF_CHECK) а затем собственно команда или байт данных.
Приставка NO_BF_CHECK означает что не будем проверять флаг Busy от дисплея (на моем дисплее он работал не правильно).
Вот пример вывода двух цифр в верхнюю и нижнюю строки:

Запишем адрес начала верхней строки (0x80 потому что адрес 0x00 а первый бит - команда записи адреса)
LCD_write_command_or_data(LCD_COMMAND_NO_BF_CHECK, 0x80);

И выведем цифру 1
LCD_write_command_or_data(LCD_DATA_NO_BF_CHECK, (0x31);

Запишем адрес начала нижней строки (0xC0 потому что адрес 0x40 а первый бит - команда записи адреса получаем 11000000b тоесть 0xC0)
LCD_write_command_or_data(LCD_COMMAND_NO_BF_CHECK, 0xC0);

И выведем цифру 2
LCD_write_command_or_data(LCD_DATA_NO_BF_CHECK, (0x32);

Исходники написаны на C в среде IAR.
Скачать можно здесь:
uPD70F3793_LCD.zip

понедельник, 16 мая 2011 г.

EEPROM в SFP модулях

По спецификации, на SFP и SFP+ модулях,установлен EEPROM объемом 128 байт.
Первые 96 байт специфицированы, оставшиеся - отводятся производителю.
Нас интересуют первые 96.
Итак:
Байт: Значение: Описание:
-------------------
Базовый блок
-------------------
0 0x03 Тип модуля - 0x03 SFP
1 0x04 Расширенный тип - 0x04 GBIC/SFP функционал доступен через I2C
2 0x07 Тип коннектора - 0x07 LC коннектор
3-10 xx Электрическая или оптическая совместимость (опишу отдельно)
11 0x06 Тип кодировки данных - 0x06 64B/66B
12 0x67 Номинальная скорость передачи бит в 100Mbps 0x67=103x100Mbps
13 0x00 RATE_ID нас пока не касается
14 0x28 Дальность на SMF в километрах - 0x28 = 40Km
15 0xFF Дальность на SMF в 100 метрах - 0xFF больше не лезет видимо
16 0x00 Дальность на оптике с ядром 50мкм OM2 в 10 метрах
17 0x00 Дальность на оптике с ядром 62.5мкм OM1 в 10 метрах
18 0x00 Дальность на меди в метрах
19 0x00 Дальность на оптике с ядром 50мкм OM3 в 10 метрах
20-35 xx Название производителя в ASCII
36 0x20 Электрическая или оптическая совместимость (опишу отдельно)
37-39 xx IEEE код производителя
40-55 xx Партийный номер модуля в ASCII
56-59 xx Ревизия в ASCII
60-61 0x060E Длинна волны - 0x060E - 1550нм
62 0x00 Зарезервировано
63 xx Контрольная сумма базового блока (просто 8 бит от суммы всех байт от 0 до 62)
------------------
Расширенный блок
------------------
64-65 0x601A Опциональные сигналы (опишу позже)
66 0x00 Верхний зазор по битрейту в процентах
67 0x00 Нижний зазор по битрейту в процентах
68-83 xx Серийный номер модуля в ASCII
84-91 xx Дата производства
92 0x68 Реализованная диагностика (опишу позже)
93 0xF0 Реализованная расширенный функционал (опишу позже)
94 0x20 SFF-8472 совместимость
95 xx Контрольная сумма расширенного блока (просто 8 бит от суммы всех байт от 64 до 94)

Допишу позже

вторник, 15 марта 2011 г.

Беда в Японии

Внимание! В связи с тяжелейшими последствиями землетрясения и цунами в Японии, произошедшими 11 марта 2011 года, Российский Красный Крест объявил чрезвычайный сбор средств, для оказания помощи пострадавшим жителям Японии. Вся подробная информация и реквизиты есть на официальном сайте Российского Красного Креста.
Так же, на официальном сайте Американского Красного Креста открыт аналогичный сбор средств, там можно перевести деньги по кредитной карте. Подробности смотрите тут

среда, 31 марта 2010 г.

Входные каскады электрокардиографа на дифференциальных усилителях Maxim с архитектурой indirect current-feedback

Итак, нужно снять кардио сигнал с двух электродов на руках, и еще один электрод на правой ноге используется как общий. Состав сигнала обычно такой - синфазный сигнал 50Гц от наводок сети 220V, постоянная составляющая между руками около 150мВ и собственно полезный сигнал размахом в районе 2,5мВ.
Обычно делается так:
На входе дифференциальный усилитель, далее фильтры (в частности удаляющие постоянную составляющую - частота среза как правило 0.5Гц, режекторный на 50/60Гц и т.д.) и еще один усилитель, а затем АЦП.
И еще, обычно на правую ногу подают синфазный сигнал для того чтоб держать его в допустимых пределах.
Есть вот какая идея, во первых отказаться от аналоговых фильтров (использовать только пассивны Anti Aliasing фильтр первого порядка перед АЦП), во вторых подать на правую ногу виртуальную землю и в третьих не убирать полностью постоянную составляющую, с выхода первого усилителя сигнал подать на первый канал АЦП, в соответствии с результатами измерений и фильтрации ЦАП,ом установить на не инвертирующем входе второго усилителя нужное напряжение чтоб он не ушел в насыщение, а с выхода второго усилителя подать сигнал через nti Aliasing фильтр на сигма-дельта АЦП. А уже после оцифровки, отфильтровать попавшие 50Гц и т.д.
В схеме используются инструментальные усилители Maxim с архитектурой indirect current-feedback с коэффициентом усиления 10.
Для простоты в качестве полезного сигнала - синусоида


четверг, 14 августа 2008 г.

USB библиотека под AT90USBxxx

Вот, дописал кое как библиотеку для USB под AT90USB1287 (но несложно и под другие переделать).
Чтоб заработал USB добавте в проект файлы USBD.c USB_cdc_user_functions.c PLL.c.
В вашей программе добавте #include "usbd.h"
и вызовите START_PLL_and_USB_module();
В USB_cdc_user_functions.c есть функция callback_USB_RXC которая вызываеться при приходе пакета данных по CDC.
В примере там просто пересылка их обратно (Эхо).
Все проверено на AT90USBKey и имейте в виду что бит UVREGE нужно выставлять только если у вас USB модуль питаеться от внутреннего регулятора, иначе его надо погасить. При обнаружении девайса, подсунуть ей файл at90usbxxx_powerc.inf в папке Driver
Да, и компилилось все под IAR 5.11B
Собственно саму библиотеку с примером можно забрать сдесь https://sites.google.com/a/powerc.ru/powerc/instrukcii/USB_LIBRARY.7z?attredirects=0&d=1

понедельник, 4 августа 2008 г.

Вариант измерения напряжения в широком диапазоне




Измеряеться напряжение Vsense при помощи АЦП питаемого от источника Vmcu 5V АЦП подключаем к точке соеденения резисторов R5 и R8, В данном случае затвор поднключен к Vmcu так как входной сигнал большой, а вообще он должен управляться микроконтроллером. диод должен быть с очень маленьким падением напряжения, он предохраняет АЦП от перегрузки.

пятница, 4 июля 2008 г.

Понижающие конвертер на IR3637A для высокого входного напряжения



Столкнувшись с проблеммой выбора недорогого, синхронного, высокочастотного понижающего контроллера, я разработал вот такую схемку. Идея ее в том чтоб использовать дешевый контроллер IR3637A. Питание до стабильной работы схема получает от стабилизатора, а после запуска, с выхода. В качестве start-up схемы, можно использовать и стабилитрон тоб дешевле было. Трансформатор есть дешевый готовый. В таком варианте конвертер получается дешевле чем на IR3651 и частота на 200 килогерц выше.