Autor Tema: Diseño de un OSD  (Leído 19113 veces)

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

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Diseño de un OSD
« Respuesta #15 en: 20 de Febrero de 2014, 20:01:57 »
 :shock: :shock: :shocked: :shocked: mas impresionado aún.

 (((:-))) (((:-))) (((:-)))

espero poder hacer algo con esto, gracias por todas tus explicaciones.

Saludos

"Nada es imposible, no si puedes imaginarlo"

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #16 en: 28 de Febrero de 2014, 00:32:04 »
Un video dice más que mil palabras:



La hora que ven en pantalla es la UTC extraida de la trama del GPS (acá, en Argentina estamos en UTC -3)

Me voy a dormir en paz!!!!  :-/ :-/

Saludos!
« Última modificación: 28 de Febrero de 2014, 20:33:25 por elgarbe »
-
Leonardo Garberoglio

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Diseño de un OSD
« Respuesta #17 en: 28 de Febrero de 2014, 01:48:27 »
creo que fui el primero en verlo ((:-)) ((:-))

Felicidades!! (((:-))) (((:-)))
"Nada es imposible, no si puedes imaginarlo"

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Diseño de un OSD
« Respuesta #18 en: 28 de Febrero de 2014, 18:51:42 »
Interesante, ojala más adelante pueda usar un OSD.

Vi tus vídeos, y en uno de ellos vi que tenias un FPV, en otro post vi que estabas probando como para un ...copter, seguro iras a ser un control automático en los 2 sistemas verdad?.

Lo malo que en el video no se ve la forma, se podría saber exactamente que modelo tienes, tu mismo lo construiste o lo compraste? y hasta cuanto peso puede cargar?

Saludos y exelente trabajo.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #19 en: 28 de Febrero de 2014, 19:42:43 »
Hola! tengo un frame para armar un quadcoptero. encargué los motores y esc en octubre del año pasado. en noviembre llegaron a la argentina. como venia rapido el pedido me puse a diseñar pensando en la estabilizacion de un quad... pero pasaron las semanas, empece a avnzar con el diseño y los motores no aparecieron... todabia estan en el correo... paralelo a eso, en navidad me regalaron la cámara y el tx rx de video. yo hacia unos meses que estaba volando el planeador. tiene 1.5 mts de envergadura. no puede cargar mucho peso. medio kilo máximo de equipos y ya estoy medio al limite, entre baterias, cámara, tx video.
como el quad viene lento voy a empezar a montar todo en el avión. aca en Argentina este finde es largo (lunes y martes es feriado) por lo que seguramente voy a estar probando todo esto. ahi, cuando arme el planeador para volar, le saco fotos y las subo.
lo arme hace como 10 años, de un plano y en madera balsa. originalmente era para un motorcito .049 a explosión. yo lo pude probar recien el año pasado con un motor brushless...

lo bueno del osd es que podes aprovechar las lineas no visibles del video para enviar la telemetria a tierra, usando el enlace de video que ya tenes quetener para enviar las imagenes!

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #20 en: 28 de Febrero de 2014, 20:56:01 »
Notaron en el video que cuando está por cambiar el segundo el texto "se mueve" un poco?
Cuando pongo esa misma informacion pero más abajo en la pantalla, es un poco más notorio. Tambien pasa que si el mensaje es muy largo ese efecto se produce mucho peor.
Otra cosa que quizás notaron es que entre cada caracter hay un espacio muy grande, casi del tamaño de un caracter. Bueno, estuve renegando por un buen rato con esos temas y creo haverlos resuelto.

Vamos por el más simple, el de la distancia entre caracteres. Mi código para enviar datos es este:

