TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
30 de Agosto de 2014, 01:10:20

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
347815 Mensajes en 39019 Temas por 40635 Usuarios
Último usuario: IgnacioV
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  * PROYECTOS * (Moderadores: J1M, jfh900, MGLSOFT, Modulay, Sasián, LABmouse)
| | |-+  Mini PDA
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] 2 Marcar como favorito Imprimir
Autor Tema: Mini PDA  (Leído 13216 veces)
jgpeiro06
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 276



« : 22 de Agosto de 2012, 18:32:04 »

Hola a todos,

después de unos 3 meses de trabajo os traigo mi ultimo proyecto, aun sin terminar. Una pequeña PDA basada en un Cortex-M4 a 170Mhz... Realmente aun no tiene ninguna utilizad final, puede ser una agenda, un reloj de muñeca, un calendario, un osciloscopio, una consola de juegos...no se, ya se verá.
De momento me he preocupado en aprender varias cosas que no había hecho nunca, como mandar a fabricar el PCB, diseñar una carcasa a medida en 3D con Google Sketchup o programar los drivers a bajo nivel en C++.

El esquema electrónico no tiene ningún misterio, con lo mínimo para hacer funcionar el micro y poco más.
 -Circuito de carga de batería. Nunca antes había utilizado un circuito de este tipo y la verdad es que estan muy bien. Solo necesita una resistencia para ajustar la corriente de carga, la batería carga en 15 o 20 min y tiene una autonomía mínima de 1 hora...
 -Conector USB. Aun no he escrito los drivers de USB, de moento solo sirve para cargar la bateria.
 -Conector microSD. Aun no he escrito los drivers para manejar la SD, pero ya lo hice en el pasado con las librerias FatFs y tampoco tiene mucho misterio...
 -Controlador de touch screen. Un pequeño circuito se encarga de leer el touch screen resistivo y entregarnos el valor via SPI.
 -Conector JTAG reducido de 8 pins. He eliminado los que no se utilizaban.


El diseño del PCB tampoco tiene nada de particular. Es un PCB a doble cara, con pistas de 0.15mm, con los componentes en la Top, pistas "locales" trazadas en la Top y pistas "globales" trazadas en la Bottom. Creo que me costaron 10 placas 34€ con gastos de envío incluidos, y los componentes los soldé a mano... Con ese precio nunca mas volveré a realizar una PCB en mi casa.

La carcasa esta bien, me quedo un poco corta, pero esta lo bastante bien. Esta diseñada con el Google Sketchup y el punto de partida es el propio PCB en 3D exportado desde eagle con un plugin. Además utilizé otro plugin en el sketchup para redondear todas las aristas.
Gracias a este plugin del eagle, y a que disponia de todo el tiempo del mundo para medir y re-medir, las ranuras de la carcasa encajan perfectamente en los conectores USB, JTAG y SD.
En la imagen anterior se muestra el PCB creado con el plugin del eagle, pero la carcasa no es la final.

Todo el software esta desarrollado en C++, con el objetivo de estudiar que ventajas e inconvenientes tiene este lenguaje en los sistemas embebidos. He creado unas pocas clases que representan el hw de la placa, para poder manejarlo de manera sencilla desde las capas mas altas del Sw. El C++ te permite modelar los drivers de una manera mas intuitiva y te da muchos más funcionalidades, siempre a costa de mas recursos de CPU...
 -Al final se divide todo en unas 7 clases, organizadas verticalmente, donde las clases superiores son mas genericas y contienen objetos de las clases inferiores que estan mas proximas al Hw.

Por ejemplo, para configurar el touch screen es algo como lo siguiente. Primero inicializamos los objetos de las capas inferiores y se los vamos pasando en la inicializacion de los objectos de las capas superiores.
Código
GeSHi (cpp):
  1. Pin busy = Pin( PIN_MODE_INPUT, PIN_PORT_A, PIN_BIT_2 );
  2. Pin nPenIrq = Pin( PIN_MODE_INPUT, PIN_PORT_A, PIN_BIT_3 );
  3. nPenIrq.setPuPd( PIN_PULL_UP );
  4. Spi spi = Spi( SPI_NUMBER_1, SPI_MODE_MASTER, 100 );
  5. Ads7846 ads7846( spi, busy, nPenIrq );
  6. TouchScreen tsc = TouchScreen( ads7846 );
  7. while(1){
  8. if( tsc.read( x, y ) ){
  9. //...
  10. }
  11. }  
  12.  

