roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 21:17

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: TCM8240MD
СообщениеДобавлено: 26 авг 2010, 23:02 
Не в сети

Зарегистрирован: 22 июл 2008, 10:07
Сообщения: 38
Откуда: Россия, Екатеринбург
прог. языки: BascomAVR | Delphi | VB | C
Привет всем! у кого-нибудь есть исходник для работы с этой камерой? (инит + получение кадра) Мож цеплял кто-нибудь к STM32, SAM7S, LPC ?? Поделитесь опытом пожалуйста...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 26 авг 2010, 23:07 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
artymen вроде бы смог заставить ее работать. У меня пока безуспешно...

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 08:51 
Не в сети

Зарегистрирован: 22 июл 2008, 10:07
Сообщения: 38
Откуда: Россия, Екатеринбург
прог. языки: BascomAVR | Delphi | VB | C
В общем нашел!!! Японец настроил камеру на вывод картинки по I2C на Ардуйно, а с ардуйно на ПК через UART.

Прога на компе юзает библиотеку OpenCV для визуализации полученного массива байт.

Оригинал статьи: http://fenrir.naruoka.org/archives/000775.html

Изображение

Код написан для Arduino I2C Library

Правильный код инициализации:
Код:
byte cam_config [] [2] = (
(0x02, 0x00), / / Set Camera Active
(0x02, 0x40), / / Set Camera Reset
(0x03, 0x00), / / PLL
(0x02, 0x00), / / Set Camera Active
(0x0B, 0x00), / / White Line OFF
(0x58, 0x20), / / Exposure Time
(0x05, 0x80), / / Frame Rate Quarter (00) / Half (40) / Full (80)
(0x1A, 0xFF), / / HCOUNT = 0x3FF = 1023
(0x1B, 0xB3), / / VCOUNT = 0x21B = 539
(0x1C, 0xA1), / /
(0x11, 0x4A), / / Changed b / c of PICSIZE
(0x14, 0x23), / / Changed b / c of PICSIZE
(0x04, 0x0B), / / RGB 160x120 OUT ON
(0x1F, 0x0C), / / SPCOUNT = 0xBC3 = 3011 / / Doesn't match formula?
(0x1E, 0x23), / / SPCOUNT [7:0]
(0x0E, 0x00), / / According to the AppNote it should be 0xAC for this PICSIZE?
);


int i;
for (i = 0; i <sizeof (cam_config) / sizeof (cam_config [0]); i + +) (
Wire.beginTransmission (0x3D);
Wire.send (cam_config [i] [0]); Wire.send (cam_config [i] [1]);
Wire.endTransmission ();
)


And then the image data from the camera will pull in i2c. When reading from an address 0x3E, 4bytes data size ( little endian format ) output First, the data itself will continue to flow. Arduino and written language, the following code.

Код:
if (WireExt.beginReception (0x3E)> = 0) (
unsigned long count;
(
byte header_count = 0;
while (header_count <4) (
buf = WireExt.get_byte ();
* ((Byte *) (& count) + header_count) = buf; / / Little Endian
header_count + +;
)
)

while (count -> 0) (
byte b = WireExt.get_byte ();
/ / Do something with b
)
WireExt.endReception ();
)


Чел обращает внимание, что дата прёт в little endian, байты перевернуть прийдется

Код:
byte b_first, b_second;
byte r, g, b;
r = (b_first & 0x1F) <<3;
g = ((b_first & 0xE0)>> 3) | ((b_second & 0x07) <<5);
b = (b_second & 0xF8);


FPGA на платке в данном приере не используется...

полный код:
Код:
// I2C通信ライブラリを取り込む
#include <Wire.h>
#include <WireExt.h>
// カメラモジュールのアドレス設定
const int configAddress = 0x3D;
const int cameraAddress = 0x3E;
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
int buttonState = 0;         // variable for reading the pushbutton status
int loop_count;