Código: [Seleccionar]
void TIMER2_IRQHandler(void) {

    if(LPC_TIM2->IR & 0x1){ // Verificamos que la Int es por Match Register 0
        LPC_TIM2->MCR &= ~3; // Deshabilito interrupcion del MR0 del timer 2

    if ((line >= lTop) && (line <= lTop + lWid -1)){ //Cada caracter tiene 7 pixeles de alto
    ltemp = (line - lTop) * 27 - 64;
    LPC_SSP0->DR = ~ltrs[head[0] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[1] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[2] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[3] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[4] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[5] + ltemp]; Wait();
    LPC_SSP0->DR = ~ltrs[head[6] + ltemp]; Wait();
    }
    if ((line >= lBot) && (line <= lBot + lWid-1) && !cUpdate){
    ltemp = (line - lBot) * 27 - 64;
    ntemp = (line - lBot) * 14 - 45;
    LPC_SSP0->DR = ~nums[cLatLon[0] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[1] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[2] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[3] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[4] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[5] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[6] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[7] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[8] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[9] + ntemp]; Wait();
    LPC_SSP0->DR = ~nums[cLatLon[10] + ntemp]; Wait();
    }
    }

    LPC_TIM2->IR |= 0x1; // clear the interrupt
}

Cuando el timer interrumpe porque estoy en la columna donde empieza el texto tengo unos IF que verifican en que línea estoy para saber que mensaje debo enviar. Luego se hace un cálculo de un offset para las tablas de fuentes y voy poniendo uno a uno los datos en el Data Register del SPI. Luego llamo a la macro Wait, la cual tiene este código:

Código: [Seleccionar]
#define Wait() while ( LPC_SSP0->SR & (1 << 4) ); //Espero a que salga el dato completo

Como pueden ver la solucion es simple, me quedo esperando hasta que la bandera Busy esté en 0. O sea, cuando el SPI termine de enviar los datos.
Bueno, el tiempo entre caracteres es el tiempo que le toma al micro calcular el offset, almacenar el dato en el DataRegister e ir a la Macro. En tiempos tan ajustados, cada nanosegundo cuenta.
El tema es que de esta forma no uso el FIFO del SPI. Tranquilamente podría almacenar datos en el DR mientras el FIFO no esté lleno...
Entonces mi nuevo define de la funcion Wait es:

Código: [Seleccionar]
#define Wait() while ( (~LPC_SSP0->SR) & (1 << 1) );

Entonces si no está lleno el FIFO vuelvo enseguida del Wait y puedo almacenar otro dato en el DR ya que se van acumulando en el FIFO. De este modo, los caracteres ya quedan más juntitos.

El segundo problema, el temblequeo de los caracteres me costó un poco más. El indicio estaba en que el temblequeo se daba más o menos cada 1 segundo. Coincide con el data rate del GPS... entonces me di cuenta que cuando se ejecutaba el código de la UART se movia el texto... pensando pensando pensando recorde lo que me habia explicado BrunoF sobre las prioridades de las interrupciones. Lo que seguramente pasaba era que mientras estaba en la rutina del Timer2, escriviendo en pantalla, llegaban caracteres por el UART y por lo tanto me interrumpia la interrupcion del timer... la solucion... establecer la prioridad de cada interrupcion. Al timer 2 le puse la máxima prioridad, 0, a las interrupciones externas la siguiente prioridad, 1 y a la UART la siguiente, 2. De ese modo todo solucionado!

Ahora, mientras se cargan las baterías del sistema de video, estoy esriviendo el código para mostrar la informacion del GPS, lat y long...

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #21 en: 01 de Marzo de 2014, 00:25:57 »
Bueno, seguimos avanzando. Despues de corregir esos temas, estube probando distintas velocidades del SPI para obtener distintas resoluciones.
Y de casualidad descubrí que no todas las velocidades del SPI son "estables" en cuanto a imagen. Dependiendo de que velocidad selecciono obtengo muy buenos resultados o malos resultados. Ya despues explicaré mejor esta parte.

Por ahora este es el resultado que voy consiguiendo:


Notar la resolucion. Son letras de 7x8 pixeles. Tengo que buscar letras más grande que ya estén codificadas para probar...

