Autor Tema: Invoco a los genios del foro  (Leído 7973 veces)

Desconectado sik_gerar

  • Fabricante amateur
  • Veterano
  • Airsofter
  • ***
  • Mensajes: 1.379
  • Karma: +0/-0
  • Liado que no es poco
    • xkcd
Re: Invoco a los genios del foro
« Respuesta #30 en: Diciembre 28, 2010, 01:15:47 am »
y no ha dicho que no funcione, es que él se dedica a hardware y no tanto a software, y en el lion la parte que más tira es el software, y no tanto un hardware que el ya tiene muy estudiado y que es idéntico en el cheetah y el lion.

su problema es conseguir que el codigo del lion tome forma de verdad, y que desarrolladores de codigo se impliquen, nada mas.

Desconectado OniAkai

  • Novatisimo
  • Mensajes: 30
  • Karma: +0/-0
Re: Invoco a los genios del foro
« Respuesta #31 en: Diciembre 28, 2010, 01:41:17 am »
Ya hombre, ya, lo he pillao. Lo que pasa que no obtiene mucha colaboración... no? dos años de desarrollo y no ha llegado a mucho... y eso que el hardware promete mucho... yo estoy estudiandome el código a ver qué puedo hacer pero... entre la faena que ya tengo y la pereza que me da... ya te dije que de electrónica sé poco y encuentro mucho código que no entiendo, por que va directamente realacionado con el micro (ya sé, ya sé, tengo que empollarme el manual del ATmega644P) pero bueno... algo habrá que hacer!!!

PD soñar es gratis: OLED con la munición y mucha más info, mucha más protección de las baterías, motores, trazadoras más eficientes, etc.

Desconectado sik_gerar

  • Fabricante amateur
  • Veterano
  • Airsofter
  • ***
  • Mensajes: 1.379
  • Karma: +0/-0
  • Liado que no es poco
    • xkcd
Re: Invoco a los genios del foro
« Respuesta #32 en: Diciembre 28, 2010, 11:36:15 am »
La parte coñazo de programar para un micro es siempre el bajo nivel, hacer los métodos y funciones de control del micro. Una vez tienes eso, hacer códigos encima es mucho mas comodo, pero para tener los mas recursos posibles en ese momento has tenido que ser eficente antes.

Personalmente, yo termino los exámenes el 1 de febrero, a partir de entonces tendre bastante tiempo libre. Como para entonces habras Leido bien todo el código  y el manual,  puedo echarte una mano y lo que te diga lo vas a aprovechar al máximo.

Otra cosa que te recomiendo es que hagas de este post un pequeño Blog con lo que vas haciendo, asi como unos pequeños tutoriales de como hacer las cosas, para que mas gente se anime a ayudar.

Desconectado OniAkai

  • Novatisimo
  • Mensajes: 30
  • Karma: +0/-0
Re: Invoco a los genios del foro
« Respuesta #33 en: Diciembre 28, 2010, 02:38:30 pm »
Por cierto en airsoftmechanics están hablando de ti... jajajaja

Cita de: hunterseeker5
I realize I shouldn't be pointing fingers, but where are you sik_gerar? Over the summer it seemed like you had us all taken care of.  :P

Desconectado sik_gerar

  • Fabricante amateur
  • Veterano
  • Airsofter
  • ***
  • Mensajes: 1.379
  • Karma: +0/-0
  • Liado que no es poco
    • xkcd
Re: Invoco a los genios del foro
« Respuesta #34 en: Diciembre 28, 2010, 05:01:18 pm »
jeje ya he contestado por alli, la verdad es que si, le di un buen empujón a aquello en verano.

le he metido yo un poco de caña tambien a kiwi_mat, a ver si saca el codigo y le echamos un vistazo.

en cuanto a la info.. ya te digo que estaría bien decir lo que hay que usar para hacer esto:

1. descargas:
- AVRstudio
- tortoiseSVN
- codigo
- manual del microcontrolador ATMEL

2. instalar AVRstudio, tortoiseSVN
3. crear un repositorio local con tortoise y bajar el codigo en la carpeta repositorio que hemos creado localmente
4. leer y escribir. chupao!

Desconectado OniAkai

  • Novatisimo
  • Mensajes: 30
  • Karma: +0/-0
Re: Invoco a los genios del foro
« Respuesta #35 en: Diciembre 28, 2010, 07:22:14 pm »
qué es el precocking??

Desconectado sik_gerar

  • Fabricante amateur
  • Veterano
  • Airsofter
  • ***
  • Mensajes: 1.379
  • Karma: +0/-0
  • Liado que no es poco
    • xkcd
Re: Invoco a los genios del foro
« Respuesta #36 en: Diciembre 28, 2010, 07:31:16 pm »
dejar el muelle apretado para que cuanto aprietes el gatillo el muelle no tenga que retroceder el pistón y luego soltarlo, sino soltarlo directamente.

