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

mrcashe

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о mrcashe

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array

Информация

  • Город
    Array
  1. Не стану долго распинаться, но как раз нужно. Тем более, коллекторный двигатель - это синхрофазотрон, более простого двигателя просто не найти. Так что насчёт дороговизны разработки не согласен. Спасибо, ценное замечание. Не сделать ли то же самое на стороне оптопар?
  2. Такой вариант рассматривался. Но уж больно неудобно тащить DC-DC в модуль с транзисторами. Хочется, чтобы он был как можно более пассивным. Хотя, может быть, этим и закончится.
  3. Доброе время суток, уважаемые коллеги! Задали тут задачку оживить пару древних мамонтоподобных механизмов, снабжённых коллекторными ДПТ. Причём один тип механизмов оборудован 65-вольтовыми 7-амперными двигателями, а другой - 220-вольтовыми и 5-амперными. Само-собой, первое, что пришло в голову, использовать ШИМ-контроллер на МК. Скажем так, есть некий технологический контроллер, который тянет прочую автоматику и к этому контроллеру легко приляпать ШИМ-контроллер. Но вот транзисторы с теплоотводами туда громоздить тяжко. Поэтому хочется выделить транзисторы в отдельный конструктив. Встаёт проблема соединения затворов с ШИМ-контроллером. Мне как-то встречался китайский сварочный полуавтомат, в котором IGBT были связаны с платой, на которой были установлены ВЧ-трансформаторы, при помощи витых пар длиной около 300-400 мм. Вот только давно это было и не помню, как это выглядело в деталях. Пока опробовал низковольтные двигатели, вроде как с проводами на столе работает. Как будет в цеху, непонятно. Частота ШИМ около 1 кГц, при повышении двигатель свистит и плохо крутится. Вопросы следующие: - Нет ли какого "криминала" в такой конструкции? А то я таких приводов не видывал, все, что встречались, имели ШИМ-контроллер и силовую часть на единой плате. - Если построение возможно, то какие использовать провода (витая пара, коаксиал, ...)? - Видел ли кто подобные дивайсы? - Какие-то ещё, о каких я пока не догадываюсь. :wassat: Схемку на всякий случай прилагаю. drive_post.pdf Спасибо.
  4. Дамы и господа, наткнулся тут на интересное включение диодного мостика в цепи измерения тока якоря двигателя постоянного тока (BDC motor). Короткозамкнутый мостик включён параллельно токоизмерительному шунту. Вопрос в следующем: для чего он нужен? Если для ограничения бросков на шунте, то чем хуже два включённых встречно-параллельно диода?
  5. AT89S8252

    Да вроде всё в нормале с кодом. У меня подобный бегает на 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) не используется, я так мыслю? Тогда должно бы работать.
  6. Ненадёжная какая-то констрикция, я бы не расчитывал на такое поведение. В AT89S8253 для этой цели предусмотрен специальный бит POR (Power-On Reset). Его можно читать и потом сбросить. Но в S52 такого нет. Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним. При включении питания устанавливать триггер с помощью RC-цепочки, потом программно опрашивать и сбрасывать. Нужны 2 дополнительных ноги. Или заменить чип на AT89S8253.
  7. SDCC

    SiLabs не юзал, хз. Но для AT89S8252, AT89S8253 накропал SPI программатор сам. Нормальный компилятор. Даже местами лучше. Например, Keil uVision 2 у меня игнорировал volatile, а этот нормально обрабатывает. Код да, больше, но понятнее. Есть некоторые особенности в сложных случаях. Например, недавно прописывал операции с плавающей точкой, так он мне временными переменными в сегменте DATA забил большую часть памяти, так что на стек почти ничего не осталось. Это, всё-таки, наверное ко мне. Для 8051 - sdcc для компиляции, GNU make для проекта, любой текстовый редактор, я использую Kate. Программатор для S8252 и S8253, как уже упоминал, самодельный. Симуляторы не использую. Для AVR - avr-gcc, программаторы uisp и avrdude.
  8. SDCC

    Ну, странный вопрос: откуда начАть? Конечно, 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 и битовых адресов, области памяти, указатели. Стараться не делать ассемблерных вставок, а если делать, то только при помощи встроенного ассемблера (он у обоих есть) и окружать конструкциями типа: Удачи.
  9. Я давно уже работаю с 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. Если есть ещё вопросы, задавайте.
  10. Доброе время суток! Я в своё время давал студентам лабу с динамической индикацией на 7-сегментных матрицах. 4 матрицы в одном корпусе. Тут тебе и знакогенератор, т.е. работа с таблицей, и таймер. Очень познавательно и интересно. Они были в восторге! Правда, это было не на 8051, но какая разница?
  11. Я стараюсь работать только с указателями. При программировании для МК это несколько экономит ресурсы. Допустим, есть некая структура: 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() , то он возвращает размер объекта в байтах, что обычно не то, что нужно в повседневной жизни. Более того, полагаться на этот оператор просто опасно. В различных компиляторах он может выдавать различные значения благодаря различному выравниванию элементов. Если массив размещается статически, то всегда заводите константу, содержащую его размер и пользуйтесь только ею для задания и определения размера массива. Если массив размещается динамически, то определите переменную (а ещё лучше - функцию) для определения его размера. Для изменения размера определите соотвествующую функцию.
  12. Кстати говоря, на такой шине при поллинге надо обязательно выдавать стоп-условие вне зависимости от того, есть ACK или нет. Устройств-то несколько! И не нужно заморачивать себе голову всеми этими задержками, так как они плывут по температуре и от возраста, а использовать только поллинг и в побайтовом случае, и в блочном. По сути дела, побайтовая запись - это ни что иное, как запись блока размером 1 байт, которая всё равно приводит к перезаписи страницы целиком. О пуллапах. На 1 МГц 10к вполне достаточно, всю жизнь ставлю и всё ОК (тьфу-тьфу...).
  13. У меня не ГОСТовские библиотеки. Кстати, где в сети есть современные ГОСТовские УГО? Дык в pcb он. Меню там есть такое "Connects".
  14. Ну вот, нашего полку прибыло! Поздравляю!
×
×
  • Создать...