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

Поработал сегодня над прибором. Запустил таймеры с задержкой 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 независимо от локальности  засветки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, Zhekas сказал:

asm volatile("SBI %0, 0x02" :: "I"(_SFR_IO_ADDR(PORTB)));

Но она почему-то упорно отказывается работать с регистром TCCR0A, может кто с таким сталкивался?

Логично. Адрес TCCR0A находится за пределами досягаемости команды SBI. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 - тоже не работало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Диаграмма отлаживается элементарно — все ключевые моменты алгоритма выводятся на ноги, т.е. выставляете вместо АЦП строб на вывод и смотрите прибором, соответствует ли на ней его место требованию производителя, хотя, есть большое подозрение, что Вы таки продолжаете попытки заставить работать микросхему от инверсных сигналов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, Plain said:

Диаграмма отлаживается элементарно — все ключевые моменты алгоритма выводятся на ноги, т.е. выставляете вместо АЦП строб на вывод и смотрите прибором, соответствует ли на ней его место требованию производителя, хотя, есть большое подозрение, что Вы таки продолжаете попытки заставить работать микросхему от инверсных сигналов.

Я использую сигналы, которые в бесконечном цикле давали на входе осциллографа сигнал, изменяющийся при затемнении/освещении матрицы. Они - инверсные сигналы даташита.

По умолчанию у меня SH = 1, а ICG = 0 и FM = 0;

Промерял время повторного срабатывания АЦП в отладчике - 28,7 - 28,8 мкс. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Zhekas сказал:

время конверсии

Время чего???

6 часов назад, Zhekas сказал:

А какую комбинацию можно использовать для достижения данного адреса?

LD, LDD, LDS, ST, STD, STS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал поставить сегодня начальное состояние PORTB |= (0 << SH) | (1 << FM) | (1 << ICG); Результат - нуль.

Может быть стоит попробовать новую матрицу подключить, поскольку что я не пытаюсь сделать, результат нулевой. Я в самом начале, как только подключил детектор, то перепутал + и - питания. При этом сработала защита блока питания, а матрица слегка нагрелась. Я поменял питания, и нагрев прекратился, но уже столько мучаюсь и безрезультатно... Может она сгореть в этом случае?

Изменено пользователем Zhekas

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался, наконец, с проблемой несколько дней назад...

Оказалось все в транзисторе на выходе матрицы. Когда я делал плату, то не проверил реальную цоколевку транзистора, а посчитал по стандарту бкэ. В результате ничего не работало, и я решил подключить матрицу прямо к АЦП. В этом и была проблема. Вычислил это осциллографом, взяв готовый код и Arduino Mega2560. Подключив с транзисторами и резисторами матрицу к моему контроллеру, все сразу заработало. Единственное, что потребовалось несколько циклов вычитки, чтобы вывести матрицу из режима насыщения.

Чтобы не вводить людей в заблуждения, конфигурация порта была следующая:

PORTB |= (0 << SH) | (1 << FM) | (1 << ICG);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получил первые спектры с прибора, занимаюсь теперь оптимизацией. А как можно "растянуть" сигнал с выхода матрицы, чтобы вместо 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...