SparkFun Forums 

Where electronics enthusiasts find answers.

HDL's and logic cells!
By Akshay
#173999
Hi all..

I am working on a project in which i need to interface a camera with the OV528 (sparkfun product ID SEN-12804). I run the code exactly as it is given in the wiki example in the link below.
http://linksprite.com/wiki/index.php5?t ... L_level%29

The code works on the arduino and I recieve data but the same code does not work on the ML507.
I am out of ideas. The camera does not seem to even acknowledge the reset command on the FPGA.
I am attaching the code running on the FPGA at the end of this post...
What could be the reason??
This is intriguing.. Please help me out..
Thanks
#include <stdio.h>
#include "xstatus.h"
#include "xparameters.h"
#include "xuartlite_l.h"
#include "serial.h"
void SendResetCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();
#define UARTLITE_BASEADDRESS XPAR_UARTLITE_0_BASEADDR
unsigned char reset[4] = {0x56,0x00,0x26,0x00};
unsigned char sendphoto[5] = {0x56,0x00,0x36,0x01,0x00};
unsigned char stopphoto[5] = {0x56,0x00,0x36,0x01,0x03};
unsigned char MH,ML;
int a=0x0000;
int main()
{

char incomingbyte;
//NewSoftSerial mySerial(4,5); //Configure pin 4 and 5 as soft serial port
int j=0,k=0,count=0; //Read Starting address

unsigned char EndFlag=0;
//unsigned char reset[4] = {0x56,0x00,0x26,0x00};
//unsigned char sendphoto[5] = {0x56,0x00,0x36,0x01,0x00};
//unsigned char stopphoto[5] = {0x56,0x00,0x36,0x01,0x03};





//void setup()
//{
// Serial.begin(19200);
// mySerial.begin(38400);
//}



SendResetCmd();
sleep(4);
//delay(4000); //After reset, wait 2-3 second to send take picture command

SendTakePhotoCmd();

//while(mySerial.available()>0)
while (!XUartLite_IsReceiveEmpty(UARTLITE_BASEADDRESS))
{
//incomingbyte=mySerial.read();
incomingbyte = XUartLite_RecvByte(UARTLITE_BASEADDRESS);
}
char b[32];

while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();

// delay(25);
usleep(25000);
while (!XUartLite_IsReceiveEmpty(UARTLITE_BASEADDRESS))
{
incomingbyte = XUartLite_RecvByte(UARTLITE_BASEADDRESS);
k++;
if((k>5)&&(j<32)&&(!EndFlag))
{
b[j]=incomingbyte;
if((b[j-1]==0xFF)&&(b[j]==0xD9)) //Check if the picture is over
EndFlag=1;
j++;
count++;
}
}

for(j=0;j<count;j++)
{ if(b[j]<0x10)
XUartLite_SendByte(XPAR_RS232_UART_2_BASEADDR,b[j]);
} //Send jpeg picture over the serial port

}
while(1);
return 0;

}

//Send Reset command
void SendResetCmd()
{
serXmit1(reset,4);
}

//Send take picture command
void SendTakePhotoCmd()
{
serXmit1(sendphoto,5);
}

//Read data
void SendReadDataCmd()
{
MH=a/0x100;
ML=a%0x100;
unsigned char readphoto[16] = {0x56,0x00,0x32,0x0c,0x00,0x0a,0x00,0x00,MH,ML,0x00,0x00,0x00,0x20,0x00,0x0a};
serXmit1(readphoto,16);
a+=0x20; //address increases 32,set according to buffer size
}

void StopTakePhotoCmd()
{
serXmit1(stopphoto,5);
}