se gana tiempo de reacción, interesante sobre todo para los marksman (DMS).

Desconectado OniAkai

  • Novatisimo
  • Mensajes: 30
  • Karma: +0/-0
Re: Invoco a los genios del foro
« Respuesta #37 en: Diciembre 28, 2010, 08:53:28 pm »
Coño, pero como sabe el Lion en que posición está el motor o el pistón para hacer eso?? además será muy impreciso, no??

Oye otra cosa el Lion "apaga" el arma si: "Shut down if battery can not maintain 7 volts after 60 seconds on non use" creo que es demasiado justito, no? por ejemplo mi batería es de 7'4V... en cambio encuentro esto también: #define mMINVOLTAGE 6000 ¿?

Además te digo: el código puedo entenderlo aunque no sepa qué coño hace pero me estoy leyendo el manual del 644P y no me entero...

Me iría muy bien saber qué es lo que debería hacer el Lion en condiciones idóneas, más que nada para empezar a hacerme un diagrama de flujo o algo... no sé, saber el proceso que debe realizar... es que me siento perdidísimo. Como te dije yo estudié Ing. Informática (acabé hace más de 5 años, tengo 28) y me dediqué al marketing on-line y al diseño digital así que la programación la tengo un poco oxidada (nada irremediable) pero es que la electrónica... En fin...

Un saludo.

Desconectado sik_gerar

  • Fabricante amateur
  • Veterano
  • Airsofter
  • ***
  • Mensajes: 1.379
  • Karma: +0/-0
  • Liado que no es poco
    • xkcd
Re: Invoco a los genios del foro
« Respuesta #38 en: Diciembre 28, 2010, 09:46:14 pm »
Coño, pero como sabe el Lion en que posición está el motor o el pistón para hacer eso?? además será muy impreciso, no??

si estás alimentando el motor y estas sensando la corriente que absorbe para hacer ese trabajo, en cuanto detectas que la corriente consumida cae, puedes pensar que el motor no tiene carga, y por tanto que el muelle está suelto. no te creas que es tan impreciso, ten en cuenta que el programa corre a 20Mhz, si esa función es llamada cada milisegundo, y los ciclos suelen ser de unos 65ms, pues tu error puede ser de unos.. 2ms asi a bulto.. un 3% de error de parada no me parece mucho.

Oye otra cosa el Lion "apaga" el arma si: "Shut down if battery can not maintain 7 volts after 60 seconds on non use" creo que es demasiado justito, no? por ejemplo mi batería es de 7'4V... en cambio encuentro esto también: #define mMINVOLTAGE 6000 ¿?

es posible que los comentarios estén anticuados. es algo que intenté arreglar porque yo soy muy de comentar pero el codigo que cogí no lo estaba demasiado. mira los usos de ese define, y en caso de que no sean modificados en su uso... pues si, el valor mínimo será 6v. la verdad es que se puede guardar como variable para en un futuro poder ajustarlo via interfaz, pero por ahora ocupa menos así.

Además te digo: el código puedo entenderlo aunque no sepa qué coño hace pero me estoy leyendo el manual del 644P y no me entero...

Me iría muy bien saber qué es lo que debería hacer el Lion en condiciones idóneas, más que nada para empezar a hacerme un diagrama de flujo o algo... no sé, saber el proceso que debe realizar... es que me siento perdidísimo. Como te dije yo estudié Ing. Informática (acabé hace más de 5 años, tengo 28) y me dediqué al marketing on-line y al diseño digital así que la programación la tengo un poco oxidada (nada irremediable) pero es que la electrónica... En fin...

Un saludo.

el manual de un microcontrolador no te dice nunca las respuestas maravillosamente, es un texto árido y tedioso (siempre, da igual la compañia) que te indica lo que el micro hace o puede hacer, con ejemplos casi siempre en ensamblador, lo cual tampoco ayuda demasiado. normalmente leer la ayuda del compilador suele dar ideas mejores en cuanto a qué codigo usar para hacer lo mismo que lo que viene en el manual, pero antes has tenido que pasar por el manual para saber qué hacer.


breve intro a los microcontroladores...

... y como modificar lo que tu sabes para aplicarlo mejor aqui. los que quieran involucrarse un poco verán en este tochopost un buen punto de arranque

un microcontrolador es algo mucho mas sencillo que un ordenador, pero a la vez mas complicado. porque? la respuesta es sencilla: porque no hay un SO que haga las cosas por nosotros, sino que todas las operaciones de bajo nivel las debemos hacer nosotros, muchas veces con punteros rígidos (hardlinks) a zonas de memoria mapeadas en la ram/rom/rom de datos.
Además sus recursos son muy limitados, y debemos casi a veces contar los ciclos que va a ejecutar para saber si le dará tiempo a procesar una interrupción antes de que desborde otro contador que genere una nueva interrupción, y cosas asi. por tanto, intenta no hacer funciones que consuman demasiada cpu, e incluso haz simplificaciones cuando sea necesario si ganas espacio o tiempo.
Por otro lado para controlar el mundo real solo tenemos pines que controlamos en tiempo discreto, es decir, que leemos por ellos y modificamos su valor solo cada cierto tiempo (numero de ciclos). por ello cuando se hace un regulador se debe hacer en tiempo discreto, y si hacemos un control de potencia tenemos herramientas como el PWM.

al ir a programar un controlador lo primero que hay que hacer es adaptar el hardware. estos micros llevan un reloj interno, pero hay que programar los fusibles para decirle que queremos usarlo, a qué frecuencia se tiene que poner, como vamos a usar los pines de entradas y salidas, etc. estos fusibles en tu caso ya están programados y solo se puede hacer con un programador externo, no mediante I2C (el programador que tu tienes).

lo siguiente es preparar el hardware básico de IO para empezar a trabajar. como habrás visto en el main nada mas empezar se selecciona el hardware y los pines, y toda esta información está en el manual, es simplemente guardar en los registros de configuración una serie de bits que definen el funcionamiento de cada pin y de cada timer, AD, contadores... como nota he de decir que aunque esto se suele hacer al principio y no se modifique a lo largo del programa, SI que se puede modificar con algunas limitaciones para usar un pin para varias cosas distintas, simplemente añadiendo el codigo de configuracion en el punto deseado del programa. normalmente para hacer esto se paran las interrupciones y alguna cosa mas, pero como tampoco vas a dedicarte a esto no me explayo.

por ultimo, hay que generar el codigo de las interrupciones y el main; las interrupciones estarán generadas por flancos de señal externa en pines, o por desbordamiento de timers o de contadores. todos estos valores se guardan en registros del micro, aunque muchas veces se utilizan macros para acceder a estas direcciones, para mas info de esto mira la ayuda del compilador. estas interrupciones saltarán cada vez que se cumpla una instruccion logica, y harán que el micro salte del punto en el que esté del main para ir al código de la interrupción, limpiará el flag de interrupción y ejecutará el codigo. dependiendo de la prioridad de las interrupciones, es posible que estando el puntero de programa en una interrupcion se salte a otra interrupción. una vez terminado el codigo de la interrupción se vuelve al anterior punto del programa, segun el puntero de programa estuviera (el stack se guarda automaticamente no hay que preocuparse de guardar).

por tanto el codigo del main debe siempre estar en un bucle infinito while(1) mientras que las funciones de las interrupciones deben de ser lo más cortas posibles, llegando al minimo de guardar un resultado o lectura en una variable, activando un flag, y devolviendo el control al main en el caso más extremo. de esta manera con flags en main podemos controlar el flujo del programa.


por tanto, volviendo al Lion, el programa debe:

-arrancar en el main, configurar el micro, leer de rom datos de procesos anteriores
-entrar en el bucle principal y esperar en una maquina de estados y responder a los cambios
-leer y escribir informacion al mundo real a traves de las interrupciones
-comunicarse por los puertos usart/isp

en el main lo que hace generalmente es hacer comprobaciones de seguridad, y despues ejecutar cosas. no se debe hacer nada sin saber que el hardware está correcto, y hay que pensar con "bucles" y con lapsos de tiempo, teniendo en cuenta que solo hay un puntero de programa, y que este puntero se irá moviendo por el main y por las interrupciones.


lo que yo quería hacer cuando ví el codigo tan poco apañado que tenía terry era cambiar desde las bases la forma de trabajar.

terry hizo que el micro se colgara en el main hasta que un timer llegaba a 0, momento en el que entraba en el main, trabajaba, y al terminar su "ronda en el bucle" se colgaba hasta que pasara otro milisegundo (siempre es capaz de responder a interrupciones, no obstante). funcionaba porque su main siempre tardaba menos de 1ms, pero de no ser así esta aproximación deja de funcionar, y si queremos programadores que hagan cosas no podemos permitirnos esta limitación.

Mi idea era usar las interrupciones para ejecutar el código en etapas, seccionado en partes pequeñas, de manera que su procesado fuera rápido y no molestara al main, pero a la vez estuviera temporizado en ciclos de 1ms como él venía haciendo. de esta manera, aunque se hacen más interrupciones visto desde fuera, éstas son más cortas de procesar y por tanto no afectan tanto a los calculos del main. por otro lado, los programadores que vengan despues pueden introducir su código en el main tranquilamente sabiendo que aunque superen 1ms de procesado, no van a afectar a las tareas peligrosas del micro, como son los controles de seguridad o la activación de las salidas, que tienen que ir rigurosamente temporizados.

espero que te haya ayudado esto algo, si tienes dudas específicas me parecen más sencillas de resolver que esto..