Собрал я функциональный генератор http://www.scienceprog.com/avr-dds-sign ... rator-v20/
Штука довольно неплохая и универсальная. Но основная проблема в том, что у него, чтобы изменить частоту приходится переводить его в режим "Off", а потом изменив значение частоты на индикаторе, включать - "ON". Это очень неудобно, но я не умею программировать. Помогите изменить программу, чтобы частоту можно было менять кнопками не выключая генерацию сигнала.
Функциональный DDS генератор на AVR - нужна помощь
-
welder_2002
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Вт фев 05, 2008 22:14:32
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
Помогите изменить программу, чтобы частоту можно было менять кнопками не выключая генерацию сигнала.
вообще чувак постарался)))... я код не смотрел, но могу предположить, что это было сделано для того чтобы избежать срыва генерации...
з.ы. я посмотрю... скорее на след неделе...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
в общем я посмотрел не дожидаясь след недели...
в функции main если
и в этой асмовской вставке тоже надо кое-чего поменять...
чисто теоретически должно работать, но вполне вероятно что ещё надо где-то поменять, в коде не копался...
но я ещё раз повторюсь... прежде чем у вас будет какой-то более менее приемлемый сигнал будет много мусора, а то может вообще ничего не будет...
чисто теоретически можно встроить два МК или в связке МК+ПЛИС...
Вариант 1.
1ый МК выводит инфу на ЖК и клаву и управляет вторым который тамчто-о генерирует
Вариант 2.
МК получает инфу о кномпках от плисины, вывдит инфу на жк через поисину, и формирование сигнала тоже через плисину, записывает в память плисины значения она их там сама выводит
в функции main если
Код: Выделить всё
Main_Init();
while(1)//infinite loop
{
if (SG.flag == 1) //закоментировать
{
....
if (SG.mode == 7)
{
//Noise
do
{
R2RPORT=rand();
}
while(SG.flag == 1); //меняем на SG.mode == 7
....
else if (SG.mode==8)
{
//High speed signal
Timer1_Start(SG.HSfreq);
while(SG.flag == 1) //меняем на SG.mode==8
{
//not implemented
CopyStringtoLCD(MNON, 13, 1 );
}
и в этой асмовской вставке тоже надо кое-чего поменять...
Код: Выделить всё
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile( "eor r18, r18 ;r18<-0" "\n\t"
"eor r19, r19 ;r19<-0" "\n\t"
"1:" "\n\t"
"add r18, %0 ;1 cycle" "\n\t"
"adc r19, %1 ;1 cycle" "\n\t"
"adc %A3, %2 ;1 cycle" "\n\t"
"lpm ;3 cycles" "\n\t"
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"sbis %5, 2 ;1 cycle if no skip" "\n\t"
"rjmp 1b ;2 cycles. Total 10 cycles" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
:"r18", "r19"
);
}чисто теоретически должно работать, но вполне вероятно что ещё надо где-то поменять, в коде не копался...
но я ещё раз повторюсь... прежде чем у вас будет какой-то более менее приемлемый сигнал будет много мусора, а то может вообще ничего не будет...
чисто теоретически можно встроить два МК или в связке МК+ПЛИС...
Вариант 1.
1ый МК выводит инфу на ЖК и клаву и управляет вторым который тамчто-о генерирует
Вариант 2.
МК получает инфу о кномпках от плисины, вывдит инфу на жк через поисину, и формирование сигнала тоже через плисину, записывает в память плисины значения она их там сама выводит
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!