Пн янв 06, 2020 09:35:16
Пн янв 06, 2020 09:56:17
Пт янв 10, 2020 17:36:46
void WDT_init( void ){
// --- Attiny85---
// Watchdog timeout action: Interrupt
WDTCR|= (1<<WDCE)|(1<<WDE);
WDTCR = (1<<WDIF)|(1<<WDIE)|(0<<WDE)|(0<<WDCE)|(0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0);
/*
Watchdog Timer Prescale Select
WDP3 WDP2 WDP1 WDP0
0 0 0 0 2K (2048) cycles 16 ms
0 0 0 1 4K (4096) cycles 32 ms
0 0 1 0 8K (8192) cycles 64 ms
0 0 1 1 16K (16384) cycles 0.125 s
0 1 0 0 32K (32764) cycles 0.25 s
0 1 0 1 64K (65536) cycles 0.5 s
0 1 1 0 128K (131072) cycles 1.0 s
0 1 1 1 256K (262144) cycles 2.0 s
1 0 0 0 512K (524288) cycles 4.0 s
1 0 0 1 1024K (1048576) cycles 8.0 s
*/
};
Сб янв 11, 2020 08:13:50
Сб янв 18, 2020 10:23:51
Вс янв 19, 2020 08:27:06
ISR(WDT_vect){// j = 0,1,2,3
j=(j>2)?(j=0):(j+1);
average = average+impulses;
impulses=0;
if(j==3){
num = SplitNumber(average);
SHIFTREG_OutputValue( ®, num.g, 5 );
average=0;
}
};
Вс янв 19, 2020 09:44:59
Вс янв 19, 2020 14:16:40
Вс янв 19, 2020 22:35:33
Пн янв 20, 2020 20:18:15
struct FreqRange {
uint16_t freq;
uint16_t ltrs; // литры
uint16_t ltrsInterpol;
} freqRange[] = {
{20005, 0}, // 0
{21338, 8}, // 1
{22671, 16}, // 2
{24004, 24}, // 3
{25337, 32}, // 4
{26670, 40}, // 5
{28003, 48}, // 6
{29336, 56}, // 7
{30669, 64}, // 8
{32002, 72}, // 9
{33335, 80}, // 10
{34668, 88}, // 11
{36001, 96}, // 12
{37334, 104}, // 13
{38667, 112}, // 14
{40000, 120} // 15
}, ddd;
FreqRange Interpolation( uint16_t f ){
FreqRange FR;
uint8_t level;
uint16_t temp_1, temp_2;
for( level=0; level<=15; ++level ){
if( f > 0 && f<= freqRange[1].freq ){ break; }// level = 0;
if( f > freqRange[level].freq && f<= freqRange[level+1].freq ){ break; }// level = 1...14;
if( f > freqRange[level].freq && f<= 41000 ){ break; }// level = 15;
}
temp_1 = (freqRange[level+1].ltrs-freqRange[level].ltrs);
temp_2 = (freqRange[level+1].freq-freqRange[level].freq);
FR.ltrsInterpol = round(
(float)f/(float)(temp_2/temp_1)-(float)((freqRange[level].freq/temp_2)*temp_1-freqRange[level].ltrs)
);
return FR;
}
Пн янв 20, 2020 21:32:25
Сб июл 25, 2020 23:33:34
#include <avr/io.h>
//#include <util/delay.h>
#include <avr/interrupt.h>
ISR (TIMER0_OVF_vect)
{
asm ("nop");
}
int main(void)
{
TCCR0 |= (1<<1); TCCR0 &= ~ ((1<<0)|(1<<2));// делитель 8
//TCNT0 = 0b11111100;
TIMSK |= (1<<0);
//SREG |= (1<<7);
sei ();
while(1)
{
asm ("nop");
}
}
Вс июл 26, 2020 00:31:28
Вс июл 26, 2020 07:31:57
Вс июл 26, 2020 08:46:21
Вс июл 26, 2020 09:53:15
...
volatile uint16_t cnt = 0;
ISR (TIMER0_OVF_vect)
{
cnt++;
}
int main(void)
{
sei ();
TIMSK = (1<<TOIE0);
TCCR0 = (1<<CS01); // делитель 8
while(1);
}
Вс июл 26, 2020 10:14:04
вполне может быть. ибо ассемблерную вставку nop-a надо делать так:NStorm писал(а):может оптимизатор выкидывает?
volatile asm ("nop");
Вс июл 26, 2020 11:02:54
#include <avr/cpufunc.h>
...
_NOP();
Вс июл 26, 2020 12:03:53
Вс июл 26, 2020 12:28:43