Qorivva: Line Scan Camera Tutorial

cancel
Showing results for 
Search instead for 
Did you mean: 

Qorivva: Line Scan Camera Tutorial

Qorivva: Line Scan Camera Tutorial

This tutorial covers the specific details of obtaining data from the line scan camera on the Qorivva TRK-MPC5604B board. This tutorial will help students familiarize themselves with how to interface the camera with the microcontroller, how to configure GPIO pins to create clock signals and also how to utilize the microcontroller's ADC to read the data from the camera. Outside of control algorithms, configuring the camera is one of the more complex tasks necessary to create a Freescale Cup Vehicle.

1. Overview

In this exercise students will access the line scan camera, create a clock signal and create the initialization pulse which tells the camera to begin the exposure period. This tutorial will not describe line recognition or line following algorithms - these concepts are beyond its scope.

Students will:

  • Open the example file using Codewarrior
  • Build a project
  • Download the code to the board
  • connect the microcontroller to the camera via the motor control board
  • Run the program
  • view the camera data, clock and Si pulse on an oscilloscope

To successfully complete this exercise, students will need the following board and development environment:

  • TRK-MPC5604B
  • Motor Drive Board Version A
  • Freescale Cup TRK-MPC5604B compatible Car Kit
  • CodeWarrior for Microcontrollers v 2.8
  • P&E Micro Toolkit
  • Freescale Line Scan Camera
  • USB Cord
  • Knowledge of how Pointers and arrays are utilized in C

2. Hardware

  Read the Obtain Data From Line Scan Camera overview article for general information on the camera, ADC, and GPIO microcontroller configuration settings.

Connect the sensors, motor drive board and microcontroller of your car according to the TRK-MPC5604B chassis build instructions

3. Set up the Hardware: Line Scan Camera/Microcontroller Hardware Setup

It is crucial for an engineer to have the proper test equipment and tools for the job. In this case, without an oscilloscope, students will not be able to verify whether the proper signals are being sent to the camera, or that the camera is working properly.

4. Build the Code

If there is more than one project in your project view, make sure the proper project is the focus. The most reliable way to do this is to right click the project and choose Build Project as shown below. You can also go to the Project menu and choose the same command.

If errors are encountered, look in the Problems view and resolve them. For now ignore any warnings.

5. Download/Debug/Run

Download the code to your board, once this process is complete resume the project so that the code runs.

6. Learning Step

What will happen:

the function ImageCapture() is called in main.c with a pointer to the first element in the array. This function completes the processes necessary to capture images using the camera.

To become more familiar with Pointers and Arrays - navigate to the C Programming Tutorial. Knowledge of Pointers and Arrays is a pre-requisite for understanding the Camera Code.

Functions

void CAMERA(void)
{
  TransmitData("****Line Sensor Test****\n\r");
  SIU.PCR[27].R = 0x0200; /* Program the Sensor read start pin as output*/
  SIU.PCR[29].R = 0x0200; /* Program the Sensor Clock pin as output*/
  for(j=0;j<2;j++)
  //for(;;)
  {
  SIU.PCR[27].R = 0x0200; /* Program the Sensor read start pin as output*/
  SIU.PCR[29].R = 0x0200; /* Program the Sensor Clock pin as output*/
  SIU.PGPDO[0].R &= ~0x00000014; /* All port line low */
  SIU.PGPDO[0].R |= 0x00000010; /* Sensor read start High */
  Delay();
  SIU.PGPDO[0].R |= 0x00000004; /* Sensor Clock High */
  Delay();
  SIU.PGPDO[0].R &= ~0x00000010; /* Sensor read start Low */ 
  Delay();
  SIU.PGPDO[0].R &= ~0x00000004; /* Sensor Clock Low */
  Delay();
  for (i=0;i<128;i++)
  {
  Delay();
  SIU.PGPDO[0].R |= 0x00000004; /* Sensor Clock High */
  ADC.MCR.B.NSTART=1; /* Trigger normal conversions for ADC0 */
  while (ADC.MCR.B.NSTART == 1) {};
  adcdata = ADC.CDR[0].B.CDATA;
  Delay();
  SIU.PGPDO[0].R &= ~0x00000004; /* Sensor Clock Low */
  Result[i] = (uint8_t)(adcdata >> 2);  
  }
  Delaycamera();
  //printlistall();
  }
  printlistall();
}

Calling the Function

within the main for loop in main.c, call the camera function using the following code:

for (;;) 
  {
  CAMERA();
  }

Variables

Creates an 128x1 array for camera data information

volatile uint8_t Result[128]; /* Read converstion result from ADC input ANS0 */  

Setting threshold. (This can give you a simple view of what your camera sees without connecting it to a scope)

#define THRESHOLD (2.0 /*volts*/ / 0.03125) // 8-bit A/D = 31.25mV/bit

CAMERA(); // read line sensor, 128x1 pixel result returned in Result[128] array

// print result
for (i = 16; i < 112; ++i) // ignore the first and last 16 bits in the camera frame
  if (Result[i] < THRESHOLD)
  TransmitCharacter('1'); // black (low intensity)
  else 
  TransmitCharacter('0'); // white (high intensity)

Sample Code Download Link

Qorivva Sample Code Download Link

Alternative Examples

Application Note 4244 and Software.

Other Qorivva Tutorials:

1. Qorivva: Blink LED

2. Qorivva: Drive DC Motor Tutorial

3. Qorivva: Turning A Servo

4. Qorivva: Line Scan Camera Tutorial

Links

Qorivva Overview

https://community.nxp.com/docs/DOC-1019

External

TRK-MPC5064B Freescale Webpage
TRK-MPC5064B Freescale Reference Manual
TRK-MPC5064B Freescale Schematic

Labels (1)
Comments

I couldn't open the file "Sample.zip.zip". Anyone can help me?

Cheers,

This page should be fixed now.  I am going through the others to make sure they are all pointing to the correct link.

In the example code, why they don't take advantage the EMIOS module of the microcontroller? I think it's easier and precise than doing it manually......

Cheers,

Ok, thank you, but still I cannot open the file I get an error when I tried to open it.

Cheers,

I added Application Note 4255 under Alternative Examples which does just that!! 

I encourage crowd sourced content.  If you have a better way of doing it and would like to share please do so.

How I can share my code in the page?

In the upper right hand column of this page you will see Actions, there should be a edit option.  When you click that it will go into a rich text editor and away you go.  Once done, click submit for approval to publish.

When you in the edit mode there is an icon ">>>" and in that you can select code formatting of various languages.  It will then apply color coding and line numbering based on that language.

I clicked on "Actions" and it appeared only three options: "Action Alerts", "Notifications" and "Tasks". I think I have no rights to edit this page.

I have requested our IT team look into it.  You should be able to edit.  You might try becoming a follower of the space that contains the document to edit but I'm told that shouldn't matter.

I have tried with becoming a follower, but it doesn't change anything.

Hi, I can`t understand exactly why threshold is defined like that.

What`s the meaning of the line " (2.0 /*volts*/ / 0.03125) " ?

Where is the variable volts? Is it a just comment?

Please answer me

thank you

Version history
Revision #:
2 of 2
Last update:
‎09-10-2020 03:01 AM
Updated by:
 
Contributors