думаю, что 20кГц на выходе смогу достичь...
Нестабильность из-за задержек
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Нестабильность из-за задержек
да, я это знаю
собственно поэтому тот первый таймер и не делал с точностью до такта... а сейчас больше теоретические замашки...
думаю, что 20кГц на выходе смогу достичь...
думаю, что 20кГц на выходе смогу достичь...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Нестабильность из-за задержек
точность внутреннего генератора тут совершенно ни при чем - всегда можно поставить внешний кварц.Reflector писал(а):А ничего что у встроенного генератора tiny13 точность ±2% после калибровки?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Нестабильность из-за задержек
Reflector, Да они тут с джиттером воюют. DS18B20 тоже выдаёт 00625 градуса, а на деле плюс-минус лапоть.
Я всё-всё узнAю и стану профессором.
Re: Нестабильность из-за задержек
[uquote="Starichok51",url="/forum/viewtopic.php?p=4022699#p4022699"]точность внутреннего генератора тут совершенно ни при чем - всегда можно поставить внешний кварц.[/uquote]
До того как написать, что tiny13 по-прежнему достаточно Ivanoff-iv также говорил, что будет в эту тиньку утрамбовываться код... Зачем его утрамбовывать, если не собираешься делать именно на ней? В протеусе смысла выбирать тиньку вообще никакого, если же собирать в реальном железе, то кварц не поставишь, а без него любая попытка измерений генерируемого сигнала будет упираться в нестабильный встроенный генератор...
До того как написать, что tiny13 по-прежнему достаточно Ivanoff-iv также говорил, что будет в эту тиньку утрамбовываться код... Зачем его утрамбовывать, если не собираешься делать именно на ней? В протеусе смысла выбирать тиньку вообще никакого, если же собирать в реальном железе, то кварц не поставишь, а без него любая попытка измерений генерируемого сигнала будет упираться в нестабильный встроенный генератор...
Re: Нестабильность из-за задержек
ВотIvanoff-iv писал(а):Где такоекак увидеть?
Спойлер

Измерьте желтый участок
Спойлер

Частота МК 16МГц (точное значение 16252928 Гц)
Частота сигнала 7981 Гц
Частота прерывания таймера 262144 Гц
Расчетный джиттер 1/262144 = 3,81 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,015625 Гц
Еще раз хочу напомнить NCO-модуль в PIC качается от 16МГц, а AD9833 от 25МГц.
На stm32f030 (тактовая 72МГц) мне удалось выжать 3МГц (частота прерывания таймера).
Для сравнения, разгоняем протеус
Частота МК 520МГц (точное значение 520093696 Гц)Частота сигнала та же, 7981 Гц
Частота прерывания таймера 8388608 Гц (чуть больше 8 МГц)
Расчетный джиттер 1/8388608 = 0,12 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,5 Гц
Рисунки gif, анимация.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Нестабильность из-за задержек
Ээээ, меня за усы тянуть не надо! что такое джиттер я в курсе
у меня где ты такой джиттер нашел?
Добавлено after 1 minute 43 seconds:
тини13 - психологическая граница
код не взорвётся, нсли я его в другой проект утяну...
у меня где ты такой джиттер нашел?
Добавлено after 1 minute 43 seconds:
тини13 - психологическая граница
код не взорвётся, нсли я его в другой проект утяну...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Нестабильность из-за задержек
Ivanoff-iv писал(а):у меня где ты такой джиттер нашел?
Спойлер

Без комментариев.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Нестабильность из-за задержек
а там кнопка настройки частоты не нажата?
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Нестабильность из-за задержек
Ivanoff-iv, я изначально говорил, что это делитель
с ростом частоты растет погрешностьмало того еще и господину Reflector говорил - заставьте таймер в stm32 работать в режиме сумматора.
Ivanoff-iv, я могу синтезировать частоту
Частота сигнала 7981 Гц
Частота прерывания таймера 262144 Гц
Расчетный джиттер 1/262144 = 3,81 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,015625 Гц от 0,015625 Гц до 131072 Гц с шагом 0,015625 Гц на всем протяжении диапазона.
Помимо того еще и не только с генерировать синус но и любой другой сигнал (пилообразный, треугольный, пользовательский).
Спойлер
с ростом частоты растет погрешностьIvanoff-iv, я могу синтезировать частоту
Спойлер
Частота МК 16МГц (точное значение 16252928 Гц)Частота сигнала 7981 Гц
Частота прерывания таймера 262144 Гц
Расчетный джиттер 1/262144 = 3,81 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,015625 Гц
Помимо того еще и не только с генерировать синус но и любой другой сигнал (пилообразный, треугольный, пользовательский).
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Нестабильность из-за задержек
Да, соглашусь, это хоть и не простейший, но делитель... сейчас его переделываю... на С желаемых характеристик добиться не смог, не хочет содержимое прерывания гарантированно укладываться в 128 тактов МК... хотя там одно условие, одно суммирование и одно присвоение... (я знаю почему оно не влазит... можно не объяснять).
по синтезу частоты: у МК остается время на что-то ещё?
по синтезу частоты: у МК остается время на что-то ещё?
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Нестабильность из-за задержек
да все там влазит, даже 20кГц вытягивает.Ivanoff-iv писал(а):я знаю почему оно не влазит
Reflector хотел что бы я его от 72Мгц кочегарнул, вот кочегарнул, пусть смотрит
Спойлер

Спойлер
Тестовый код Атмега168 Тактовая МК 16 МГцКод: Выделить всё
#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)
{
}
}Усе. Точка на этом.