Autor Tema: Camara OV7670  (Leído 29729 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:Camara OV7670
« Respuesta #90 en: 13 de Noviembre de 2016, 16:57:28 »
También a mi me salía la barra blanca cortada... no le des importancia a esto, tus fotos saldrán bien!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #91 en: 14 de Noviembre de 2016, 10:19:41 »
pues me lie ha hacer pruebas con la camara y muchas fotos me salen asi:



solo una me salio bien pero desenfocado.ya que tengo que ir ajustando la lente.pero lo raro es que las imagenes desisncronizadas.pare que salen segun el enfoque que realice.
seguire haciendo pruebas.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #92 en: 17 de Noviembre de 2016, 11:53:09 »
pues valla.los dolores de cabeza no han termminado.no se porque las cosas no pueden salir bien a la primera.

por lo que estoy viendo.el problema lo tengo con los programas que uso para recibir los bytes.
el VSP de eltima.tenia el problema de que si enviaba los datos a una carpeta.estos datos estaban separados por el byte 0x00
y si los copio de la ventana ascii.como hay caracteres como el espacio que no se pueden copiar.pues como que le faltan datos.

pero encontre un programa el Free Device Monitoring Studio.que si puedo copiar los datos en formato RAW.y convertirlos en jpg.

resulta de que si pongo las barras de colores.lo hace perfecto.307200bytes.
pero si pongo una imagen,no llegan a esaa cantidad de bytes.asi que hice unas pruebas y resulto loo que ya sospechava.
faltan bytes!!!

envie del 0x00 al 0xff y resulto que faltan los bytes 0x11 y 0x13.como las barras no tienen estos bytes pues funcionan bien.
pero las imagenes solo me salian algunas si da la casualidad de que estos bytes no estan entre los datos.
asi que no se que programa podra pasarme bien los datos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:Camara OV7670
« Respuesta #93 en: 17 de Noviembre de 2016, 12:33:55 »
No entiendo bien... dondes pierdes los datos? al guardar en fifo o al transferir desde un archivo .raw a .jpg?

Como te comenté, usé el programa ffmpeg... y no tuve problemas. El único temita es que es un poco difícil y poco intuitivo de usar, pues se controla desde la consola de comandos. Pero si quieres probar, te puedo ayudar.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #94 en: 18 de Noviembre de 2016, 12:11:40 »
hola luism.gracias por tu voluntad en ayudarme.la verdad que sin tu ayuda esto habria tirado para largo.cuando todo funciona a la primera
el control de esta camara no es tan dificil.pero como depende de tantas cosas,pues simpre hay errores.

el programa que comentas es vastante complicado de manejar.y por eso no me puse con el.pero para pasar el RAW a JPG esta solucionado.
ya encontre el programa Easy2convert RAW to JPG 2.3  y funciona perfectamente.lo unico es que el RAW tiene que tener un determinado numero
de bytes para que haga la conversion.si no.no funciona.en mi caso pongo los 307200bytes y hace la convesion bien.

referente al problema que tenia con el programa Free Device Monitoring Studio.con respecto a los caracteres que se perdian 0x11 y 0x13
me di cuenta de que era porque tenia activado el control de flujo Xon/Xoff

por lo visto la camara ya estaba funcinando bien de hace bastante tiempo.en la fifo se guardaban bien las imagenes.el error estaba
al extraerlas por la usart.ya porque algunos programas no funcionaban de la forma que yo queria.o porque no sabia manejarlos.

aqui esta el fruto de casi 5 meses desde que que empeze el tema.ufff como pasa el tiempo.





Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:Camara OV7670
« Respuesta #95 en: 18 de Noviembre de 2016, 12:19:38 »
Excelente!!!! ((:-)) ((:-)) ((:-)) :-/ :-/ :-/ :mrgreen: :mrgreen: :mrgreen:

Ahora puedes empezar a jugar con distintas configuraciones para ajustar color, contraste, brillo, tamaños, etc.
Lamentablemente, la documentación es exacta y tendrás que probar experimentalmente.
Tiene función para tomar fotos en condiciones de poca luminosidad pero no la probé nunca!

Muchas felicitaciones!!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #96 en: 18 de Noviembre de 2016, 19:01:33 »
gracias. luismh tendrias por ahi la configuracion para capturar la imagen en blanco y negro? me gustaria saber como se generan los bytes para este tipo de imagen.
he puesto la configuracion del datasheet pero sale esto:



tengo entendido de que RAW BAYER usa un byte para cada color/pixel y los va  alternando.pero YUV usa 2bytes para cada pixel.
lo que no entiendo es si la imagen ya seria del doble. de 307200bytes.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #97 en: 19 de Noviembre de 2016, 17:45:26 »
he encontrado esta pagina con la configuracion.pero no se como implementarla.

https://gist.github.com/taylanpince/a30199647af85698b10b
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #98 en: 20 de Noviembre de 2016, 17:41:01 »
bueno.sigo con los avances.estube dandole bueltas a la cabeza con respecto a la generacion de una imagen en formato YUV
y pensaba que la imagen saldria en blanco y negro.pero no es asi.es otro formato diferente.nada mas.

lo que pasa es que cada pixel ocupa 2bytes.y esta imagen no cabe en la fifo.pero si puedo guardar media imagen
en la fifo.y seguir leyendo hasta que alcance los 614.400bytes que ocupa este tipo de formato de 640x480
la imagen no saldria bien pero podemos practicar con su funcionamiento.

el formato de salida aparte de la calidad.tambien posibilita el uso de la imagen en diferentes dispositivos.
ya que no todos los aparato o programas son capaces de reproducir diferentes formatos.

por ejemplo.las imagenes RAW BAYER he podido reproducirlas con el programa Easy2Converter.
pero no puedo reproducirlas con el programa Magic Lantern YUV422.sin embargo con este si puedo reproducir una imagen
YUV422.

he generado las barras de colores con el formato YUV422 y esto es lo que he visualizado:

una imagen de 614.400bytes.que son dos bytes por pixel.al contrario del formato RAW BAYER que ocupa un byte por pixel.



es diferente a las barras que ya puse en otra captura.ya que no he encontrado la configuracion correcta.
los colores se ven nitidos.pero no son los clores que les corresponde.si capturamos una imagen se ve esto:



y supongo que sucede esto porque los colores no estan donde deberian.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #99 en: 21 de Noviembre de 2016, 12:24:22 »
aqui traigo un adelanto de los avances que he tenido para la captura de una imagen en blanco y negro.con la señal de luminancia Y

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #100 en: 21 de Noviembre de 2016, 18:26:53 »
es posible que en la imagen en color este bien.pero al reproducirla con un programa no compatible no se vea bien.
habria que buscar uno que lo fuera.pero ahora mismo no tengo mucho tiempo para experimentar con esto.

asi que me he puesto a experimentar con el dato de la luminancia. Y

hay varias formas de ordenar los datos de la imagen en la memoria de la camara con el formato YUV422.
serian YUYV,YVYU,VYVU,UYVY.

el problema es que este formato usa 2bytes por pixel.y eso son 614.400bytes.y esta imagen no cabe en la FIFO.
pero si solo usamos los bytes de luminancia,la imagen de 640x480 en blanco y negro si cabria en la FIFO.

pero para hacer esto habria que dividir la señal Pclk que entra al pin WCK del AL422B.se podria poner
una bascula JK entre medias.

por estos motivos la imagen en blanco y negro de arriva aparece cortada.porque estoy extrayendo la mitad de los datos.
es decir de la señal YUYV extraigo YY.la otra mitad de los datos que hay en la FIFO.los UV solo estan ocupando espacio.
si pudiera configurar la camara para generar solo los datos de luminancia,no habria que poner la bascula JK.
ya que no estariamos guardando los datos UV en la FIFO.pero no se si esto es posible.

seguire buscando.pero si no lo encuentro,pondre la bascula.


cuando solucione esto.estoy pensando en reproducir la imagen directamante de la camara.a algun interfaz de imagen.
se me ocurre que podria poner a la salida de la camara sin pasar por la FIFO.un conversor digital-analogico.
descartando los datos UV.asi tendria una señal analogica de la luminancia.y con las señales de sincronismo.
formaria otra señal para el sincronismo del cuadro y lineas.

no se como funciona una GLC.pero si fuera compatible,igual podria implementarlo.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #101 en: 27 de Noviembre de 2016, 17:23:02 »
Pues como ya que logre hacer funcionar la camara.voy a analizar e intentar explicar a mi entender como gestiona la camara
los datos de la imagen segun su formato.

La imagen en el formato RAW BAYER RGB.usa un byte por pixel y tiene una distribucion un tanto curiosa.
como se explica aqui: http://www.siliconimaging.com/RGB%20Bayer.htm

la imagen en VGA tiene 640x480.si usamos otra resolucion pues tendriamos imagenes mas pequeñas que ocuparian menos espacio.
640x480= 307.200bytes. y estos son los bytes que va a generar la camara por cada cuadro.

esta es una imagen del generador de barras de colores.son 8 en total.aunque la blanca se vea partida.



y estas otras dos imagenes son los datos con los que se integra la imagen:


principio de los datos de la imagen:




final de los datos de la imagen:





ahora bamos a analizar los datos.

como se puede ver en la primera imagen de los datos.estos alternan entre diferentes grupos de datos.
desde la direccion 0x00 a la 27fh(640d) que pertenece a la primera linea horizontal.

puede notarse como el ultimo dato de la linea horizontal contiene e valor 0x00.esto es igual para todas las lineas.

tambien se puede notar como los primeros bytes corresponderian con la banda blanca del generador de barras.
y los ultimos tambien son de la banda blanca.ya que son los mismos valores.

los ultimos datos de la imagen.que son los de la banda blanca.tienen mas de 80 bytes.
que son los que corresponden a la segunda linea horizontal.pero que teniendo en referencia el 0x00 de la direccion 27fh
nos queda indicado que es el principio de la segunda linea.

los valores
d5 c6 d5 c6 d5 c6......  conforma el color blanco.pero es una tonalidad.si he visto que
hay una coincidencia en el formato RAW BAYER entre lineas horizontales.ya que coinciden asi:

para el blanco:

d5 c6 d5 c6 d5.... 640bytes por linea
c6 d5 c6 d5 c6.... 640bytes
d5 c6 d5 c6 d5....
c6 d5 c6 d5 c6....


si ponemos en el Hexplorer estos datos:
hay que enviar los valores d5 c6 en un total de 307200bytes y obtendriamos el color blanco

pero los datos de las lineas horizontales hay que intercalarlos para obtener el formato RAW BAYER







aunque no es un blanco total.


el magneta sigue la secuancia:

d5 17 d5 17 d5
17 d5 17 d5 17
d5 17 d5 17 d5
17 d5 17 d5 17

y la imagen es:



el verde suige la secuencia:

17 d5 17 d5 17
d5 17 d5 17 d5
17 d5 17 d5 17
d5 17 d5 17 d5

y la imagen es:



es curioso que aunque sean bytes iguales la imagen sea diferente.pero esto es prque se ha empezado con otra secuencia diferente.











cuando los 307.200bytes que conforman la imagen son identicos.se obtiene una tonalidad entre el negro 0x00 y el blanco 0xff

si utilizaramos el valor 0x7f que es 127 en decimal.se obtendria una imagen en gris.ya que le estamos dando el mismo
valor de luminosidad a cada pixel.











esto de abajo es la secuencia RAW BAYER.
R G R G R
G B G B G
R G R G R
G B G B G


para entender como funciona esta secuencia.he puesto estos valores manualmente.esta secuencia es del color verde:

00 ff 00 ff 00.... todas las tineas tienen 640bytes.
ff 00 ff 00 ff...
00 ff 00 ff 00...
ff 00 ff 00 ff...

este es el resultado:



esta secuencia corresponde al color rojo:

ff 00 ff 00 ff.... todas las tineas tienen 640bytes.
00 00 00 00 00...
ff 00 ff 00 ff...
00 00 00 00 00...

este es el resultado:



esta secuencia corresponde al color azul:

00 00 00 00 00.... todas las tineas tienen 640bytes.
00 FF 00 FF 00...
00 00 00 00 00...
00 FF 00 FF 00...

este es el resultado:




bueno.esto es lo que he aprendido realizando un monton de pruebas.ya que no estaba muy seguro del funcionamiento.
ahora ya lo tengo bastante claro.es posible que internamente la camara tenga la opcion de transformar los datos RAW BAYER RGB
a imagenes de blanco y negro.y que no hiciera falta el doble de memoria que usa un formato YUV422.

aunque tampoco se si los satos serian los mismo respecto a la calidad.de todas formas estoy esperando a recibir
una bascula JK para dividir el CLK y asi coger solo los datos de luminancia.mas adelante pondre el proyecto
pero por ahora lo estoy limpiando un poco.
« Última modificación: 27 de Noviembre de 2016, 17:57:10 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #102 en: 04 de Diciembre de 2016, 15:06:59 »
pues ya limpie el codigo.y pongo el archivo para que los descargueis.

este codigo sirve tanto para una camara con FIFO integrada como para una a la que le fabriquemos el circuito con el AL422 externo.

para la camara con FIFO.los pins HREF,STR y PWDN quedaran libres.ademas tal y como se ve en la imagen.hay que soldar 2 resistencias de 4k7 entre SIOC y SIOD a +3.3v





yo me he montado un circuito multiproposito.es decir,una placa para hubicar el PIC18F87K22 de la forma mas compacta y versatil posible.aparte de poder trabajar a diferentes voltages.
desde 3.3v,5 o superiores.ya que monto un regulador integrado.pero que hay que combinar con el Vreg interno del pic.para ello hay un interruptor para conmutar.
tambien le he dotado de un conector microUsb para alimentar el circuito con un cargador de mobil standar.y un conector micro ICSP para la conesion del Debugger en circuito.
aparte de hubicaciones para los Cristales.aunque en este circuito no hacen falta.

estoy pensando en mandar a hacer las PCB a china.pero como es la primera vez estoy en la duda si hare bien el prototipo y no vendra con errores.
aunque hacer esta placa a mano se te va casi todo el dia.





para realizar la conexion con este circuito.yo recomiendo imprimir la pagina del componente y señalar cada pin que se valla a utilizar.

estos son los pin:

   ;PORTC,3=pin44 SCL1      ;para I2C
   ;PORTC,4=pin45 SDA1      ;para I2C
   ;PORTC,5=pin46         ;reset de la OV7670
   ;PORTC,6=pin37 TX1      ;eusart1 (poner resistencia serie de 1k)
   ;PORTJ,7=pin42         ;conexion a WRST de la FIFO
   ;PORTJ,6=pin41         ;conexion a RRST de la FIFO
   ;PORTJ,5=pin40         ;conexion a Vsync de la camara
   ;PORTJ,4=pin39         ;conexion a WR = WE o WEN del AL422
   ;PORTJ,3=pin59         ;conexion a OE del AL422
   ;PORTJ,2=pin60         ;conexion a RCK del AL422
   ;PORT3,3=pin77         ;conexion a XCLK de la camara(no se usa en la version con fifo integrada)
   ;PORTH             ;puerto de entrada para el bufer de la FIFO.

el pin 77 REFO del pic es una salida de 16Mhz.y no se usa para la camara con fifo porque esta ya tiene su oscilador integrado de 12Mhz.esta frecuencia es necesaria incluso para que funcione
el puerto SCCB de la camara.hay unos limites de frecuencia maxima y minima.que si los sobrepasamos la camara no funcionara.

en la camara con FIFO.solo hay que realizar estas conexiones y funcinara.en la camara sin FIFO hay que tener en cuenta cuando se fabrique el circuito para el AL422.que tenemos que
poner una puerta logica NAND entre HREF y WE de la fifo.

es decir.conectar HREF a una de las entradas de la NAND y WE a la salida de la NAND. y asi la otra entrada de la NAND se convierte en el pin WR.en realidad es como si pusieramos
un interruptor que cuando lo habilitaramos(WR).solo se grabaran datos a la FIFO cuando se active Href.que es cuando se pasan los datos de cada linea horizontal.
el componente es el SN74LVC1G00DBVRG4 sirve para 3.3v con encapsulado SOT23-5

asi lo explica este esquema:






en el archivo OV7670_18f87k22.inc   hay comentados dos tipos de configuracion. la que genera una imagen RAW BAYER RGB  VGA. y la que genera las barras de colores tambien en el mismo formato.
hay que descomentar y comentar otra para segun lo que queramos usar.

el pin TX del pic lo usaremos para enviar la imagen a un archivo.el cual convertiremos en un formato de imagen para visualizarlo.

hay varios programas de monitor serie que pueden capturar los datos.pero no todos los mandan a un archivo de forma correcta.

uno que si que funciona es el Advanced Serial Port Terminal 6 de Eltima Software.

y funciona de la suiguiente manera:

una vez que conectemos el conversor USB-SERIAL a nuesto ordenador.se creara un puerto.el programa debe de cogerlo automaticamente.

crearemos una nueva sesion.eligiremos el puerto y una velocidad de 57600 baud.lo demas no lo tocaremos.abriremos la sesion.seleccionarems DataView.y luego OpenPort.
luego clicaremos en Receive ASCII/binary file.escribiremos el nombre con el que queremos guardar el archivo con la extension .raw

ya solo queda enviar los datos serie y recibir los 307.200bytes.estos datos se enviaran al archivo que creamos con la extension .raw

ahora solo queda convertir el archivo .raw en .jpg con la aplicacion Easy2Converter RAW to JPG 2.3  y tendremos la imagen lista.

si pasamos la imagen a una velocidad de 115200baud tambien nos sale bien la imagen y es mas rapido de pasar los datos.
para eso hay que cargar en el archivo Eusart.inc  el valor .34 en el registro SPBRG1. en vez del valor .69 que es para 57600baud.

la imagen sale asi:



pero si quisieramos pasarla mas rapido todabia a 256000baud.la imagen saldria distorsionada.



supngo que habria que adaptar mejor la señal y aislarla tambien.pero lo mejor es esperar un poco y nos quitamos de enredos.

bueno esto es todo.mas adelante ire poniendo otras configuraciones.si es que me da tiempo despues de hacer funcionar esto:

http://www.todopic.com.ar/foros/index.php?topic=47097.0













« Última modificación: 04 de Diciembre de 2016, 15:12:37 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re:Camara OV7670
« Respuesta #103 en: 21 de Diciembre de 2016, 13:08:36 »
Gran trabajo groundman!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Camara OV7670
« Respuesta #104 en: 23 de Diciembre de 2016, 11:30:27 »
gracias jeremylf.estoy ansioso a recibir las TFT de 2.4" 

haber si se me resisten menos que la camara OV7670.que me ha dado vastantes dolores de cabeza.
Montando mi primera impresora 3D (Raprep Prusa i3)


 

anything