Zhekas 0 3 октября, 2018 Опубликовано 3 октября, 2018 · Жалоба Поработал сегодня над прибором. Запустил таймеры с задержкой 100 нс с использованием оптимизации (до этого запуск был разнесен по программе), а непосредственно АЦП запустил из прерывания таймера на время повтора импульсов SH и ICG. Проверил время повторного прерывания на запуск АЦП - 28,7 мкс, как и должно быть по расчетам. Период FM составляет 1,2 мкс. По расчетам, сканируя каждый шестой пиксель, время запуска АЦП составит 1,2 мкс * 4 * 6 = 28,8 мкс, тут все верно. Расчетное время преобразования АЦП составляет при частоте 5 МГц (завышена для эксперимента) 2,7 мкс, здесь успеваем. Попробую еще раз проверить осциллографиом пины. Без оптимизации кода задержка при включении таймеров составляет 500 нс. Изначально хотел попробовать использовать ассемблерную вставку типа: asm volatile("SBI %0, 0x02" :: "I"(_SFR_IO_ADDR(PORTB))); Но она почему-то упорно отказывается работать с регистром TCCR0A, может кто с таким сталкивался? Плюс заметил, что при запуске программы несколько раз, значения напряжения сильно отличаются. Например, все цифры АЦП или 95 или 580 независимо от локальности засветки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 3 октября, 2018 Опубликовано 3 октября, 2018 · Жалоба 3 hours ago, Zhekas said: . . . Расчетное время преобразования АЦП составляет при частоте 5 МГц (завышена для эксперимента) 2,7 мкс, здесь успеваем. . . . шо-то уж очень бИстро. Версия из даташита - 13 - 260μs Conversion Time ps Не тратьте Вы время на эти 8-разрядные, с хреновой отладкой, процессоры (IMHO). Смотрите ARM, самое "ходовое" STM - у них все побыстрее. googl, "tcd1304 stm32" Вот, например 72 MHz STM32F103 посмотрите, 2 x 12-bit, 1 µs A/D converters (up to 16 channels) отладка поддерживается самими IAR. Визуальная настройка периферии и генерация "стартового" проекта - Cube. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 4 часа назад, Zhekas сказал: asm volatile("SBI %0, 0x02" :: "I"(_SFR_IO_ADDR(PORTB))); Но она почему-то упорно отказывается работать с регистром TCCR0A, может кто с таким сталкивался? Логично. Адрес TCCR0A находится за пределами досягаемости команды SBI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zhekas 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 16 hours ago, k155la3 said: шо-то уж очень бИстро. Версия из даташита - 13 - 260μs Conversion Time Время конверсии же определяется частотой работы АЦП. В даташите прописано, что требуется 13,5 тактов, чтобы провести преобразования и указана максимальная частота для наилучшего разрешения - 200 кГц. Соответственно время конверсии при этой частоте составит 67,5 мкс. При частоте 1 МГц - 13,5 мкс. Просто я видел, что люди делают спектрометры даже на Arduino, и в этой ветке форума говорили про ATMega, и что встроенного АЦП достаточно. Попробую завтра еще поработать осциллографом с программой в режиме бесконечного цикла и довешивать код на АЦП. Кроме того посмотрю время повторной готовности результата АЦП в прерывании. 14 hours ago, Сергей Борщ said: Логично. Адрес TCCR0A находится за пределами досягаемости команды SBI. А какую комбинацию можно использовать для достижения данного адреса? Пробовал LDI + OUT - тоже не работало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба Диаграмма отлаживается элементарно — все ключевые моменты алгоритма выводятся на ноги, т.е. выставляете вместо АЦП строб на вывод и смотрите прибором, соответствует ли на ней его место требованию производителя, хотя, есть большое подозрение, что Вы таки продолжаете попытки заставить работать микросхему от инверсных сигналов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zhekas 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 38 minutes ago, Plain said: Диаграмма отлаживается элементарно — все ключевые моменты алгоритма выводятся на ноги, т.е. выставляете вместо АЦП строб на вывод и смотрите прибором, соответствует ли на ней его место требованию производителя, хотя, есть большое подозрение, что Вы таки продолжаете попытки заставить работать микросхему от инверсных сигналов. Я использую сигналы, которые в бесконечном цикле давали на входе осциллографа сигнал, изменяющийся при затемнении/освещении матрицы. Они - инверсные сигналы даташита. По умолчанию у меня SH = 1, а ICG = 0 и FM = 0; Промерял время повторного срабатывания АЦП в отладчике - 28,7 - 28,8 мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 6 часов назад, Zhekas сказал: время конверсии Время чего??? 6 часов назад, Zhekas сказал: А какую комбинацию можно использовать для достижения данного адреса? LD, LDD, LDS, ST, STD, STS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zhekas 0 13 октября, 2018 Опубликовано 13 октября, 2018 (изменено) · Жалоба Пробовал поставить сегодня начальное состояние PORTB |= (0 << SH) | (1 << FM) | (1 << ICG); Результат - нуль. Может быть стоит попробовать новую матрицу подключить, поскольку что я не пытаюсь сделать, результат нулевой. Я в самом начале, как только подключил детектор, то перепутал + и - питания. При этом сработала защита блока питания, а матрица слегка нагрелась. Я поменял питания, и нагрев прекратился, но уже столько мучаюсь и безрезультатно... Может она сгореть в этом случае? Изменено 13 октября, 2018 пользователем Zhekas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zhekas 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба Разобрался, наконец, с проблемой несколько дней назад... Оказалось все в транзисторе на выходе матрицы. Когда я делал плату, то не проверил реальную цоколевку транзистора, а посчитал по стандарту бкэ. В результате ничего не работало, и я решил подключить матрицу прямо к АЦП. В этом и была проблема. Вычислил это осциллографом, взяв готовый код и Arduino Mega2560. Подключив с транзисторами и резисторами матрицу к моему контроллеру, все сразу заработало. Единственное, что потребовалось несколько циклов вычитки, чтобы вывести матрицу из режима насыщения. Чтобы не вводить людей в заблуждения, конфигурация порта была следующая: PORTB |= (0 << SH) | (1 << FM) | (1 << ICG); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zhekas 0 5 января, 2019 Опубликовано 5 января, 2019 · Жалоба Получил первые спектры с прибора, занимаюсь теперь оптимизацией. А как можно "растянуть" сигнал с выхода матрицы, чтобы вместо 1,5-3,5 В был 0,0-5,0 В? В статье предлагается использовать ОУ в инверсном включении с изменением напряжения на + выводе ОУ. Я такую же схему подключил, однако не смог ее корректно настроить. Может есть какие-либо другие способы? https://hackaday.io/project/18126-dav5-v301-raman-spectrometer/log/53099-using-an-arduino-r3-to-power-the-tcd1304ap-ccd-chip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться