|
AT91SAM7S64 и SAA7113H, Реально ли и как? |
|
|
|
Jun 12 2007, 12:24
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515

|
Объясните, пожалуйста, как работает SAA7113H. Не могу разобраться в доке. http://www.nxp.com/pip/SAA7113H_V2.htmlКаким образом кадр можно отцифровать и передать в проц? На выходе есть 8-ми битный интерфейс, но как это всё работает? Задача стоит такая: получить монохромную картинку 320x240 (2 цвета, один кадр - 9600 байт), найти центр масс того белого пятна, что на ней будет и передать координаты (X, Y) по COM порту. Памяти контроллера хватает, вычисления тоже вроде очень простые, real time не требуется (т.е. можно хоть 2 кадра в секунду тока обрабатывать). Как это всё можно сделать?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Jun 12 2007, 12:45
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
На этом чипе никак. См. ссылку http://electronix.ru/forum/index.php?showt...mp;#entry260293Цитата(Pasha 111 @ Jun 12 2007, 15:54)  Объясните, пожалуйста, как работает SAA7113H. Не могу разобраться в доке. http://www.nxp.com/pip/SAA7113H_V2.htmlКаким образом кадр можно отцифровать и передать в проц? На выходе есть 8-ми битный интерфейс, но как это всё работает? Задача стоит такая: получить монохромную картинку 320x240 (2 цвета, один кадр - 9600 байт), найти центр масс того белого пятна, что на ней будет и передать координаты (X, Y) по COM порту. Памяти контроллера хватает, вычисления тоже вроде очень простые, real time не требуется (т.е. можно хоть 2 кадра в секунду тока обрабатывать). Как это всё можно сделать?
|
|
|
|
|
Jun 12 2007, 15:10
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
У этого видео-АЦП выход сделан по стандарту ITU-R BT 656 Его вам и надо изучить чтобы понять как брать данные. Но к сожалению там довольно большие скорости и в DSP процах как Blackfin для него есть специальные порты. В процессорах общего применения такого порта нет и надо химичить. У ST получилось, но они пока не публикуют эту инфу, но скоро наверно выложат. Цитата(Pasha 111 @ Jun 12 2007, 17:35)  Прочёл всю ветку, но большую частью не понял, так как никогда раньше эти вопросом не занимался.
Есть ли какие-нибудь примеры использования SAA7113H? Или можно каким-то другим способом получить кадр с камеры?
|
|
|
|
|
Jun 12 2007, 21:45
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515

|
Вот нашел кое-что: http://www.cmucam.org/wiki/HardwareКак я понял, там используется FIFO буфер на 1 МБ. Т.е. кадр идёт сначала туда, а потом вытягивается процессором. Для меня это наиболее подходящий вариант, т.к. не надо ставить никаких ПЛИС, как предлагают ставить в других ветках форума, которые я находил. Во, и схемку нашел http://www.cmucam.org/attachment/wiki/Docu...3_datasheet.pdf
|
|
|
|
|
Jun 13 2007, 06:38
|

Местный
  
Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852

|
Цитата(Pasha 111 @ Jun 12 2007, 19:24)  Объясните, пожалуйста, как работает SAA7113H. Не могу разобраться в доке. http://www.nxp.com/pip/SAA7113H_V2.htmlКаким образом кадр можно отцифровать и передать в проц? На выходе есть 8-ми битный интерфейс, но как это всё работает? Задача стоит такая: получить монохромную картинку 320x240 (2 цвета, один кадр - 9600 байт), найти центр масс того белого пятна, что на ней будет и передать координаты (X, Y) по COM порту. Памяти контроллера хватает, вычисления тоже вроде очень простые, real time не требуется (т.е. можно хоть 2 кадра в секунду тока обрабатывать). Как это всё можно сделать? Работал с функциональным аналогом SAA7113 ADэшным видеодекодером ADV7181. В принципе можете использовать именно его, тогда смогу посоветовать что-то конкретное.
|
|
|
|
|
Jun 13 2007, 12:01
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515