La idea es poner una librería de interfaz de usuario sobre la capa de drivers descrita antes, y este ha sido el mejor punto del proyecto....
El micro es muy rápido, cuenta con bastante memoria, tiene FPU, puede manejar un TFT con mucha velocidad, compilador Gcc, según los resultados de CoreMark es el doble de potente que un Pentium 100... pero sin un linux y todas sus librerías asociadas no puedo aprovechar apenas ninguna librería gráfica y me veía obligado a desarrollar una desde cero...
Después de mucho tiempo buscando por internet e intentar portar librerias como Qt, Gtk, Microwindows, MiniGui, Fltk, Woopsi, Glui... por fin encontré Gwen, una librería con muchos widgets, que no depende del SO, que es ansi C++ y que viene preparada para ser facilmente adaptada a cualquier plataforma.
Solo he probado algunos widgets, pero los tiene todos como: label, button, checkbox, tree, listbox, textbox, canvas, windows, tabs, menus... y otra cosa que me gusta es que muchos son "drag and drop", con lo que puedes reorganizarlos como quieras en tiempo de ejecucion.

bueno, espero que os haya gustado. Publicaré las novedades en breve...


« Última modificación: 27 de Febrero de 2013, 17:44:54 por MGLSOFT, Razón: Cambiar los enlaces a imagenes a pedido del autor... » En línea
manutek
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Republica Democratica de Corea Republica Democratica de Corea

Mensajes: 555



« Respuesta #1 : 22 de Agosto de 2012, 20:05:36 »

impresionante ¡¡¡¡   aplauso aplauso la verdad te pasastes terrible el trabajo que te tomastes ...estare siguiendo el hilo y tratando de entender un poco
saludos 
En línea

No es la conciencia del hombre la que determina su ser, sino, por el contrario, es su ser social el que determina su conciencia
peteorito
PIC12
**
Desconectado Desconectado

España España

Mensajes: 92


« Respuesta #2 : 22 de Agosto de 2012, 20:15:55 »

Mola  mucha!! Como te lo has currao!! Por cierto la carcasa de que material es?¿ ¿como la has hecho?
En línea
gera
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 2126


linux - the future is open


« Respuesta #3 : 22 de Agosto de 2012, 22:42:12 »

Que pedazo de trabajo te estas mandando!! Te re felicito por los avances!
Estas usando CMSIS para programarlo?
Saludos!!
En línea


"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein
jfh900
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 3550



« Respuesta #4 : 22 de Agosto de 2012, 23:17:55 »

Fantástico trabajo. Enhorabuena y sigue con el proyecto.

Un saludo
En línea

* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús
MLO__
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 4496

MLO


« Respuesta #5 : 22 de Agosto de 2012, 23:34:07 »

 aplauso aplauso aplauso aplauso aplauso aplauso aplauso

que pedazo de proyecto!!!!   .... excelente ... que nivel jgpeiro ... tan solo observo, porque ni por las curvas alcanzarte jejeje

Saludos
En línea

El papel lo aguanta todo
MGLSOFT
Moderador Local
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7508


MGLSOFT


« Respuesta #6 : 23 de Agosto de 2012, 08:15:02 »

Como humilla este muchacho!!! redhot redhot redhot

Buenisimo, Jpeiro !!!   aplauso aplauso aplauso aplauso aplauso

Como cada aporte tuyo !!! Mr. Green Mr. Green
En línea

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.
sander
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 519



« Respuesta #7 : 23 de Agosto de 2012, 09:49:32 »

Genial el proyecto, gracias por compartirlo

