¿Cuál crees que es mi problema?
no todos los 555 son iguales y algunos de ellos no pueden ir tan alto.
si tienes que ir tan alto, busca una parte que haga eso. Todos conectan el capacitor al pin de salida y usan una resistencia de bajo valor.
hay otras formas, a menudo más simples, de llevarte allí.
editar: armo una pequeña rutina rápidamente, para demostrar el concepto.
//measure rc time to charge to '1' on RC_READ pin
uint32_t rctmr_get(uint8_t ch_pin) {
uint32_t tmp;
IO_IN(RC_DDR, ch_pin); //discharge. ch_pin idles high/input
IO_OUT(RC_DDR, RC_READ); //discharges the capacitor (RC_READ idles low/output)
while (IO_GET(RC_PORTIN, RC_READ)) continue; //until the capacitor is fully discharged
IO_OUT(RC_PORT, ch_pin); //start to charge through the ch_pin
IO_IN(RC_DDR, RC_READ); //start to charge up the capacitor
tmp = ticks(); //time stamp tmp
while (IO_GET(RC_PORTIN, RC_READ)==0) continue; //wait for READ pin to go high
tmp = ticks() - tmp; //measure the time elapsed
IO_OUT(RC_DDR, RC_READ); //discharge the capacitor
IO_IN(RC_DDR, ch_pin); //start to discharge from the charge pin (idles high / input)
return tmp;
}
En una resistencia de 16Mhz PIC16F1936 @ 2.5v, 100K, obtuve un conteo de 183xx para un capacitor de 104; los últimos dos dígitos varían un poco.
- un condensador 472 obtuvo una lectura de 775 - 777. Una linealidad bastante buena.
Con un poco de filtrado, debería obtener mejores resultados.
Por lo tanto, tiene un rango de hasta 2 ^ 32/18350 * 0.1u = 24F, y una resolución de 5.5pf. Con las diferentes resistencias utilizadas para cargar el capacitor, puede ampliar ese rango aún más.
el código es bastante portátil y debería poder ejecutarse en casi cualquier mcu.