SilverRay писал(а): Очевидно, написать самому функцию преобразования двоичного числа в десятичное в ASCII-коде и отправить в порт напрямую два или три байта. А как сделать чтобы комп не занимался самодеятельностью и принимал то, что отправили? Добавлено: Sat Feb 13, 2016 3:32 pm |
Сначала надо уточнить, чем ты принимаешь. Если терминалкой -- то она честно отображает ASCII-символы, включая управляющие. Соответственно, нужно делать функцию преобразования со стороны МК. Если же принимаешь своей программой -- то никто не мешает сделать прием двоичных данных и выводить их в числовом формате уже программой на компе. Добавлено: Sat Feb 13, 2016 3:42 pm |
SilverRay писал(а): Если же принимаешь своей программой -- то никто не мешает сделать прием двоичных данных и выводить их в числовом формате уже программой на компе. Бляя, ну я дебил. Вместо ReadLine написал ReadByte и все заработало ![]() ![]() Да, принимаю своей прогой. Добавлено: Sat Feb 13, 2016 3:55 pm |
А на чем писал свою прогу? Я вот все хочу разобраться с этим. Добавлено: Sat Feb 13, 2016 4:53 pm |
На C#. https://msdn.microsoft.com/ru-ru/library/system.io.ports.serialport(v=vs.110).aspx Добавлено: Sat Feb 13, 2016 5:35 pm |
Жесть... ![]() Есть некоторая среда, от NI, если не путаю -- LabWindows. Типа, заточена под то, чтобы быстро соорудить всякие кнопочки с окошками для работы с оборудованием. Не без косяков, но иногда удобно. Язык тоже Си-подобный. Добавлено: Sat Feb 13, 2016 5:44 pm |
LabView это Добавлено: Sat Feb 13, 2016 6:00 pm |
Специально для торопящихся вставить свои пять копеек -- LabWindows: http://www.ni.com/lwcvi/ Добавлено: Sat Feb 13, 2016 6:06 pm |
AlexDark писал(а): LabView это LabView и "быстро соорудить всякие кнопочки" несовместимо ![]() Добавлено: Sat Feb 13, 2016 6:37 pm |
Как на ардуинке посчитать длительность входящих импульсов, сгенерировать импульсы нужной длительности? Добавлено: Sat Feb 13, 2016 10:13 pm |
Можно генерировать прерывание по фронту и спаду пришедшего импульса.. А чтобы сгенерировать импульс - PORT и таймер. Добавлено: Sat Feb 13, 2016 10:54 pm |
millis micros + прерывание ШИМ? Добавлено: Sat Feb 13, 2016 10:55 pm |
Нужно прочитать длительность входящего импульса, вычислить из него нужную длительность и выдать импульс к приходу следующего на вход. И этого добра 6 каналов. Добавлено: Sat Feb 13, 2016 11:34 pm |
http://avr-start.ru/?p=1997 Добавлено: Sun Feb 14, 2016 12:18 am |
Почему такой код занимает 16 тактов процессора?
(это прерывание по таймеру при достижении нужного значения) Сталкиваюсь с тем, что на таймерах атмеги не получается сделать адекватный задающий генератор на 250кГц. Ибо менять частоту влево-вправо получается с минимальным шагом 7-8 кГц. Какая тут подстройка в резонанс.. Это либо я кардинально неправильным путем иду, либо надо брать камни на 40+ МГц типа STMок, и ваять на них. Так? Добавлено: Sun Feb 14, 2016 1:22 am |
Т.е. тупо запустил таймер и запускаешь прерывание при достижнии значения, изменяя значение меняешь скважность? Что то с кодом не то. А не проще ли сделать параллельный цап на меге и частотой 494 рулить Добавлено: Sun Feb 14, 2016 6:58 am |
Денис писал(а): Почему такой код занимает 16 тактов процессора? Ну а сколько он может занимать? Прикидываем: Сама операция "чтение порта в регистр -- инвертирование регистра -- запись в порт" уже минимум три такта. Сохранение-восстановление регистра на входе и выходе из прерывания -- еще два такта. Сохранение-восстановление регистра флагов -- еще такта четыре, потому как нет прямой команды. Вот уже девять набегает. А дальше всякие навески от компилятора, и собственно команда выхода из обработчика. Посмотри ассемблерный листинг и убедись. Добавлено: Sun Feb 14, 2016 9:58 am |
Денис писал(а): PORTD = ~PORTD; Можно проще. Если в регистр PIN записать единицы, то состояние ножек инвертируется. Почему команда DDRB = 0b10000000; занимает больше памяти, чем DDRB |= ( 1 << 7); ? Добавлено: Sun Feb 14, 2016 12:02 pm |
Наверное, потому, что это не команда, а два оператора, и как там компилятор их обработает -- только ему ведомо. Полагаю, что в первом случае он использует что-то вроде связки -- загрузки в регистр значения с последующей записью в порт, а во втором -- команду sbr. Добавлено: Sun Feb 14, 2016 12:43 pm |
Денис писал(а): Сталкиваюсь с тем, что на таймерах атмеги не получается сделать адекватный задающий генератор на 250кГц. Ибо менять частоту влево-вправо получается с минимальным шагом 7-8 кГц. Какая тут подстройка в резонанс.. Это либо я кардинально неправильным путем иду, либо надо брать камни на 40+ МГц типа STMок, и ваять на них. Так? Да неправильный путь. Есть специальные микросхемы генераторов с цифровым управлением. Либо плисину брать на 80 и больше МГц. Можно еще многооборотный резюк крутить шаговиком и мерять частоту мк ![]() Добавлено: Sun Feb 14, 2016 2:20 pm |
А что за микросхемы генераторов с цифровым управлением, накидаешь пару популярных? Я верно понимаю принцип, частота на выходе зависит от двоичной комбинации на входах, или там последовательный интерфейс? Добавлено: Sun Feb 14, 2016 3:20 pm |
DDS синтезатор http://we.easyelectronics.ru/grand1987/dds-sintezator-ad9833.html Добавлено: Sun Feb 14, 2016 3:30 pm |
Хотел я поиграть с этой микрой, да нет её у нас. Добавлено: Sun Feb 14, 2016 3:46 pm |
DDS, по ходу, дорогое удовольствие. Самый дешевый китай-модуль DDS стоит почти полтыщи на али. А можно менять частоту генерации обычных микрух с RC-целочками (TL494, SG3525), подавая разное напряжение на определенную ножку? А напряжение можно и ШИМом сделать. Это куда проще, супер-быстрая реакция мне не нужна. Добавлено: Sun Feb 14, 2016 3:51 pm |
Денис писал(а): полтыщи на али. Разве это деньги? Я купил К1113ПВ1 за 630р просто так, что бы была. Добавлено: Sun Feb 14, 2016 3:52 pm |
Лицензионное соглашение (c)Flyback.org.ru Российское общество любителей высоких напряжений. Использование материалов с данного сайта и форума возможно только с разрешения администрации. |