Чт окт 21, 2021 10:23:16
У меня всего один USB удлинитель, эталон так же как и МК(прошивка) управляется по UART, эталон не запоминает установленную частоту и начинает после включения частоту гнать 1Гц.Starichok51 писал(а):и откуда взялись 100011 мкс?
Чт окт 21, 2021 10:39:01
Чт окт 21, 2021 13:08:05
Чт окт 21, 2021 16:42:28
Чт окт 21, 2021 18:10:51
держиStarichok51 писал(а):а я бы сделал так:
volatile uint32_t hast_t;
volatile uint32_t hast;
volatile uint8_t hast0;
volatile bool flag1;
ISR (TIMER0_OVF_vect)
{
hast_t++;
}
ISR (TIMER1_COMPA_vect)
{
hast0 = TCNT0;
hast = hast_t;
TCNT0=0; hast_t=0; TCNT0=0;
flag1 =1;
}
int main()
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 0,016 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 1 initialization
// Clock source: T1 pin Falling Edge
// Mode: CTC top=OCR1A
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x01;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (1<<OCIE1A) | (0<<TOIE1);
flag1=0;
// Global enable interrupts
sei();
printf("\nHello, world! \r\n");
while (1)
{
if(flag1==1) {
printf("hast=%lu hast0=%d\n\r", hast, hast0);
flag1 = 0;
}
}
}
hast=124999 hast0=228
hast=124999 hast0=229
hast=124999 hast0=227
hast=124986 hast0=90
hast=124986 hast0=89
hast=124986 hast0=88
hast=124986 hast0=89
hast=124986 hast0=89
hast=124986 hast0=88
hast=124986 hast0=88
hast=124986 hast0=89
hast=124986 hast0=88
hast=124986 hast0=89
Чт окт 21, 2021 19:08:56
hast0 = TCNT0;
TCNT0=0;
hast = hast_t;
hast_t=0;
Чт окт 21, 2021 20:38:35
ISR (TIMER1_COMPA_vect)
{
hast0 = TCNT0;
TCNT0=0;
TIFR0 |= (1<<TOV0);
hast = hast_t;
hast_t=0;
flag1 =1;
}
hast=124999 hast0=253
hast=124999 hast0=253
hast=124999 hast0=253
hast=124999 hast0=253
hast=124986 hast0=100
hast=124986 hast0=101
hast=124986 hast0=100
hast=124986 hast0=101
hast=124986 hast0=101
hast=124986 hast0=102
hast=124986 hast0=101
hast=124986 hast0=102
hast=124986 hast0=101
hast=124986 hast0=102
hast=124986 hast0=101
Чт окт 21, 2021 20:48:58
если произошел запрос на прерывание Т0, то нужно не только сбросить флаг, но и сделать инкремент hast_t, так как переполнение уже наступило.Dimon456 писал(а):Если в друг произошел запрос на прерывание Т0, обнулить его
Чт окт 21, 2021 21:00:35
Для протеуса самый раз.Starichok51 писал(а):потерей 3 импульсов на частоте 16 МГц, я думаю, уже можно пренебречь.
hast=124986 hast0=104
hast=124986 hast0=102
hast=124986 hast0=104
hast=124986 hast0=102
hast=124986 hast0=103
hast=124986 hast0=102
hast=124986 hast0=101
hast=124986 hast0=102
hast=124986 hast0=104
hast=124986 hast0=117
hast=124986 hast0=134
hast=124986 hast0=156
hast=124986 hast0=181
hast=124986 hast0=150
hast=124986 hast0=239
hast=124986 hast0=17
hast=124986 hast0=172
hast=124987 hast0=80
hast=122688 hast0=90
hast=64791 hast0=214
hast=124986 hast0=214
hast=124986 hast0=197
hast=124986 hast0=182
hast=124986 hast0=171
hast=124986 hast0=164
hast=124986 hast0=157
hast=124986 hast0=151
hast=124986 hast0=149
hast=124986 hast0=146
hast=124986 hast0=142
hast=124986 hast0=139
hast=124986 hast0=134
hast=124986 hast0=131
hast=124986 hast0=127
hast=124986 hast0=129
hast=124986 hast0=126
hast=124986 hast0=124
hast=124986 hast0=124
hast=124986 hast0=124
hast=124986 hast0=117
hast=124986 hast0=121
hast=124986 hast0=122
hast=124986 hast0=119
hast=124986 hast0=121
hast=124986 hast0=119
hast=124986 hast0=119
hast=124986 hast0=119
hast=124986 hast0=119
hast=124986 hast0=92
hast=124986 hast0=124
hast=124986 hast0=134
hast=124986 hast0=130
hast=124986 hast0=128
hast=124986 hast0=127
hast=124986 hast0=124
hast=124986 hast0=122
hast=124986 hast0=123
hast=124986 hast0=117
hast=124986 hast0=119
hast=124986 hast0=116
hast=124986 hast0=119
hast=124986 hast0=117
hast=124986 hast0=114
hast=124986 hast0=116
hast=124986 hast0=114
hast=124986 hast0=112
hast=124986 hast0=114
hast=124986 hast0=112
hast=124986 hast0=113
hast=124986 hast0=112
hast=124986 hast0=111
hast=124986 hast0=114
hast=124986 hast0=109
hast=124986 hast0=112
hast=124986 hast0=114
hast=124986 hast0=112
hast=124986 hast0=111
hast=124986 hast0=111
hast=124986 hast0=112
hast=124986 hast0=111
hast=124986 hast0=109
hast=124986 hast0=109
hast=124986 hast0=109
Чт окт 21, 2021 21:07:40
Чт окт 21, 2021 21:14:05
Так же потери составляют, не хватает 2-3 импульса.Starichok51 писал(а):если измерять меньшую частоту, например, 1 МГц, то потерь вообще может не быть.
Чт окт 21, 2021 21:15:04
Пт окт 22, 2021 07:58:21
Пт окт 22, 2021 08:41:21
Пт окт 22, 2021 09:32:20
Пт окт 22, 2021 09:51:02
ISR (TIMER1_OVF_vect)
{
hast_t++;
}
ISR (TIMER1_CAPT_vect)
{
TCNT1=0; TIFR1 |= (1<<TOV1);
hast0 = ICR1;
ICR1 = 0;
hast = hast_t;
hast_t=0;
flag1 =1;
}
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Normal top=0xFFFF
// Noise Canceler: On
// Input Capture on Rising Edge
// Timer Period: 4,096 ms
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: On
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(1<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(1<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
Пт окт 22, 2021 11:32:30
.include "m8def.inc" ; ATMega8
.def counter_ovf1 = R16
.cseg
.org 0
rjmp nachalo_code
.org ICP1addr
rjmp timer1_ICP
.org OVF1addr
rjmp timer1_OVF
nachalo_code:
ldi R26, low(RAMEND)
out SPL, R26
ldi R26, high(RAMEND)
out SPH, R26
clr counter_ovf1
;--- Timer1 ---
ldi R26, (0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10)
out TCCR1A, R26
ldi R26, (1<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10)
out TCCR1B, R26
ldi R26, (1<<TICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1)
out TIMSK, R26
sei
cycle:
rjmp cycle
timer1_ICP:
ldi R26, 0
out TCNT1H, R26
ldi R26, 10
out TCNT1L, R26
clr counter_ovf1
reti
timer1_OVF:
inc counter_ovf1
reti
Пт окт 22, 2021 14:10:22
volatile uint16_t hast_t;
volatile uint16_t hast;
volatile uint16_t hast0;
volatile bool flag1;
ISR (TIMER1_OVF_vect)
{
hast_t++;
}
ISR (TIMER1_CAPT_vect)
{ static uint16_t hast_temp;
hast0 = ICR1 - hast_temp; hast_temp = ICR1;
hast = hast_t; hast_t=0;
flag1 =1;
}
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=245 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
hast=245 hast0=9216
hast=244 hast0=9216
hast=244 hast0=9216
Пт окт 22, 2021 14:20:45
она и не должна повлиять.Dimon456 писал(а):вставка этой строки TIFR1 |= (1<<TOV1) не на что не влияет.
Пт окт 22, 2021 14:23:35
появляется с определенной периодичностью.hast=244 hast0=9216
hast=245 hast0=9216
hast0 = ICR1 - hast_temp; hast_temp = ICR1;
ISR (TIMER1_CAPT_vect)
{ static uint16_t hast_temp;
if(hast_temp > ICR1) hast_t--;
hast0 = ICR1 - hast_temp; hast_temp = ICR1;
hast = hast_t; hast_t=0;
flag1 =1;
}