Пн апр 26, 2021 16:41:56
Пн апр 26, 2021 17:15:08
точность внутреннего генератора тут совершенно ни при чем - всегда можно поставить внешний кварц.Reflector писал(а):А ничего что у встроенного генератора tiny13 точность ±2% после калибровки?
Пн апр 26, 2021 17:21:22
Пн апр 26, 2021 18:06:47
Пн апр 26, 2021 18:26:42
ВотIvanoff-iv писал(а):Где такое как увидеть?
Пн апр 26, 2021 19:25:13
Пн апр 26, 2021 19:43:50
Ivanoff-iv писал(а):у меня где ты такой джиттер нашел?
Пн апр 26, 2021 20:29:09
Вт апр 27, 2021 06:15:42
Вт апр 27, 2021 07:32:20
Вт апр 27, 2021 08:53:50
да все там влазит, даже 20кГц вытягивает.Ivanoff-iv писал(а):я знаю почему оно не влазит
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
#define Fclk 16000000UL
#define Out() (PINB=(1<<0)) //переключение ножки
unsigned int Frq=10; //текущая частота
register uint16_t Tim asm("r6"); // r6 r7
register uint8_t Ost asm("r8"); // r8
register uint16_t countS asm("r10"); // r10 r11
unsigned long int tTim;//=12000000/Frq; //вычисляем период
unsigned char tOst;//=tTim; //последний байт (до256)
void Calc(void) //вычисляем период и довесок
{
tTim=8000000UL/Frq;
tOst=tTim;
tOst>>=1; //делим на 2
tOst|=0x80; //прибавим 128 (вычисляем довесок)
//у нас 2 довеска - сумма их как-раз и получится 1 полный оборот и остаток (но их пришлось делить на 2 т.к. трудно обработать 2 близко стоящих прерывания)
tTim>>=8; //делим период на 256
cli();
Tim=tTim; //выводим в буфера
Ost=tOst;
sei();
};
ISR(TIMER2_COMPA_vect) // Шаг 0,0625 us
{
if (countS) {countS--;}
else
{
countS=Tim; //взводим таймер обратно
Out(); //работаем работу
};
OCR2A=(countS<2)? Ost:0xff; //выбираем скорость таймера
}
int main()
{
// Write your code here
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: CTC top=OCR2A
// OC2A output: Disconnected
// OC2B output: Disconnected
// Timer Period: 0,0625 us
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (1<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (1<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=(0<<OCIE2B) | (1<<OCIE2A) | (0<<TOIE2);
sei();
Frq=10060;
Calc();
while (1)
{
}
}