![]() |
|
|
|
| VHF: Canal 77 |    | ![]() |
![]() |
![]() |
![]() |
![]() |
|
#11
|
||||
|
||||
|
El codigo publicado por Jiauka en la pagina 4, post numero 100 creo que esta mal.
Parace que dependiendo si la velocidad esta por debajo o por encima de 3 nudos utiliza un prescale de 64 o 256. (64x4=256) Pero luego los K_NOT_FACTOR que utiliiza son 2626000 y 164125 (164125x4 no es 2626000) Osea los prescale son multiplos de 4 pero los knot_factor no son multiplos de 4. El valor correcto para KNOT_FACTOR_L creo que seria 656500 Detecte el fallo porque el invento me da velocidades muy bajas por debajo de los 3 nudos y funciona bien por encima de los 3 nudos. No se si Jiauka sigue por el foro y puede darle un vistazo al codigo y confimar esto. Lo que me extraña es que el codigo se publico en 2016 y nadie haya notado el error. Porque ya digo que no marca bien velocidad por debajo de 3 nudos. Copio aqui debajo el trozo de codigo afectado #define KNOT_FACTOR_H 2626000L #define KNOT_FACTOR_L 164125L #define KNOT_LOWER_THRESHOLD 300L //below 3 knots #define KNOT_UPPER_THRESHOLD 500L //over 5 knots void pwm_set(long OCRValue) { OCR1A = OCRValue; // set the counter } void pwm_start(int high_low) { if(high_low) TCCR1B = _BV(WGM12)|_BV(CS11)|_BV(CS10); // // CTC mode - 64 prescale else TCCR1B = _BV(WGM12)|_BV(CS12)|_BV(CS10); // // CTC mode - 256 prescale TCCR1A = _BV(COM1A0); // // Toggle mode 0C1A pwm_high=high_low; } |
|
|