Már a Timer-t sikerült működésre bírni. Annyiban hasonlít a kettő, hogy mielőtt az OCRnx regiszternek értéket adunk azelőtt be kell állítani a TCCRnx-ben a milyen módban működjön a komparátor. Ha jól fogalmaztam
További problémám az, hogy pl.
bizonytalanul működik. Ez a PB2. De pl. a PB0-val jól működik, vagy ha a digitalRead(2)-t használom. A PB2-re azért volna szükségem mert az az INT0 megszakítás amivel szeretném alvó módból felébreszteni, ha az is működne
Uno-val próbáltam az alvó módba lépést és a felébresztést INT0-val. Ott ha engedélyeztem az EICRA regiszterben a az INT0 megszakítást és az EIMSK-ben az INT0 megszakítási kérelmet akkor ha alvó módban teljesült az INT0 megszakítási feltétel (fel- vagy lefutó él vagy alacsony szint), akkor felébredt. Az Attiny-nél is így jártam el, de az nem hajlandó felébredni, csak reset-re. Mit nem veszek észre?
Kód: Egész kijelölése
int szamlalo = 0;
void setup() {
PUEB=0B00000100;
DDRB = 0B00000011;
TCCR0A = 0B10100001;
TCCR0B = 0B00001011;
}
void loop() {
if (digitalRead(2) == 0) {
delay(5);
if (digitalRead(2) == 0) {
szamlalo++;
delay(150);
if (digitalRead(2) == 0) {
delay(2000);
if (digitalRead(2) == 0) {
OCR0A=0;
OCR0B=0;
delay(2000);
if (digitalRead(2) == 1) {
ADCSRA &= 0B01111111;
VLMCSR &= 0B01111000;
PRR = 0B00000011;
EICRA = 0B00000000;
EIMSK = 0B00000001;
SMCR = 0B00000101;
SREG |= 0B10000000;
asm ("sleep");
SMCR = 0;
EIMSK = 0;
PRR = 0;
ADCSRA |= 0B10000000;
}
}
}
}
}
if (szamlalo > 5) {
szamlalo = 0;
}
if (szamlalo == 0) {
OCR0A=64;
OCR0B=0;
}
if (szamlalo == 1) {
OCR0A=128;
}
if (szamlalo == 2) {
OCR0A=192;
}
if (szamlalo == 3) {
OCR0A=255;
}
if (szamlalo == 4) {
OCR0A=0;
OCR0B=128;
}
if (szamlalo == 5) {
OCR0B=255;
}
}
Jelenleg ezzel próbálkoztam. Tudom hogy nem a legszebb és legkiforrottab, de félig működik
Csak elalvásból nem hajlandó felébredni.