AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
07.10.2012, 05:06
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Генератор 5Мгц на Тиньке2313
Вот уперся в проблему - надо откалибровать частотомер сигналом в 5мгц, а нужного кварца для транзисторного генератора нет.
Решил обмануть всех и замутить на Atiny2313 14.3mHz
Естессно на CvAVR
что имею
PHP код:
|
#include ‹tiny2313a.h›
#include ‹delay.h›
#define PIN_PLUS PINB.0
#define PIN_MINUS PINB.2
#define GEN_OUTPUT PORTB.4
unsigned int TIMER_DELAY=65000;
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=TIMER_DELAY ›› 8;
TCNT1L=TIMER_DELAY & 0xff;
GEN_OUTPUT=~GEN_OUTPUT;
}
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTA=0x00; DDRA=0x00;
PORTB=0x05; DDRB=0x10;
PORTD=0x40; DDRD=0x00;
//Таймер гоняется на 14мгц
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
#asm("sei")
while (1)
{
if (!PIN_PLUS)
{
delay_ms(5);
TIMER_DELAY++;
if (TIMER_DELAY›65534) TIMER_DELAY=65534;
} else
if (!PIN_MINUS)
{
delay_ms(5);
TIMER_DELAY--;
if (!TIMER_DELAY) TIMER_DELAY=1;
}
};
}
|
В результате дожимает до 203кгц и привет
Ведь все по честному, 20 тиков на прерывание таймера плюс еще 15 где-то на основной цикл и кнопки, но ведь частоты хватает на 70 тиков при 14.3мгц, тоесть если бы справлялась прога за честные 35 то уже выжала бы система аж 400кгц.
Ухищрения типа
PHP код:
|
while(1) GEN_OUTPUT;
|
Вообще дают унылый результат в полтора килогерца.
Если есть советы и идеи говорите, я записываю.
Ударил бы АСМом по проблеме, только не хочу зарываться в справочник снова
__________________
Найди путь или проложи сам!
|
|
|
|
07.10.2012, 08:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Используй аппаратный ШИМ на таймере. Кварц на 10 МГц, на выходе будет до 5 МГц
|
|
|
|
07.10.2012, 09:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Сообщение от MasterMushi
|
Решил обмануть всех и замутить на Atiny2313 14.3mHz
|
А кварца на "круглую" частоту нет?
Подозреваю, что этот на 14,318МГц.
А то и на асме отсчитать 2,8636 тика не получится.
Чтобы получить целую частоту на выходе, нужно, чтоб такт делился нацело.
Вот какие целые частоты можно из него получить.
Подсказка: использовать режим СТС таймера0 или таймера1.
|
|
|
|
07.10.2012, 10:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Особо понравилась частота: mHz.
Для генерации 5 МГц лучше аппаратный ШИМ. Для программной реализации на асме минимальное количество тактов получиться не менее 4 и процессор только этим и будет заниматься. И кварц нужен 20МГц.
Последний раз редактировалось alvadep; 07.10.2012 в 10:15.
|
|
|
Сказали "Спасибо" alvadep
|
|
|
07.10.2012, 11:55
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Эхехех, у топикстартера, видимо, с математикой не важно...
Если нет возможности найти кварц с подходящей частотой (в чем я сомневаюсь), есть такая замечательная микросхемка - программируемый генератор AD9833. Точность деления - до долей Герца. Недавно разбирали в теме https://kazus.ru/forums/showpost.php...2&postcount=16
|
|
|
|
07.10.2012, 12:29
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
А я вообще не понимаю, зачем нужно калибровать частотомер обязательно круглой частотой? Калибруйте любой кварцованной частотой, какая есть под рукой, да хоть 14.318 МГц. Или результатом деления этой частоты нацело каким-либо простым делителем...
|
|
|
|
07.10.2012, 12:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Сообщение от MasterMushi
|
надо откалибровать частотомер
|
Когда то калибровал частотомер (задающий 10 МГц) по эфиру, используя ППП на трех транзисторах.
Ловил радиостанцию стандартных частот и времени с частотой 10 МГц, в наушниках были слышны биения между задающим частотомера и сигналом радиостанции. Подстраиваем кварцевый генератор по нулевым биениям, т.е. можно добиться точности до десятых долей Герца!
Что примечательно, стабильность частоты гетеродина приемника никак не влияет на точность калибровки и конечный результат.
Поищите в эфире станцию стандартных частот на 5 МГц, точность у этих станций очень даже приличная а калибровочные приборы с такой точность стоят сумасшедших денег и есть не в каждой службе метрологии.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
Сказали "Спасибо" gary2007
|
|
|
07.10.2012, 17:27
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Уже чутка ближе подобрались
PHP код:
|
#include ‹tiny2313a.h›
#include ‹delay.h›
#define PIN_PLUS PINB.0
#define PIN_MINUS PINB.2
#define GEN_OUTPUT PORTB.4
eeprom unsigned int TIMER_DELAY_SETTING=0x01;
unsigned int TIMER_DELAY=1;
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTA=0x00; DDRA=0x00; PORTB=0x05; DDRB=0x10; PORTD=0x40; DDRD=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 14300,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Toggle
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x10;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x01;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x01;
OCR1BH=0x00;
OCR1BL=0x00;
#asm("sei")
//Here we restore initial setting
TIMER_DELAY=TIMER_DELAY_SETTING;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
while (1)
{
if (!PIN_MINUS)
{
delay_ms(5);
TIMER_DELAY++;
if (TIMER_DELAY›65534) TIMER_DELAY=65534;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
} else
if (!PIN_PLUS)
{
delay_ms(5);
TIMER_DELAY--;
if (!TIMER_DELAY) TIMER_DELAY=1;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
}
};
}
|
Но если гляните осциллограмму, видно как генерация идет с перерывом. И максимум до чего дожалось при таймере 1 и регистре сравнения 1 это 3.58Мгц
__________________
Найди путь или проложи сам!
|
|
|
|
07.10.2012, 17:42
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Простите, за панику, с проблемой разобрался )))
Оказывается CTC работает для таймера T1 в двойном режиме, нужно еще и регистр В задавать
PHP код:
|
//Here we restore initial setting
TIMER_DELAY=TIMER_DELAY_SETTING;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
OCR1BH=TIMER_DELAY ›› 8;
OCR1BL=TIMER_DELAY & 0xff;
while (1)
{
if (!PIN_MINUS)
{
delay_ms(5);
TIMER_DELAY++;
if (TIMER_DELAY›65534) TIMER_DELAY=65534;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
OCR1BH=TIMER_DELAY ›› 8;
OCR1BL=TIMER_DELAY & 0xff;
} else
if (!PIN_PLUS)
{
delay_ms(5);
TIMER_DELAY--;
if (!TIMER_DELAY) TIMER_DELAY=1;
OCR1AH=TIMER_DELAY ›› 8;
OCR1AL=TIMER_DELAY & 0xff;
OCR1BH=TIMER_DELAY ›› 8;
OCR1BL=TIMER_DELAY & 0xff;
}
};
|
Но опять таки, дожал всего лишь до 3.5мгц
__________________
Найди путь или проложи сам!
|
|
|
|
07.10.2012, 17:46
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Генератор 5Мгц на Тиньке2313
Выкопал кварц 20мгц, попробую.....
__________________
Найди путь или проложи сам!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Генератор
|
Skandalli |
Электроника - это просто |
2 |
10.07.2012 17:58 |
Генератор НЧ
|
dosikus |
Микроконтроллеры, АЦП, память и т.д |
9 |
05.03.2011 00:08 |
На чем проще сделать отправку 128мб 5мгц ?
|
pod80 |
Микроконтроллеры, АЦП, память и т.д |
10 |
25.02.2011 00:52 |
Генератор ВЧ
|
Flash.#13 |
Электроника - это просто |
1 |
13.07.2010 16:19 |
Генератор
|
max0000 |
Микроконтроллеры, АЦП, память и т.д |
3 |
27.12.2006 01:56 |
Часовой пояс GMT +4, время: 23:13.
|
|