void setup() { 
  Serial.begin(115200);  //シリアル通信開始 
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);     
 
  // I2C通信開始
  Wire.begin();
 
  byte cam_config[][2] = {
      {0x02, 0x00},  // Set Camera Active
      {0x02, 0x40},  // Set Camera Reset
      {0x03, 0x00},  // PLL
      {0x02, 0x00},  // Set Camera Active
      {0x0B, 0x00},  // White Line OFF
//      {0x58, 0x20},  // Exposure Time - Original
      {0x58, 0x10},  // Exposure Time
      {0x6D, 0xA1},  // ABW_SW -> ON
      {0x05, 0x80},  // Frame Rate Quarter(00)/Half(40)/Full(80)
      {0x0D, 0x01},  // Optional ?
      {0x1A, 0xFF},  // HCOUNT = 0x3FF = 1023
      {0x1B, 0xB3},  // VCOUNT = 0x21B = 539
      {0x1C, 0xA1},  //
      {0x11, 0x4A},  // Changed b/c of PICSIZE
      {0x14, 0x23},  // Changed b/c of PICSIZE
//      {0x04, 0x0B},  // RGB  160x120  OUT ON - Original
      {0x04, 0x0C},  // RGB  128x96  OUT ON
      {0x1F, 0x0C},  // SPCOUNT = 0xBC3 = 3011 // Doesn't match formula?
      {0x1E, 0x23},  // SPCOUNT[7:0]
      {0x0E, 0x00},  // According to the AppNote it should be 0xAC for this PICSIZE?
      };
 
  int i;
  for(i = 0; i < sizeof(cam_config) /  sizeof(cam_config[0]); i++){
    Wire.beginTransmission(configAddress);
    Wire.send(cam_config[i][0]); Wire.send(cam_config[i][1]);
    Wire.endTransmission();
  }
 
  loop_count = 0;
}

void loop() { 
  byte buf = 0;


  if(loop_count < 4){
    // 4枚は捨てる
    if(WireExt.beginReception(cameraAddress) >= 0){
      WireExt.endReception();
    }
    loop_count++;
    return;
  }
 
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {     
    // turn LED on:   
    digitalWrite(ledPin, HIGH); 
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    return;
  } 

  if(WireExt.beginReception(cameraAddress) >= 0){
    unsigned long count=0;
    {
      byte header_count = 0;
      while(header_count < 4){
        buf = WireExt.get_byte();
        *((byte *)(&count) + header_count) = buf;  // Little Endian
        header_count++;
      }
    }

    count/=2;
    while(count-- > 0){
      byte b_first, b_second;
      b_first = WireExt.get_byte();
      b_second = WireExt.get_byte();
      byte r, g, b;
      r = (b_first & 0x1F) << 3;
      g = ((b_first & 0xE0) >> 3) | ((b_second & 0x07) << 5);
      b = (b_second & 0xF8);
      Serial.write(r);
      Serial.write(g);
      Serial.write(b);
    }
    WireExt.endReception();
  }
 
  // 処理のために少し待つ
  //delay(1000);
}


Вложения:
Комментарий к файлу: Исходник для либы Arduino, FPGA дезигн
camera_breakout_r5146.zip [1.56 МиБ]
Скачиваний: 0


Последний раз редактировалось yakuzaa 27 авг 2010, 09:34, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 09:21 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
У меня проблема возникла на этапе пайки. Несмотря на то что успешно паяю АРМы, RAM-память, 3 камеры пришли в негодность, незнаю по какой причине. (то ли статика, но вроде все заземлено, то ли еще чего)...

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 09:59 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Чем паял? Почему решил что из-за пайки не работает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 10:02 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
И станцией Lukey852D (паяльником) и ИК станцией. Решил не работает потому, что по шине управления I2C камера не отвечает

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 10:03 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Проверял, на этой же плате, какое-нибудь другое устройство с I2C?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 10:15 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Конечно проверял, иначе бы таких выводов не делал. Проверял EEPROM, датчик давления I2C все работает общается, а камера молчит

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 10:22 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
А есть какие-нибудь внешние дефекты после пайки? Я просто спрашиваю - буду скоро тоже тестировать эту камеру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:01 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Никаких внешних дефектов не было. Изловчился (думал что сжигаю камеру) за 40 секунд все ножки припаивать, но толку мало...

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:02 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
40 секунд не много ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:04 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Говорят что они ОЧЕНЬ чувствительны к статике.
Антистатический браслет использовал при работе? На чем паял?

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:12 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
У меня на столе лежит металлический лист, заземленный, и одеваю антистатический браслет, также заземленный. И паяльник станции также заземлил.
По поводу 40 секунд: не много, учитывая время перерыва между 4мя сторонами группы контактов камеры

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:17 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
А схему какую использовал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TCM8240MD
СообщениеДобавлено: 27 авг 2010, 11:24 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Отсюда: forum51/topic6313-150.html#p125739

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO