Bueno creo que ya tengo una versión del firmware decente
.
Hay un pequeño "bug" que hace que cuando la EEPOM se llene y empieza a sobreescribir desde el principio, a veces se desmadran un poco los indices,
pero bueno por ahora lo dejaré así
. Como digo esto solo ocurre si se llena la EEPROM.
Por lo demás , parece que todo va bien, se graban las RPMs, la tensión de la bateria y los valores PPM de la entrada de servo. Para ello he utilziado
el siguiente código que se ejecuta cada 50us, pro lo tanto esa es la resolución que obtengo al leer los valores del pulso PPM.
if (PIR1bits.TMR1IF == 1) // Interrupt each 50 us.
{
// Ya se habia detectado pulso High
if (highPPM1)
{
// Sigue HIGH, count++
if (IN_PPM1 == 1)
{
if (countPPM1 > PPM1_MAX) // Error, pulso demasiado largo
countPPM1 = 255;
else
countPPM1 += 5; // Sube 50 us
}
// paso a LOW
else
{
if ((countPPM1 >= PPM1_MIN) && (countPPM1 <= PPM1_MAX))
valuePPM1 = countPPM1 - PPM1_MIN;
else
// valuePPM1 = 0;
highPPM1 = 0;
countPPM1 = 0;
}
}
else
{
// Se detecta pulso HIGH
if (IN_PPM1 == 1)
{
countPPM1 = 0;
highPPM1 = 1;
}
}
TMR1H = TIMER1_PRELOAD / 256;
TMR1L = TIMER1_PRELOAD % 256;
PIR1bits.TMR1IF = 0;
}
La comunicación via USB con el PC parece que también va bien.
PICHELI puede funcionar de 2 modos:
- Conectado al puerto USB, en este modo se pueden ejecutar los comandos usando el puerto serie virtual (CDC) , incluido un comando START, que
permite ver los valores de la medida instantaneos ( modo traza), pero en este caso no se graban en EEPROM. En este modo la placa se alimenta del puerto
USB si no está conetada a la bateria.
- En modo autónomo, "on board", se alimenta de la bateria y los datos leidos ( RPMs, bateria y PPM) se registran en EEPROM.
La lista de comandos soportados se muestran con el comando HELP.
VER : Muestra la veriosn del firmware
OPEN : Abre el LOG leyendo los indices de la EEPROm del PIC.
SYNC : Sincroniza el LOG , salvando los indices a la EEPROM interna del PIC.
CLEAR : Borra los indices del LOG, los datos de la EEPROM externa no se borran fisicamente.
SETR n : Pone el intervalo (n) de grabación del LOG.
GETR : Obtiene el intervalo de LOG.
SETC n : Pone el factor de corona ( n. de imanes en corona).
GETC : Obtiene el factor de corona.
LEDM n m : Pone el mode m del LED n ( 1 o 2).
GLED n : Obtiene modo LED n
LEDV n f : Activa o desactaiva (f) el modo aviso de bateria baja en LEDN n
GLEV n : Obtiene modo aviso de LED n
SETV : Pone el valor limite de bateria baja.
GETV : Obtiene el valor limite de bateria baja.
SETP f : Activa o desactaiva (f) el modo auto-pausa.
GETP : Obtiene modo auto-pausa.
TIME : Obtiene fecha ultimo log grabado en EEPROM.
DUMP : Descarga del LOG de formato : "tiempo,RPM,VBAT,RPM"
LEN : Obtiene tamaño actual del LOG
START : Activa modo traza.
STOP : Desactiva modo traza.
Os pongo los fuentes (para MCC18) , el hex de PICHELI y el bootloader USB de Microchip modificado para 8Mhz
Fuentes V1.1Hex V1.1Ya sabeis, si quereis programar el PIC con este HEX, primero hay que grabar "a mano" el bootloader USB de Microchip , una vez hecho
esto ya solo hay que usar la aplicacion PICDEM USB Demo Tool cada vez que se quiera grabar el HEX en el PIC via USB. Cuidado con los fuses
hay que dejar la configuracion actual de la placa (8 Mhz ).
S2 a tod@s