Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.04.2009, 12:45  
FedorChek
Прописка
 
Регистрация: 24.07.2008
Сообщений: 151
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FedorChek на пути к лучшему
По умолчанию Вывод частоты на ногу Меги88

Извиняюсь, может повторюсь, но прошу мне объяснить (а не сделать, хотя от куска кода и не откажусь ) как коректно вывести частоту на ногу микроконтролера я вроде бы часть сделал но не врубаюсь в некоторые ньюансы. Вот часть кода-вставки на асме
Код не мой
Код:
  
   .def  inc_buf_lo =r6
   .def  inc_buf_hi =r7
   .def  sum_lo      =r19
   .def  sum_hi      =r20
   .def  timeout1    =r5
clr sum_lo
clr sum_hi

loop_run:
   out PORTB,out_prep
loop_count:
   add sum_lo,inc_buf_lo
   adc sum_hi,inc_buf_hi
   brcc loop_count

   out PORTB,out_noprep

   sbis PIND,4 ; проверяем ESC. Если не нажата, то skip
   rjmp to_set

   tst timeout1
   brne loop_run
Где inc_buf_lo, inc_buf_hi я так понял это мл. и ст. байты
вверху есть такая строка
inc_buf=freq2inc(freq[x]); где x это число
freq[20]{0x2714...0x2714};

Код:
unsigned int freq2inc(unsigned int freq) // Преобразование частоты в инкремент синтезатора частоты
{
unsigned int delta;
unsigned long int temp_1, temp_2, f, frac;

// delta=131072/(16384/f-3)
  if (freq›=0x8000U)
   { // частота = (freq-0x8000)/10
   f=(unsigned long int)freq-0x0080UL; 
   temp_2=1638400UL-f*3;
  } else
   f=(unsigned long int)freq; // f - это частота*100
   temp_2=1638400UL-f*3;
  };
temp_1=(32768UL*f)‹‹2;
delta=(unsigned int)(temp_1/temp_2);
frac=temp_1%temp_2;
if ((frac‹‹1)›=temp_2) delta++;
return delta;
}
Вот эта функция мне уже плешь проела как ее "настроить" или дело не в ней. например пишется в ЕЕПРОМ частота 77 Гц имеющая вид 14 27 выводит стоит поменять на 1 Гц (64 00) начинаются глюки как их избежать. И вообще что такое инкремент.
[/code]
Реклама:
FedorChek вне форума  
Непрочитано 08.04.2009, 13:29  
FedorChek
Прописка
 
Регистрация: 24.07.2008
Сообщений: 151
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FedorChek на пути к лучшему
По умолчанию

Вот блин кажется догадался только вот не где ни могу найти как из кучи вида 0x141E взять только 0x1E или 0x14 8O
FedorChek вне форума  
Непрочитано 08.04.2009, 15:06  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от FedorChek
Вот блин кажется догадался только вот не где ни могу найти как из кучи вида 0x141E взять только 0x1E или 0x14 8O
Код:
0x141E & 0x00FF = 0x1E
0x141E ›› 8 = 0x14
dimonbest вне форума  
Непрочитано 10.04.2009, 00:04  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию

Может проще и надежней генерировать частоту на ноге с помощью таймера в режиме CTC.
DrunyaRuma вне форума  
Непрочитано 11.04.2009, 14:14  
FedorChek
Прописка
 
Регистрация: 24.07.2008
Сообщений: 151
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FedorChek на пути к лучшему
По умолчанию

Что за режим?
FedorChek вне форума  
Непрочитано 11.04.2009, 17:32  
domowoj
Почётный гражданин KAZUS.RU
 
Аватар для domowoj
 
Регистрация: 09.12.2007
Адрес: Новосибирск
Сообщений: 1,021
Сказал спасибо: 10
Сказали Спасибо 70 раз(а) в 63 сообщении(ях)
domowoj на пути к лучшему
По умолчанию

Почитайте у Евстифеева о CTC - это
сброс счетчика при совпадении
http://lord-n.narod.ru/walla.html
а в даташите конкретно.
__________________
И на камнях растут деревья!
domowoj вне форума  
Непрочитано 11.04.2009, 17:44  
DrunyaRuma
Временная регистрация
 
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DrunyaRuma на пути к лучшему
По умолчанию

Режим CTC (сброс при совпадении).
Максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются либо регистром сравнения блока A OCRnA ,либо регистром захвата ICRn.Если настроить
вывод OCnA на изменение логического уровня на противоположное значение, то генерировать частоту
можно полностью на аппаратном уровне, а если генерировать прерывание, то в обработчике можно управлять любым выводом и на нем генерировать частоту.Определить генерируемую частоту можно по формуле:
Fген = Fclk/2*N*(1+X) ,
где X - значение записанное в регистре сравнения
N - коэффициент деления предделителя
Вот несколько способов реализации(CodeVisionAVR)

