mrcashe
Участник-
Постов
17 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о mrcashe
-
Звание
Участник
Контакты
-
Сайт
Array
Информация
-
Город
Array
-
Не стану долго распинаться, но как раз нужно. Тем более, коллекторный двигатель - это синхрофазотрон, более простого двигателя просто не найти. Так что насчёт дороговизны разработки не согласен. Спасибо, ценное замечание. Не сделать ли то же самое на стороне оптопар?
-
Такой вариант рассматривался. Но уж больно неудобно тащить DC-DC в модуль с транзисторами. Хочется, чтобы он был как можно более пассивным. Хотя, может быть, этим и закончится.
-
Провода к затворам
mrcashe опубликовал тема в Электрические машины, Электропривод и Управление
Доброе время суток, уважаемые коллеги! Задали тут задачку оживить пару древних мамонтоподобных механизмов, снабжённых коллекторными ДПТ. Причём один тип механизмов оборудован 65-вольтовыми 7-амперными двигателями, а другой - 220-вольтовыми и 5-амперными. Само-собой, первое, что пришло в голову, использовать ШИМ-контроллер на МК. Скажем так, есть некий технологический контроллер, который тянет прочую автоматику и к этому контроллеру легко приляпать ШИМ-контроллер. Но вот транзисторы с теплоотводами туда громоздить тяжко. Поэтому хочется выделить транзисторы в отдельный конструктив. Встаёт проблема соединения затворов с ШИМ-контроллером. Мне как-то встречался китайский сварочный полуавтомат, в котором IGBT были связаны с платой, на которой были установлены ВЧ-трансформаторы, при помощи витых пар длиной около 300-400 мм. Вот только давно это было и не помню, как это выглядело в деталях. Пока опробовал низковольтные двигатели, вроде как с проводами на столе работает. Как будет в цеху, непонятно. Частота ШИМ около 1 кГц, при повышении двигатель свистит и плохо крутится. Вопросы следующие: - Нет ли какого "криминала" в такой конструкции? А то я таких приводов не видывал, все, что встречались, имели ШИМ-контроллер и силовую часть на единой плате. - Если построение возможно, то какие использовать провода (витая пара, коаксиал, ...)? - Видел ли кто подобные дивайсы? - Какие-то ещё, о каких я пока не догадываюсь. :wassat: Схемку на всякий случай прилагаю. drive_post.pdf Спасибо. -
Интересный диодный мостик
mrcashe опубликовал тема в Вопросы аналоговой техники
Дамы и господа, наткнулся тут на интересное включение диодного мостика в цепи измерения тока якоря двигателя постоянного тока (BDC motor). Короткозамкнутый мостик включён параллельно токоизмерительному шунту. Вопрос в следующем: для чего он нужен? Если для ограничения бросков на шунте, то чем хуже два включённых встречно-параллельно диода? -
Да вроде всё в нормале с кодом. У меня подобный бегает на 8252. А то, что программируется через SPI, так это ещё не показатель. Разве что SPR1:SPR0 == 0 дают частоту Fosc/4, что не каждый дивайс может проглотить. Но если 8253 способен общаться с данным АЦП, то не в этом дело. Тем более, расширенный режим здесь не используется, как я понимаю. Вдогонку. Красивее ввод/вывод делать при помощи одной функции (код для sdcc): unsigned char spi_io(unsigned char value) { SPSR &= ~SPSR_SPIF; SPDR = value; while (0 == (SPSR & SPSR_SPIF)) {} return SPDR; } Тогда читаем данные при помощи: unsigned char value = spi_io(0xff); Выход SS (Slave Select) не используется, я так мыслю? Тогда должно бы работать.
-
Ненадёжная какая-то констрикция, я бы не расчитывал на такое поведение. В AT89S8253 для этой цели предусмотрен специальный бит POR (Power-On Reset). Его можно читать и потом сбросить. Но в S52 такого нет. Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним. При включении питания устанавливать триггер с помощью RC-цепочки, потом программно опрашивать и сбрасывать. Нужны 2 дополнительных ноги. Или заменить чип на AT89S8253.
-
SDCC
mrcashe ответил speccy1983 тема в MCS51
SiLabs не юзал, хз. Но для AT89S8252, AT89S8253 накропал SPI программатор сам. Нормальный компилятор. Даже местами лучше. Например, Keil uVision 2 у меня игнорировал volatile, а этот нормально обрабатывает. Код да, больше, но понятнее. Есть некоторые особенности в сложных случаях. Например, недавно прописывал операции с плавающей точкой, так он мне временными переменными в сегменте DATA забил большую часть памяти, так что на стек почти ничего не осталось. Это, всё-таки, наверное ко мне. Для 8051 - sdcc для компиляции, GNU make для проекта, любой текстовый редактор, я использую Kate. Программатор для S8252 и S8253, как уже упоминал, самодельный. Симуляторы не использую. Для AVR - avr-gcc, программаторы uisp и avrdude. -
SDCC
mrcashe ответил speccy1983 тема в MCS51
Ну, странный вопрос: откуда начАть? Конечно, RTFM (Read The Fucking Manual) & STFW (Search The Fucking WEB). Если погуглить чуток, то можно найти: http://sdcc.sourceforge.net/doc/ Документация не шибко объёмная, можно пару часов потратить и понять, что: в SDCC выглядит как: А ещё лучше: Вообще говоря, Keil C более навороченный и менее стандартный, нежели SDCC. Поэтому, если нет особых причин, зачем пересаживаться? Писать исходный код, способный компилироваться на двух разных компиляторах - задача нетривиальная даже для больших компьютеров, не говоря о полукривых компиляторах для MCS-51. Достаточно сложно создать исходник, способный компилиться на обоих этих компиляторах. Особенно, если есть ассемблерные вставки. Тут эти компиляторы вообще не совместимы, даже по протоколу передачи параметров из Си в ассемблер и обратно. Сам я давно использую SDCC, потому что работаю на Linux. Хотя Keil тоже работает под эмулятором винды. На мой взгляд, SDCC более предсказуем и корректен, но Keil способен сгенерить более оптимальный код. Так с чего начать? Прочесть доки и понять, чем отличаются компиляторы в плане исходного кода. В основном, это объявления SFR и битовых адресов, области памяти, указатели. Стараться не делать ассемблерных вставок, а если делать, то только при помощи встроенного ассемблера (он у обоих есть) и окружать конструкциями типа: Удачи. -
Я давно уже работаю с MCS-51 и AVR полностью на Linux. Соответственно, пользую только Open Source софт. На счёт именно среды разработки ничего сказать не могу, так как не пользуюсь сейчас таковыми. Когда сидел на M$, работал в Keil uVision 2. Сейчас для MCS-51 юзаю sdcc (Small Device C Compiler), для AVR - avr-gcc. sdcc есть и для виндовса, в его составе есть и симулятор, но мне симулятор не нужен, поэтому не могу сказать, насколько он хорош. Компилятор генерит менее плотный код, чем Keil uv2, но, на мой взгляд, sdcc более корректный компилятор с т.з. соблюдения стандартов языка Си. Для создания полноценной среды программирования требуется GNU make, любой текстовый редактор и программатор. Насчёт GNU make могу сказать, что вряд ли он может нормально работать под M$, так как в винде нет такого замечательного инструмента, как командный интерпретатор (он же shell). То есть, он там есть в виде cmd.exe, но это полный отстой. Я работаю только с серией Atmel AT89S, так что внутрисхемный программатор написал сам для AT89S8252, AT89S8253 и AT89S52. Если есть ещё вопросы, задавайте.
-
Доброе время суток! Я в своё время давал студентам лабу с динамической индикацией на 7-сегментных матрицах. 4 матрицы в одном корпусе. Тут тебе и знакогенератор, т.е. работа с таблицей, и таймер. Очень познавательно и интересно. Они были в восторге! Правда, это было не на 8051, но какая разница?
-
Я стараюсь работать только с указателями. При программировании для МК это несколько экономит ресурсы. Допустим, есть некая структура: typedef struct { int id; void * p; } some_struct_t; и есть некая константа, задающая размер буфера (читай: массива): enum { some_buffer_size = 20 }; Разместим сам буфер: some_struct_t some_buffer[some_buffer_size]; Теперь вариант перебора с применением индекса: int i; for (i = 0; i < some_buffer_size; ++i) { printf("%i %p\n", some_buffer[i].id, some_buffer[i].p); } Перебор с применением указателя: some_struct_t * p; for (p = some_buffer; p < some_buffer+some_buffer_size; ++p) { printf("%i %p\n", p->id, p->p); } Как видим, в первом случае индексирование выполняется дважды за цикл, т.е. всего 40 раз! А что есть индексирование? Это умножение(!) индекса на размер элемента массива и суммирование его с указателем на массив. Конечно, в случае массива символов размер элемента массива == 1, так что можно просто прибавлять индекс к адресу массива, но в случае массивов с размером элементов в 5 байт придётся именно умножать. Во втором же случае размер элемента массива просто прибавляется к текущему значению указателя, что может быть на порядок (а то и 2 порядка) эффективнее. С другой стороны, если не требуется итерация по всему буферу, а нужен именно произвольный доступ к элементу с определённым индексом, то можно с одинаковым успехом воспользоваться обоими методами, как и показал sensor_ua. Это что-то новое. Размер массива в Си, вообще говоря, невозможно узнать динамически. Соответственно, код, сгенерированный компилятором, не имеет возможности детектировать выход за пределы массива. Если Вы имеете ввиду sizeof() , то он возвращает размер объекта в байтах, что обычно не то, что нужно в повседневной жизни. Более того, полагаться на этот оператор просто опасно. В различных компиляторах он может выдавать различные значения благодаря различному выравниванию элементов. Если массив размещается статически, то всегда заводите константу, содержащую его размер и пользуйтесь только ею для задания и определения размера массива. Если массив размещается динамически, то определите переменную (а ещё лучше - функцию) для определения его размера. Для изменения размера определите соотвествующую функцию.
-
Кстати говоря, на такой шине при поллинге надо обязательно выдавать стоп-условие вне зависимости от того, есть ACK или нет. Устройств-то несколько! И не нужно заморачивать себе голову всеми этими задержками, так как они плывут по температуре и от возраста, а использовать только поллинг и в побайтовом случае, и в блочном. По сути дела, побайтовая запись - это ни что иное, как запись блока размером 1 байт, которая всё равно приводит к перезаписи страницы целиком. О пуллапах. На 1 МГц 10к вполне достаточно, всю жизнь ставлю и всё ОК (тьфу-тьфу...).
-
Работа с AVR в Linux
mrcashe ответил MRW тема в GNU/OpenSource средства разработки
-
Работа с AVR в Linux
mrcashe ответил MRW тема в GNU/OpenSource средства разработки
У меня не ГОСТовские библиотеки. Кстати, где в сети есть современные ГОСТовские УГО? Дык в pcb он. Меню там есть такое "Connects". -
Работа с AVR в Linux
mrcashe ответил MRW тема в GNU/OpenSource средства разработки
Ну вот, нашего полку прибыло! Поздравляю!