Saludos!
-
Leonardo Garberoglio

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Diseño de un OSD
« Respuesta #22 en: 01 de Marzo de 2014, 01:26:51 »
Con la esabilidad te refieres al parpadeo que se ve en el texto?
"Nada es imposible, no si puedes imaginarlo"

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #23 en: 01 de Marzo de 2014, 08:52:50 »
Claro, a eso me refiero. Fijate en el último video que puse que las letras están bien formaditas. Hay como un cambio de color interno en la letra, creo debido a la velocidad del SPI que esta altísima. Pero las letras no se mueven. Si la velocidad del SPI no es correcta (ya voy a buscar una explicacion a velocidad correcta o incorrecta) aparece un defecto, las letras se deforman. La parte superior de la letra queda desfasada un poco de la parta inferior... Despues voy a poner un video de lo que digo. Estimo que el tema debe pasar por la resolucion de la cámara. Si con el SPI tengo una velocidad multiplo de la resolucion horizontal de la cámara se ve bien... pero es una teoría... ya lo voy a aprobar...

Ahora estoy buscando alguna Fuente más grande... 14x8 o 10x14.... sino voy a tener que hacer un script para la codificacion de fuentes!!!! pero algo debe haber dando vueltas por ahí....

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #24 en: 02 de Marzo de 2014, 16:21:20 »
Volará?????

Les presento al "engendro OSD"  :lol:  :lol:  :lol:  :lol:



en un rato salgo a probarlo a ver si consigo que el OSD empiece a dar informacion!

deseenme suerte!

Saludos!
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Diseño de un OSD
« Respuesta #25 en: 02 de Marzo de 2014, 16:25:00 »
Suerte! Seguro vuela! El tema también es que aterrice y sobreviva la electrónica :D
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #26 en: 02 de Marzo de 2014, 22:36:30 »
Bueno, por suerte a la tardecita calmó el viento y pude probar....

volo, aterrizó y se salvó todo!!!!  :-/


Tengo varias cosas en que trabajar. Primero tengo que bajar el texto que esta arriba de todo, ya que se pierde con el blanco de las nubes.... o debería ver como poner el fondo negro a las letras...

Otra cosa es que estoy parseando mal la altura o tengo alguna conversion mal, ya que se ven caracteres raros. Ya estube trabajando en eso y mañana espero tener eso funcionando.
Ahora estoy implementando el cálculo de distancia desde el origen. Tambien tengo que implementar el totalizador de corriente para saber cuánta batería me queda, ya que la medicion de tension sirve, pero hay que complementarlo con el totalizador de corriente.

Otra cosa que veo es que como estoy alimentando video y potencia, todo con la misma batería, creo que me mete ruido porque la calida del video es malísima. Tengo otros video mucho mejores y volando más lejos...

una vez que tenga todo funcionando tengo que empear a diseñar un PCB alrededor del micro para dejar de usar la LPCXpresso y semejante armatoste....

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Diseño de un OSD
« Respuesta #27 en: 02 de Marzo de 2014, 22:59:10 »
Una foto del conjunto armado:


Una foto de donde aterricé..... a 2 mts de la cruz!!!



Si no sobrevivía lo dejaba ahí nomas:



Saludos!
-
Leonardo Garberoglio

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Diseño de un OSD
« Respuesta #28 en: 03 de Marzo de 2014, 11:43:08 »
muy bueno elgarbe, es genial cuando ves las cosas funcionando. ((:-))





una vez que tenga todo funcionando tengo que empear a diseñar un PCB alrededor del micro para dejar de usar la LPCXpresso y semejante armatoste....

Saludos!


aún así el circuito esta bastante compacto. me imagino que cuando quede en PCB quedará miniaturizado (((:-))) --> ((:-))
« Última modificación: 03 de Marzo de 2014, 21:45:44 por rivale »
"Nada es imposible, no si puedes imaginarlo"

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Diseño de un OSD
« Respuesta #29 en: 03 de Marzo de 2014, 18:58:08 »
jajaja :D, que tal "engendro".




 

anything