Saludos
En línea

La electronica es el arte de manipular señales electricas que transportan información
Jan Davidse

Visita mi blog
KALLITOS
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Peru Peru

Mensajes: 1201



WWW
« Respuesta #8 : 23 de Agosto de 2012, 10:20:05 »

Muy bueno esta esto.
Jpeiro si no es molestia, con que herramientas soft y hard cuentas para programar ese micro, me ha llamado mucho la atención y me interesaria empezar a jugar.

saludos!!
En línea

A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!
Suky
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 6761


Con Qt...


WWW
« Respuesta #9 : 23 de Agosto de 2012, 15:50:02 »

 Shocked Tremendo trabajo! Felicitaciones  aplauso Un vídeo!  rebotando
« Última modificación: 23 de Agosto de 2012, 16:04:59 por Suky » En línea

jgpeiro06
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 276



« Respuesta #10 : 23 de Agosto de 2012, 15:52:40 »

Citar
Por cierto la carcasa de que material es?
La carcasa esta "impresa" en plástico duro. Mandé el diseño a shapeways y me costo solo 8€ mas gastos de envío. Hay distintos materiales disponibles, yo utilicé este "plástico duro" por ser el mas barato de todos.

Citar
¿Estas usando CMSIS para programarlo?
Bueno, estoy trabajando sobre las librerías que me proporciona ST para manejar los drivers, que a su vez hacen uso de CMSIS.

Citar
...con que herramientas soft y hard cuentas para programar ese micro...
Utilizo el ide Keil uVision y el compilador GCC para ARM.
Para programar/depurar utilizo el ulink2.

En línea
jeremylf
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Peru Peru

Mensajes: 1272



« Respuesta #11 : 24 de Agosto de 2012, 02:40:20 »

Buenisimo, gracias por compartir!!! Estare siguiendo el hilo.
En línea
peteorito
PIC12
**
Desconectado Desconectado

España España

Mensajes: 92


« Respuesta #12 : 24 de Agosto de 2012, 05:36:11 »

Ok gracias!!!
En línea
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 16965



WWW
« Respuesta #13 : 24 de Agosto de 2012, 10:56:07 »

Siempre subiendo el nivel. A tus pies.
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
RICHI777
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1407



« Respuesta #14 : 24 de Agosto de 2012, 12:53:10 »

Felicitaciones jgpeiro !!! como siempre con proyectos innovadores y de alto vuelo. Lo que más me intereso es la elección de gwen, me la agendo.  Viniendo de un persona con tus conocimientos no sabes la horas hombres que ahorras en la búsqueda de una GUI para embebidos.

Saludos !
En línea
sanpic
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 429



« Respuesta #15 : 24 de Agosto de 2012, 13:07:46 »

 Shocked
Monumental lo que has hecho.
Felicitaciones por semejante esfuerzo y dedicación en el proyecto , y muchas gracias por compartirlo.   aplauso aplauso
En línea

IF you_know = true THEN                                 
     share_it
ENDIF
lmtreser
PIC12
**
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 61



WWW
« Respuesta #16 : 24 de Agosto de 2012, 14:34:21 »

Tremendo trabajo. Desde el PCB, la idea y la carcaza. Felicitaciones  aplauso
En línea

Automatismos Mar del Plata" style="border:0
Darukur
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 464



WWW
« Respuesta #17 : 24 de Agosto de 2012, 15:07:46 »

Excelente trabajo! es realmente un logro combinar todas las diferentes areas de conocimiento para lograr un producto.
Vos lo hiciste! Felicitaciones!
En línea

El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/
RICHI777
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1407



« Respuesta #18 : 24 de Agosto de 2012, 15:36:58 »

Hola  jgpeiro te colgué el post en otro foro !. Si tenes tiempo y no te molesta podrías explicar como hiciste la interfaz entre el manejo de display y gwen por lo menos a grandes rasgos.

Saludos !
En línea
jgpeiro06
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 276



« Respuesta #19 : 29 de Agosto de 2012, 13:21:57 »