Прикрепленный файл: 6994734.rar
DrunyaRuma вне форума  
Непрочитано 12.04.2009, 17:43  
FedorChek
Прописка
 
Регистрация: 24.07.2008
Сообщений: 151
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FedorChek на пути к лучшему
По умолчанию

Совсем запутался... Как же заставить выводить нужную частоту если она задается в виде 1Гц=0x0064 2Гц=0x00C8
Fген = Fclk/2*N*(1+X)
не могу понять чему равен N и X
Fclk=0,032768 MHz (внешний)
FedorChek вне форума  
Непрочитано 12.04.2009, 18:20  
domowoj
Почётный гражданин KAZUS.RU
 
Аватар для domowoj
 
Регистрация: 09.12.2007
Адрес: Новосибирск
Сообщений: 1,021
Сказал спасибо: 10
Сказали Спасибо 70 раз(а) в 63 сообщении(ях)
domowoj на пути к лучшему
По умолчанию

Сообщение от FedorChek
виде 1Гц=0x0064 2Гц=0x00C8
А что такое 64 и С8?
Но для того чтобы получить требуемое нужно -
в OCR1A записать число 16384,
а вывод OC1A настроить на изменению на противоположное при совпадении.
В OCR1B записать 16284/2 и вывод OCR1B устанавливать
в 1 при совпадении.
Таймер1 в реж. СТС.
__________________
И на камнях растут деревья!
domowoj вне форума  
Непрочитано 12.04.2009, 18:42  
FedorChek
Прописка
 
Регистрация: 24.07.2008
Сообщений: 151
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
FedorChek на пути к лучшему
По умолчанию

Повторюсь и приведу части кода
register unsigned char timeout1 @5;
register unsigned int inc_buf @6;
далее идет сама процедура вывода
Код:
   inc_buf=0x2710; // эти данные читаются из EEPROM сдесь 0x2710 равна 100Гц
   timer_counter1_start();
#asm
   .def	ee	   =r23
   .equ	pin_in_bit	=1
   .equ	pin_out_bit	=0
   .equ	pin_in		=(1‹‹pin_in_bit)
   .equ	pin_out		=(1‹‹pin_out_bit)
   .equ  PORTB	     =$05 // Mega8 $18
   .equ  PIND        =$09 //Mega8 $10
   .def	out_prep	=r3
   .def	out_noprep	=r4
   .def  prep        =r17
   .def  inc_buf_lo =r6
   .def  inc_buf_hi =r7
   .def  sum_lo      =r19
   .def  sum_hi      =r20
   .def  timeout1    =r5
   .def  i           =r21
   ldi ee, eea_preparats
   add ee,sel
   ee_read:
   	sbic	eecr,eewe
  	rjmp	ee_read
   	out	eearl,ee
   	out	eearh,reg_00
  	sbi	eecr,eere
 	in	prep,eedr
        rjmp end_eeRead
   rcall ee_read
end_eeRead:
// Сдесь читается и выводится одна ячейка имеющая значения 1 или 0 в зависимости от этого генерируется частота 1-0--1-0 и наоборот этот кусок можно покак я так думаю пропустить
   in out_prep,PORTB
	set
	nop
	clt
	nop
	set
	nop
	bst	prep,0
	bld	out_prep,0;!!!!!!!!
	mov	out_noprep,out_prep
	ldi	prep,pin_out
	eor	out_noprep,prep
   // вот отсюда и начинается вывод самой частоты
   clr sum_lo
   clr sum_hi

loop_run:
   out PORTB,out_prep
loop_count:
   add sum_lo,inc_buf_lo
   adc sum_hi,inc_buf_hi
   brcc loop_count

   out PORTB,out_noprep

   sbis PIND,4 ; проверяем ESC. Если не нажата, то skip
   rjmp to_set

   tst timeout1
   brne loop_run

 //  clr i
  // rjmp to_end
to_set:
 //  ser i
to_end:
#endasm
те значения 0x0064=1Гц и т.д. (пишутся в еепром и потом считываются оттуда) и с ними ничего нельзя поделать т.е. они будут фигурировать именно в таком виде поскольку запись осуществляется через "инфрокрасник" (прога на компе››устройство››мое устройство)
FedorChek вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Микросхема К561ИЕ16 и частоты Меги88 FedorChek Микроконтроллеры, АЦП, память и т.д 0 13.04.2009 00:29
Импульсный вывод с порта-пина на основе частоты retcom Микроконтроллеры, АЦП, память и т.д 24 27.10.2007 15:11
Вывод инфо. SpL Микроконтроллеры, АЦП, память и т.д 21 30.01.2007 22:40
Вывод состояния через 1 вывод DL36 Микроконтроллеры, АЦП, память и т.д 0 16.11.2006 14:27
Вывод на экран букв... Купидон Микроконтроллеры, АЦП, память и т.д 2 27.07.2003 21:03


Часовой пояс GMT +4, время: 11:36.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot