To rule out the i2c and my code, I started back with the timer example. I changed TIMER_INTERVAL1_SEC to 0.009 (9ms)
Code: Select all
#define TIMER_INTERVAL1_SEC (0.009) // sample test interval for the second timer
Code: Select all
static void timer_example_evt_task(void *arg)
{
bool on = true;
while (1) {
timer_event_t evt;
xQueueReceive(timer_queue, &evt, portMAX_DELAY);
/* Print information that the timer reported an event */
if (evt.type == TEST_WITHOUT_RELOAD) {
// printf("\n Example timer without reload\n");
// gpio_set_level(BLOWER_MOTOR_PIN, on);
} else if (evt.type == TEST_WITH_RELOAD) {
// printf("\n Example timer with auto reload\n");
gpio_set_level(BLOWER_MOTOR_PIN, on);
on = !on;
} else {
// printf("\n UNKNOWN EVENT TYPE\n");
}
// printf("Group[%d], timer[%d] alarm event\n", evt.timer_group, evt.timer_idx);
//
// /* Print the timer values passed by event */
// printf("------- EVENT TIME --------\n");
// print_timer_counter(evt.timer_counter_value);
//
// /* Print the timer values as visible by this task */
// printf("-------- TASK TIME --------\n");
// uint64_t task_counter_value;
// timer_get_counter_value(evt.timer_group, evt.timer_idx, &task_counter_value);
// print_timer_counter(task_counter_value);
}
}
And this is what I am trying to create (pwm at 36.41hz with sub ms resolution):
I tried adjusting the divider and setting the io value in the ISR instead of using a queue but saw the same results. Why am I not able to get reliable output when using the timer to set gpio especially at smaller time scales?