fucking around with timer

main
radex 2024-02-17 12:58:08 +01:00
parent 3170a046b7
commit 91543a4a3d
Signed by: radex
SSH Key Fingerprint: SHA256:hvqRXAGG1h89yqnS+cyFTLKQbzjWD4uXIqw7Y+0ws30
3 changed files with 40 additions and 20 deletions

View File

@ -54,9 +54,9 @@ void loop() {
} else if (key == KEY_C) {
beep();
} else if (digit == 4) {
demo_moveBy(-8000);
demo_moveBy(-80000);
} else if (digit == 5) {
demo_moveBy(8000);
demo_moveBy(80000);
} else {
tick();
}
@ -70,6 +70,8 @@ void loop() {
if (auto event = handleEncoder()) {
tick();
Serial.println(event == ENCODER_CLOCKWISE ? "Clockwise" : "Counter-clockwise");
demo_moveBy(event == ENCODER_CLOCKWISE ? 800 : -800);
// demo_moveBy(event == ENCODER_CLOCKWISE ? 800 : -800);
changeFreq(event == ENCODER_CLOCKWISE ? 1 : -1);
Serial.println(OCR1A);
}
}

View File

@ -19,33 +19,43 @@ void setupTimer() {
// CTC mode (Clear Timer on Compare Match)
TCCR1B |= (1 << WGM12);
// interrupt at 62.5kHz / (OCR1A + 1)
OCR1A = 19;
OCR1A = 39;
// OCR1B = 39;
// enable timer
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
void changeFreq(int16_t delta) {
OCR1A += delta;
}
// incremented every DEMO_TRIGGER_MS by interrupt,
// read and decremented by main loop
volatile uint8_t timerEvents = 0;
uint8_t demoCounter = 0;
// volatile uint8_t timerEvents = 0;
// uint8_t demoCounter = 0;
volatile uint16_t timerTicks = 0;
void demoTimer() {
bool shouldTrigger = false;
// if (timerTicks % 1000 == 0) {
// Serial.println(timerTicks);
// }
// bool shouldTrigger = false;
noInterrupts();
if (timerEvents > 0) {
timerEvents--;
shouldTrigger = true;
}
interrupts();
// noInterrupts();
// if (timerEvents > 0) {
// timerEvents--;
// shouldTrigger = true;
// }
// interrupts();
if (shouldTrigger) {
demoCounter += DEMO_REPORT_SECONDS;
Serial.print("Uptime: ");
Serial.print(demoCounter);
Serial.println("s");
}
// if (shouldTrigger) {
// demoCounter += DEMO_REPORT_SECONDS;
// Serial.print("Uptime: ");
// Serial.print(demoCounter);
// Serial.println("s");
// }
}
volatile int16_t stepsLeft = 0;
@ -60,7 +70,6 @@ void demo_moveBy(int16_t steps) {
interrupts();
}
volatile uint16_t timerTicks = 0;
volatile uint16_t timerMillis = 0;
ISR(TIMER1_COMPA_vect) {
@ -72,3 +81,11 @@ ISR(TIMER1_COMPA_vect) {
PORTC &= ~(1<<1);
}
}
// ISR(TIMER1_COMPA_vect) {
// if (OCR1B < 34) {
// OCR1B = 40;
// } else {
// OCR1B--;
// }
// }

View File

@ -1,4 +1,5 @@
void setupTimer();
void demoTimer();
void changeFreq(int16_t delta);
void demo_moveBy(int16_t steps);