Me gustaría utilizar sin vergüenza la figura de la excelente respuesta de Peter:
Siobservadetenidamente,notaráque,sibienlosbordesascendentespuedenestarendiferentesposiciones,losbordesdescendentessiempreestánseparadosporunalongituddebit.
Porlotanto,paramedirlavelocidad,esperaríaelprimerflancodescendente(iniciodelbitdeinicio)yluegocontaríalosciclosdelaCPUhastaelflancoascendente.Comosabequeesteeselbitdeinicio,ahoratieneuna"mitad de longitud de bit", que, especialmente, debería ser el umbral entre contar un bit como 1 o 0.
Entonces, cómo escribir un receptor para esto depende del microcontrolador que estés usando, y no estoy versado en AVRs. Pero: normalmente solo puede asignar una interrupción a un pin que se activa cuando el pin cambia
En el enrutamiento del servicio de interrupción (ISR), verificas si se trata de un flanco descendente o ascendente:
-
filo descendente inicia un contador que aumenta automáticamente sin que tengas que hacer nada en el software.
-
borde ascendente :
-
primer bit : contador de parada, se usa como valor de umbral entre
0
y 1
-
bits subsiguientes : detener el contador, comparar con el valor de umbral guardado. Si
counter > threshold
: recibió un 1
; si counter <= threshold
, un 0
. Si este es el octavo bit, vuelva al estado "esperando el primer bit".
En realidad, hay microcontroladores que tienen receptores de hardware para este tipo de datos. No es tan difícil de implementar, en realidad, como se vio en la descripción lógica de mi software anterior: es una máquina de estado de cuatro estados y, por lo tanto, es relativamente fácil de implementar en hardware. De todos modos, supongo que ATMegas no tiene una unidad de medida PWM (a diferencia de otras alternativas más baratas como varias de las MCU ARM Cortex-M0 que, por ejemplo, ST Micro vende).
Realmente creo que podría convencer a su UART para que reciba estas cosas: tendría que configurar su UART tres veces (o más) la tasa de bits del sensor, y luego interpretar 011
como 1
, y 001
como 0
, e ignorar el bit de inicio. Pero esa no será una buena solución, ya que no se especifica en la hoja de datos, por lo que puedo ver, la tasa de bits probablemente variará mucho.
¹ tras una discusión por Wossname: los cuatro estados podrían ser
- A la espera de que el borde descendente comience el bit de inicio
- Esperando el flanco ascendente en el bit de inicio
- A la espera de que el borde de la caída comience un bit de datos
- Esperando el flanco ascendente en el bit de datos