Jump to content

    

Проблема с TCD1304DG

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
4 часа назад, Zhekas сказал:

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

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

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

Share this post


Link to post
Share on other sites
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 - тоже не работало.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
38 minutes ago, Plain said:

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

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

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

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

Share this post


Link to post
Share on other sites
6 часов назад, Zhekas сказал:

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

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

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

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

LD, LDD, LDS, ST, STD, STS

Share this post


Link to post
Share on other sites

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

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

Edited by Zhekas

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this