|
Спасибо за ответы. 2 rat: Решение должно быть максимально простым и дешевым. ADV7181 стоит в 2 раза дороже и конструктивно менее удобен (64 ножки против 44 и шаг 0.5 а не 0.65), хотя наверное даже лучше, чем у филипса  2 bzx: Есть долгий опыт программирования АРМ7 процессоров (плюс есть готовая плата с ним), и устройство хочется сделать побыстрее, поэтому разбираться а АВР32 не охота. Ну и >200 выводов - это перебор для тако задачки  Мне вариант с FIFO очень понравился. По вышеупомянутой ссылке на схему платы CMUCAM'а нашёл, что буфер там от фирмы Averlogic. http://www.averlogic.com/dualport_sarm.asp?protype=FIFOsНа eFinde нашел тот, что там стоит - al4v8m440. Стоит 600 рублей! Он 8-ми мегабитный. Если кадр 720х625, то получается 1440*625*8 = 7.2 мегабита. Если брать только половину строк, то будет менее 4-х мегабит, но такой буфер в продаже не нашел. 3-х мегабитный есть (примерно 300 рублей), но его не хватает  Собственно такой вопрос: а кто еще выпускает аналогичные FIFO буферы?
|
|
|
|
|
Nov 14 2007, 08:46
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Люди, поможите, у меня не записывается по I2C в регистр 0F (Chrominance gain control) SAA7113H ничего.  (( Во все остальные записывается а в этот - нед. Чё делать?
|
|
|
|
|
Nov 14 2007, 10:03
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(Saratan @ Nov 14 2007, 11:46)  Люди, поможите, у меня не записывается по I2C в регистр 0F (Chrominance gain control) SAA7113H ничего. Старший бит в 0? Если 1, то может и не писаться. Хотя странно. Есть возможность проверить на другом кристалле?
|
|
|
|
|
Nov 19 2007, 08:05
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Цитата(KAlex @ Nov 14 2007, 14:03)  Старший бит в 0? Если 1, то может и не писаться. Хотя странно. Есть возможность проверить на другом кристалле? Вроде как меняли камень, та же фикня. В этом регистре у меня число 15, т.е. старший бит на сколько я понимаю = 0.
|
|
|
|
|
Nov 19 2007, 10:01
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Ещё такой вопрос, я правильно понимаю, этот АЦП после конфигурации по И2Ц будет постоянно выдавать оцифрованные кадры по VPO0-7? В том плане, что ненада ему говорить мол захвати кадр какой-нить командой?
|
|
|
|
|
Nov 19 2007, 12:05
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Цитата(aaarrr @ Nov 19 2007, 14:15)  Правильно. Будет гнать поток постоянно, даже без сигнала на входе. А читается из него что - значение по сбросу (0x2a)? Читается 15. У меня на VPO висит полуровня, AOUT = 0...
|
|
|
|
|
Nov 19 2007, 12:38
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Цитата(aaarrr @ Nov 19 2007, 16:22)  Странно: из регистра 0x0F читается 0x0F, а с остальными все в порядке. Похоже на программный глюк. После сброса там точно 0x2a должно быть. Код LPC2294CEClear(); //Ресет САА for(long i=1;i<1000000;i++) {} LPC2294CESet(); for(long i=1;i<10000000;i++) {} printf( "Tr1 \n\r" );
for(char i=1;i<=23;i++) { saa7113WSub(i, Saa7113InitMass[i]); //Запись байта Saa7113InitMass[i] в регистр i for(long j=1;j<10000000;j++) {} printf("%d = %d\n\r", Saa7113InitMass[i], saa7113RSub(i));
while(saa7113RSub(i)!=Saa7113InitMass[i]) //Чтение байта из регистра i { printf("Error #%d\n\r", i); saa7113WSub(i, Saa7113InitMass[i]); for(long j=1;j<1000000;j++) {} } printf("%d\n\r",i); }
//Функция чтения байта
unsigned char saa7113RSub(unsigned char Sub) { I2CSub = Sub; // задать функцию wr_rd = 1; //установить признак чтения end_rd = 0; //сбросить признак окончания чтения I2CONCLR = 0xFF; // сбросить все флаги I2C I2CONSET = 0x40; // разрешение I2C I2CONSET = 0x20; // передать условие START I2C
while (end_rd == 0); // ожидать окончания чтения return I2DAT; //возврат прочитанного байта }
//Функция записи байта
void saa7113WSub(unsigned char Sub, unsigned char data_I2C) { I2CSub = Sub; // задать функцию I2Cwr_byte = data_I2C; // задать байт данных для записи wr_rd = 0; //установить признак записи I2CONCLR = 0xFF; // сбросить все флаги I2C I2CONSET = 0x40; // разрешение I2C I2CONSET = 0x20; // передать условие START I2C }
//функция-обработчик прерывания от I2C -------------------------------------------- static void I2CInterrupt() { switch(I2STAT) { case (0x08): // было передано условие START I2CONCLR = 0x20; //сброс флага START I2C I2DAT=72; //передача адреса устр на шине и признака записи (W) break; case (0x10): // было передано условие повторный START I2CONCLR = 0x20; //сброс флага START I2C I2DAT=73; //передача адреса устр на шине и признака чтения (R) break; case (0x18): // был передан адрес ведомого + W, получен ACK //передача адреса I2DAT=I2CSub; break; case (0x28): // был передан байт данных, получен ACK switch(wr_rd) { case (0): //передача байта данных I2DAT=I2Cwr_byte; break; case (1): // передать условие START I2C I2CONSET = 0x20; // повторный START break; default: break; }
break; case (0x40): // был передан адрес ведомого + R, получен ACK I2CONCLR = 0x04; //сброс флага ACC I2C, чтобы возвратить NOT ACK break; case (0x58): // был получен байт данных, возвращен ACK I2CONSET = 0x10; // передать условие STOP I2C end_rd = 1; //установить признак окончания чтения break; default: break; } I2CONCLR = 0x08; // сброс прерывания от I2C } Вродебы всё идёт так как и должно итти, я имею в виду чтение там, запись...
|
|
|
|
|
Nov 20 2007, 06:56
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Цитата(Сергей Борщ @ Nov 19 2007, 17:25)  for(long volatile i=1;i<1000000;i++) {} Иначе оптимизатор выбросит весь цикл и задержки не будет. Да вроде есть... Меняю условие меняется задержка. У меня IAR.
|
|
|
|
|
Nov 20 2007, 08:17
|
Группа: Новичок
Сообщений: 8
Регистрация: 2-08-07
Пользователь №: 29 524

|
Цитата(Сергей Борщ @ Nov 20 2007, 12:03)  Включите оптимизацию и задержка скорее всего "магически" исчезнет. Ведь внутри этого цикла ничего не происходит, т.е. с точки зрения компилятора он не влияет на программу, значит его можно выкинуть. volatile указывает, что цикл вам все же нужен. А проверить можно не меняя задержку, а посмотрев листинг. А с SAA7113 не работал, по остальному не подскажу. Спасибо, буду иметь в виду.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|