Citar
Si tenes tiempo y no te molesta podrías explicar como hiciste la interfaz entre el manejo de display y gwen
Yo modifique la clase OpenGL más o menos así:
Código
GeSHi (cpp):
  1. namespace Gwen
  2. {
  3. namespace Renderer
  4. {
  5. OpenGL::OpenGL(){}
  6. OpenGL::~OpenGL(){}
  7. void OpenGL::Begin(){}
  8. void OpenGL::End(){}
  9. void OpenGL::Flush(){}
  10.  
  11. void OpenGL::AddVert( int x, int y, float u, float v ){
  12. TDB2012::Color color = TDB2012::Color( m_Color.r, m_Color.g, m_Color.b );
  13. lcd.drawLine( x, y, x+u, y+v, color );
  14. }
  15.  
  16. void OpenGL::DrawFilledRect( Gwen::Rect rect ){
  17. Translate( rect );
  18. TDB2012::Color color = TDB2012::Color( m_Color.r, m_Color.g, m_Color.b );
  19. lcd.drawRect( rect.x, rect.y, rect.w, rect.h, true, color );
  20. }
  21.  
  22. void OpenGL::SetDrawColor(Gwen::Color color){
  23. m_Color = color;
  24. }
  25.  
  26. void OpenGL::StartClip(){
  27. Gwen::Rect rect = ClipRegion();
  28. }
  29.  
  30. void OpenGL::EndClip(){}
  31.  
  32. void OpenGL::DrawTexturedRect( Gwen::Texture* pTexture, Gwen::Rect rect, float u1, float v1, float u2, float v2 ){
  33. TDB2012::Color color = TDB2012::Color( m_Color.r, m_Color.g, m_Color.b );
  34. lcd.drawRect( rect.x, rect.y, rect.w, rect.h, true, color );
  35. }
  36.  
  37. void OpenGL::LoadTexture( Gwen::Texture* pTexture ){}
  38. void OpenGL::FreeTexture( Gwen::Texture* pTexture ){}
  39.  
  40. Gwen::Color OpenGL::PixelColour( Gwen::Texture* pTexture, unsigned int x, unsigned int y, const Gwen::Color& col_default ){
  41. Gwen::Color c;
  42. c.r = 0; c.g = 0; c.b = 0; c.a = 0xFF;
  43. return c;
  44. }
  45. Gwen::Point OpenGL::MeasureText( Gwen::Font* pFont, const Gwen::UnicodeString& text ){
  46. Gwen::Point p;
  47. //...
  48. return p;
  49. }
  50. void OpenGL::RenderText( Gwen::Font* pFont, Gwen::Point pos, const Gwen::String& text ){
  51. //...
  52. }
  53. }
  54. }
  55.  

y para generar los eventos eventos del raton desde el touchscreen:
Código
GeSHi (c):
  1. while(1){
  2. pressedBck = pressed;
  3. pressed = tsc.read( x,y );
  4.  
  5. if( pressed && !pressedBck ){
  6. dx = x - MousePosition.x;
  7. dy = y - MousePosition.y;
  8.  
  9. MousePosition.x = x;
  10. MousePosition.y = y;
  11. pCanvas->InputMouseMoved( x, y, dx, dy );
  12. pCanvas->InputMouseButton( 0, true );
  13. pCanvas->RenderCanvas();
  14. }else if( !pressed && pressedBck ){
  15. dx = x - MousePosition.x;
  16. dy = y - MousePosition.y;
  17.  
  18. MousePosition.x = x;
  19. MousePosition.y = y;
  20.  
  21. pCanvas->InputMouseMoved( x, y, dx, dy );
  22. pCanvas->InputMouseButton( 0, false );
  23. pCanvas->RenderCanvas();
  24. }
  25.  
  26. delayMs(10);
  27. }
  28.  

Con esto ya tenemos todo. Menos de 100 lineas que nos permiten aprovechar una librería de más de 100 archivos...
En línea
TODOPIC
   

 En línea
Páginas: [1] 2 Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.111 segundos con 24 consultas.