Перейти к содержанию
    

ALexx

Свой
  • Постов

    244
  • Зарегистрирован

  • Посещение

Весь контент ALexx


  1. Задача довольно проста для человека знакомого с разработкой подобных устройств. И, как обычно, содержит следующие этапы: 1) Выбор компонентов и разработка принципиальной электрической схемы устройства. 2) Разработка печатной платы устройства и уточнение типа используемых компонентов. Изготовление печатной платы. 3) Написание встроенного ПО для микроконтроллера, обслуживающего устройство. Отладка. 4) Написание ПО верхнего уровня (Win32 и т.п.), обеспечивающего связь с устройством. Вот 4 основных этапа, которые надо пройти. Если интересно разобраться самому и есть на то время - чудесно и Форум Вам в этом поможет. К тому же, как отмечалось выше, тема не нова и можно найти и схему и плату и готовые прошивки.. Только заточить их под свою задачу. Если же времени или желания нет, то все или некоторые этапы можно "отдать другим" - заказать , а самому заняться наиболее интересной частью проекта. Удачи в освоении!
  2. Прекрасно зарекомендовали себя мосты USB<->UART от FTDI http://ftdichip.com/Products/.htm Написано о них много, в том числе и на данном форуме. Вещь неприхотливая и достаточно надежная. Драйвера выкачиваются с сайта. После подсоединения девайса имеете ужн готовый СОМ-порт, с которым работаете в обычном режиме. В приложении описание устройства, несколько десятков которых работает более года без проблем. Схема - стандартная, взятая из датащита на FT232R. Помогают конденсаторы 22-47 пФ одним концом на землю, другим - к линиям интерфейса УСБ CN_USB_232.RAR
  3. Вставлю свои 5коп... Довольно интересные вещи делает СиЛабс. А именно CP220x Ethernet Controllers. "Вещь в себе" , так сказать - цепляешь к МК, присоединяешь разъем с встроенным трансом и светодиодами - и готово (по крайней мере аппаратная часть). Сам в перспективе собираюсь их использовать. http://www.silabs.com/tgwWebApp/public/web...en/Ethernet.htm
  4. Т.е все одинаковые сегменты соединяются и кидаются на мощный ключик (верхнее плечо). Все А на один, все В на другой и т.д. В нужное время данный ключик открывается а зажигаются сегменты только на тех цифрах, на которых ключик нижнего плеча(соединенный с общим анодом/катодом) открыт. Верно я понял? Довольно интересное решение. Спасибо :-)
  5. Дешевле, быстрее и безопаснее отключить светодиод физически (выпаять, перекусить одну из ног, заклеить) :) А с другой стороны почему бы ему не помигать? вы же напринтер не постоянно мсотрите :)
  6. Сейчас серийно выпускается разработанное мною устройство, в котором 14 индикаторов, сидящих на одной шине. Использовались 1-дюймовые суперяркие индикаторы от Паралайта. Прямыми солнечными лучами. конечно, забиваются, но в остальном видимость прекрасная.
  7. Если скачали из моего поста, то там в архиве инструкция по установке имеется. На Ангельском, правда... :)
  8. Есть готовое решение. Смотрите личку.
  9. Четвертый год пользуюсь компонентой ComPort Library (одна из последних версий прилагается. Там же и примеры). Программы, созданные с ее использованием работают и под 98-й и под 2000-й и под ХР. CPort264.zip
  10. Если только включать/выключать, то схема проста: Двигатель - пускатель - реле управления катушкой пускателя - буфер - порт ATMega
  11. Занимаюсь разработкой и изготовлением различного рода USB-устройств. Среди них: - преобразователи интерфейсов (USB в RS-232, RS-485) - светомузыкальная USB-приставка - cимвольный ЖКИ с подключением к USB - блок ввода-вывода с управлением от USB (Вход-сухой контакт, выход - реле) Кроме разработки аппаратной части (схема, плата) выполняю разработку программного обеспечения верхнего уровня (программы связи и управления) под Win32 (C++ Builder) Если заинтересовало - обращайтесь. Есть богатый опыт удаленной работы. dealex77<dog>ukr.net ICQ 311365580
  12. А HID - обязательное условие? Если нет - смотрите почту.
  13. вы не ошиблись? именно этот АДУМ однонаправленный (4 канала в одном направлении) Может имеется в виду ADUM1402 ? Нет. Не сможет. А надо ли ставить зависит от того что хотите получить: 1) надо получить уровни 232-го. В этом случае МАХ ставить надо: MAX232 <--> ADUM <--> MAX232 2) надо получить TTL/CMOS уровни (к микроконтроллеру, например, прицепиться), тогда действительно еще один МАХ не нужен - с АДУМА - сразу на контроллер.
  14. проблема с LCD

    Если пользуетесь встроенными в КодВижн функциями, то в хелпе есть даже пример использования Обратите внимание на схему подключения ЖКИ, представленную там же: The LCD module must be connected to the port bits as follows: [LCD] [AVR Port] RS (pin4) ------ bit 0 RD (pin 5) ------ bit 1 EN (pin 6) ------ bit 2 DB4 (pin 11) --- bit 4 DB5 (pin 12) --- bit 5 DB6 (pin 13) --- bit 6 DB7 (pin 14) --- bit 7 Если пишете свои функции работы с ЖКИ, то инициализация в соответствии с требованиями датащита (отправка определенных кодов, выдержка определенных времянок и т.д.) У меня, например, успешно работает такой кусок кода: /******************************************************************************* * Function Name : Lcd_DisplayInit * Description : Инициализация ЖКИ *******************************************************************************/ void LCD_DisplayInit(void){ // Далее следует код, который изменять не рекомендуется!!! pLCD_SetPortOut(); conLCD_OUT.EN_BIT=0; conLCD_DIR.EN_BIT=1; conLCD_OUT.RS_BIT=0; conLCD_DIR.RS_BIT=1; #ifdef RW_WORK conLCD_OUT.RW_BIT=0; conLCD_DIR.RW_BIT=1; #endif delay_us(2); #ifdef DBUS8 pLCD_OUT=0x30; #else pLCD_OUT=(pLCD_OUT&0x0f)|0x20; #endif EN=1; delay_us(2); EN=0; delay_us(1500); #ifdef DBUS8 pLCD_OUT=0x30; #else pLCD_OUT=(pLCD_OUT&0x0f)|0x20; #endif EN=1; delay_us(2); EN=0; delay_us(1500); // ~1.5 мс #ifdef DBUS8 #if (NUMBER_OF_LINES >=2) LCD_WriteByte(COMMAND, FUNCTION_SET | BUS_8BIT | TWO_LINES | CHAR_5_8); #else LCD_WriteByte(COMMAND, FUNCTION_SET | BUS_8BIT | ONE_LINE | CHAR_5_8); #endif #else #if (NUMBER_OF_LINES >=2) LCD_WriteByte(COMMAND, FUNCTION_SET | BUS_4BIT | TWO_LINES | CHAR_5_8); #else LCD_WriteByte(COMMAND, FUNCTION_SET | BUS_4BIT | ONE_LINE | CHAR_5_8); #endif #endif LCD_WriteByte(COMMAND, DISP_ON_OFF | DIS_ON | UNDER_ON | BLINK_ON); LCD_WriteByte(COMMAND, ENTRY_MODE | CURS_INC | DIS_SHIFT_DIS); LCD_WriteByte(COMMAND, CLEAR); LCD_WriteByte(COMMAND, GO_HOME); } После его выполнения экран очищается, появляется мигающий курсор и дисплей готов к работе.
  15. LCD 4*16

    В 4-х строчных ЖКИ "хитрая" адресация строк: Вот небольшой кусочек кода для определения адресов строк для различных ЖКИ // Адреса строк ЖКИ разной конфигурации #if (NUMBER_OF_LINES >= 1 && NUMBER_OF_LINES <=4 && NUMBER_OF_LINES !=3 ) #define LINE1 0x00 #if (NUMBER_OF_LINES >=2) #define LINE2 0x40 #if (NUMBER_OF_LINES == 4 && CHARS_PER_LINE == 16) // LCD 4x16 #define LINE3 0x10 #define LINE4 0x50 #elif(NUMBER_OF_LINES == 4 && CHARS_PER_LINE == 20) // LCD 4x20 #define LINE3 0x14 #define LINE4 0x54 #endif #endif #else #error UnReal LCD Parameters (Check NUMBER OF LINES / CHARS PER LINE) P.S. А вообще датащиты почитывать следует ;)
  16. Вот здесь примеры программ для указанного контроллера. Кроме того, там лежат и готовые библиотеки для работы с периферией контроллера. http://www.icpdas.com/products/Remote_IO/c...s/i-7188can.htm (см. табличку в конце странички)
  17. Функции в CVAVR.

    Можно в 2 этапа. Предполагается, что у Вас уже есть функции вывода строки на ЖКИ или используются встроенные в CV функции работы с индикатором. 1) Используете библиотечную функцию форматированного вывода в СТРОКУ: // описание переменных unsigned char n; char str[20]; ............... n=sprintf(str,"Result=%04d",result); 2) Отправляете n символов строки str на ЖКИ с помощью своей функции. Или используете функцию void lcd_puts(char *str) из библиотеки lcd КодВижна: lcd_puts(str);
  18. Порой приходится делать... Делал девайс, который работал под управлением процессорной платы ICOP (одноплатный 386-й) Так вот задачей было сгородить на нем Слейв Модбаса для связи со СКАДой. Плата работает под ДОС-ом, поэтому сказанное ниже некоторый оффтоп, но может кому пригодится идея... Основной проблемой было отловить 3.5-кратный интервал тишины на линии... Игра с таймером требуемого результата не принесла... Внимательно изучив описание стандартного УАРТа заметил (:)) очень "полезное" прерывание - по таймауту (4-х кратному интервалу передачи символа). Ну а дальше - дело техники... 1) Настраиваем ФИФО например на 16 символов. 2) Если возникает прерывание заполнения ФИФО (не таймаут) - вычитываем 16 байт в буфер и продолжаем ожидать "доприема" пакета. 3) Если возникает прерывание по таймауту - вычитываем байты из ФИФО и считаем, что пакет принят, переходим к его анализу. Естественно, это все не в основном цикле крутится - за все действия отвечают обработчики прерываний от СОМ-порта, выставляющие флаги, анализируемые основной программой.
  19. Один из вариантов - в приложении. Представляет собой реализацию RTU-слейва (ASCII не прописывал за отсутствием необходимости, но таковое предусмотрено. надо только добавить соответствующие проверки режима и дописать ветки в обработчиках прерываний.) ModBus.rar
  20. Не может цикл длиться "несколько часов"!!! Контроллер может работать неограниченное время, но при этом в нем "прокручивается" миллионы раз один и тот же цикл.. Опишите задачу подробнее. Тогда можно будет что-то предложить или посоветовать.
  21. :a14: Тему - в "Общение" Участникам - образцы травки :)
  22. Можно найти много чего ;) http://www.google.com.ua/search?hl=ru&...nitor&meta=
  23. 2defunct А не рано ли "хороните" 51-е?? Да, есть "старые" модели, но есть и масса мощных процессоров с данным ядром и развитой периферией.. Возьмите, хотя бы SiLabs или Ramtron... Ни коим образом не против АВР - сам на них перешел в некоторых устройствах. Действительно удобная штука. В дополнение упомяну 1) CodeVision - среда разработки+программатор 2) VMLab - далеко не плохой симулятор. И то и другое можно найти здесь на форуме. А вот упомянутый colombo_2007 программатор (см. прилагаемый файл) STK_200_Programmer.pdf
  24. В некоторых случаях можно обойтись и без прерываний. Основной цикл программы (даже если она выполняется "несколько часов") короткий (чем короче, тем лучше:-) ). Так вот в этом основном цикле и надо проверять нажатие кнопки. Предарительно описываете некоторую переменную, которая будет принимать значение 1 при одном нажатии, и значение 0 при следующем и так далее: 1,0,1,0... (Так называемая "триггерная кнопка") В зависимости от значения этой переменной выполняется или нет рабочий цикл. Приблизительная структура программы следующая: void main(void){ unsigned char Mode=0; // Инициализация контроллера ........... while(1){ // вечный цикл // Обработка кнопки if(! КНОПКА){ // нажата? delay_mc(20); // задержка - ликвидация дребезга if(! КНОПКА) { // все еще нажата - значит не ложное срабатывание while(! КНОПКА); // ожидание отжатия if(Mode) Mode=0; else Mode=1; //Изменяем режим } } // основные действия if(Mode) { ............. } else{ ............... } } } Это самый простейший вариант, имеющий некоторые ограничения. 1) Использование ватчдога здесь не имеет смысла - можно "передержать" кнопку нажатой - и тем самым вызвать сброс 2) Констркуция "основные действия" должна быть линейной (не содержать замкнутых циклов) Для ликвидации этих недостатков можно использовать таймер, в обработчике которого будет проводиться анализ нажатой кнопки и изменение значения режимной переменной. Но для начального понимания приведенный кусок может пригодиться. Для ответа на данный вопрос надо знать какой проц. Вы используете. У каждого свои регистры ватчдога и разные способы его запуска и обработки событий от него.
  25. Зря Вы так о "Дедушке Кейле".... Вот, например: AT89C2051. Два внешних прерывания и таймер с соответствующими обработчиками, декодирование информации и управление 4-мя драйверами ЖКИ (16 символов), контроль температуры по 1-Wire(DS18B20). Это все на С. Получаем после компиляции: linking... Program Size: data=78.0 xdata=0 code=1687 creating hex file from "3LineLCD(x51)"... "3LineLCD(x51)" - 0 Error(s), 0 Warning(s).
×
×
  • Создать...