roboforum.ru

Технический форум по робототехнике.

TCM8240MD

ARM7, ARM9, ARM11 etc.

TCM8240MD

Сообщение yakuzaa » 26 авг 2010, 23:02

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

Re: TCM8240MD

Сообщение galex1981 » 26 авг 2010, 23:07

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

Re: TCM8240MD

Сообщение yakuzaa » 27 авг 2010, 08:51

В общем нашел!!! Японец настроил камеру на вывод картинки по 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);
}
Вложения
camera_breakout_r5146.zip
Исходник для либы Arduino, FPGA дезигн
(1.56 МиБ) Скачиваний: 0
Последний раз редактировалось yakuzaa 27 авг 2010, 09:34, всего редактировалось 1 раз.
yakuzaa
 
Сообщения: 38
Зарегистрирован: 22 июл 2008, 10:07
Откуда: Россия, Екатеринбург
прог. языки: BascomAVR | Delphi | VB | C

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 09:21

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

Re: TCM8240MD

Сообщение Сергей » 27 авг 2010, 09:59

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

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 10:02

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

Re: TCM8240MD

Сообщение Сергей » 27 авг 2010, 10:03

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

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 10:15

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

Re: TCM8240MD

Сообщение Сергей » 27 авг 2010, 10:22

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

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 11:01

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

Re: TCM8240MD

Сообщение Сергей » 27 авг 2010, 11:02

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

Re: TCM8240MD

Сообщение SkyStorm » 27 авг 2010, 11:04

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

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 11:12

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

Re: TCM8240MD

Сообщение Сергей » 27 авг 2010, 11:17

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

Re: TCM8240MD

Сообщение galex1981 » 27 авг 2010, 11:24

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

След.

Вернуться в ARM

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

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