#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 128000UL
#define ledPin PB2
volatile bool inSleep = false;
volatile unsigned long x=0;
volatile unsigned int blinkTime=256; //for 256
// // todo: read about https://onlinedocs.microchip.com/pr/GUID-317042D4-BCCE-4065-BB05-AC4312DBC2C4-en-US-2/index.html?GUID-B0D2983A-5D31-405A-B4A0-1522DD663002
ISR(INT0_vect) {
// blinkTime = 0;
}
ISR(TIM0_OVF_vect){
x=(x+1)%blinkTime;
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(PB3, INPUT_PULLUP);
DDRB = _BV(DDB2);
cli(); // Disables all interrupts by clearing the global interrupt mask https://onlinedocs.microchip.com/pr/GUID-317042D4-BCCE-4065-BB05-AC4312DBC2C4-en-US-2/index.html?GUID-B0D2983A-5D31-405A-B4A0-1522DD663002
MCUCR = _BV(SE) | _BV(SM1); // MCU Control Register -Enable sleep mode: power-down / page 46
GIMSK = _BV(PCIE); // General Interrupt Mask Register - Enable interrupt / page 46
PCMSK = _BV(PCINT3); // Pin Change Mask Register - Trigger on PCINT3 / page 47
sei(); // Enables interrupts by setting the global interrupt mask https://onlinedocs.microchip.com/pr/GUID-317042D4-BCCE-4065-BB05-AC4312DBC2C4-en-US-2/index.html?GUID-B0D2983A-5D31-405A-B4A0-1522DD663002 OR asm("sei");
}
void loop() {
if (inSleep) {
digitalWrite(ledPin, LOW);
asm ("sleep");
} else{
TCCR0B |= _BV(CS01) | _BV(CS00); //Prescaler to F_CPU/64
// TCCR0B |= _BV(CS02); //Prescaler to F_CPU/256
// TCCR0B |= _BV(CS02) | _BV(CS00); //Prescaler to F_CPU/1024
TCCR0A |= _BV(WGM00) | _BV(WGM01);
TIMSK0 |= _BV(TOIE0); //Enable timer overflow interrupt
// https://forum.arduino.cc/t/attiny13a-timer-overflow-interrupt-weird-behavior/87550/8
// digitalWrite(ledPin, x%blinkTime == 0 || x%blinkTime == 2 || x%blinkTime == 4 ? HIGH : LOW); // for 256
digitalWrite(ledPin, x%blinkTime >=0 && x%blinkTime <=3 || x%blinkTime >= 8 && x%blinkTime <= 11 || x%blinkTime >=16 && x%blinkTime <=19 ? HIGH : LOW); // for 64
}
inSleep = !(digitalRead(PB3) == LOW);
}
Last active
February 5, 2025 21:40
-
-
Save gorshkov-leonid/a22132b1730567f9c0c9b452628b5bd4 to your computer and use it in GitHub Desktop.
attiny13 water detector sleep mode
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
GND и +3 от батарейки А123
GND и PB3 через воду
GND и PB2 к зумеру
PB2: +3 => звук
PB3: gnd => запустить пикалку