|
Таймеры atmega32a |
|
|
|
Dec 22 2014, 09:43
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773

|
Цитата(RabidRabbit @ Dec 22 2014, 12:35)  Будет частота 0,999993283, разве плохо? По мне, Плохо. И не частота, а период. Цитата(RabidRabbit @ Dec 22 2014, 12:35)  ...поди надо кварц специально отобранный... Частота взята для примера. Вот так студия отрабатывает такую частоту. Ничего не мешает в строке задания частоты установить требуемую и получить такой же результат.
|
|
|
|
|
Dec 22 2014, 12:43
|
Группа: Новичок
Сообщений: 6
Регистрация: 19-12-14
Пользователь №: 84 192

|
Цитата(alexeyv @ Dec 22 2014, 05:39)  Не проще использовать 16-ти разрядный в режиме CTC ? в моем не проще, все равно счет нужен. мне нужно не только считать по 1с. но минимум 25 раз в секунду изменять состояние каждого табло, проще сделать два счетчика, в первом меняем инфу на табло, во втором считаем Цитата(akl @ Dec 22 2014, 05:18)  Ваш код дает интервал 1 секунды, за счёт сравнений в обработчике, на 39мс больше. чем обусловлена эта задержка?
|
|
|
|
|
Dec 22 2014, 14:47
|
Группа: Новичок
Сообщений: 6
Регистрация: 19-12-14
Пользователь №: 84 192

|
Цитата(akl @ Dec 22 2014, 15:03)  в котором дополнительно чистится TCNT0 я выкинул это из кода, оно мне не нужно было, это я ставил по типу вдруг что изменится...)) без этого какова погрешность будет?
|
|
|
|
|
Dec 22 2014, 21:53
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(ishpanec @ Dec 21 2014, 19:54)  с Си не дружу) после того как gcc танцы с бубном устраивать заставлял))))) Значит попробуйте поработать в IAR. Я с ним сразу подружился. Пример на асме: CODE //======================================================================== .equ ST_TCNT = TCNT0 .equ ST_TIMSK = TIMSK .equ ST_OCIE = OCIE0 .equ ST_OCR = OCR0 .equ ST_TCCR = TCCR0 .equ CS0 = CS00 .equ CS1 = CS01 .equ CS2 = CS02 //========================================================================
.cseg
//======================================================================== .macro Init_System_Timer clr r16 out ST_TCNT, r16 in r16, ST_TIMSK sbr r16, 1<<ST_OCIE out ST_TIMSK, r16 outi ST_OCR, (XTAL/64/1000) in r16, ST_TCCR sbr r16, 1<<CS0 | 1<<CS1 out ST_TCCR, r16 .endmacro
.macro ReRun_Sys_Timer in r16,ST_OCR subi r16,-(XTAL/64/1000) out ST_OCR,r16 .endmacro //========================================================================
//======================================================================== Sys_Timer_Comp: push r16 in r16,SREG push r16
ReRun_Sys_Timer
sbr FLAGS,1<<SYS_TICK_FLG
pop r16 out SREG,r16 pop r16 reti //========================================================================
|
|
|
|
|
Dec 23 2014, 08:47
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(akl @ Dec 22 2014, 12:43)  По мне, Плохо. И не частота, а период. А по-моему, очень даже неплохо. Чай не для сервера ntp  И кстати, батенька, вовсе не период, а именно частота: 7890123 / 256 / 30821 Вы то вообще нерабочий код выложили в посте от Dec 20 2014, 09:56  А человек Вам поверит и будет удивляться, почему не фурычит...
|
|
|
|
|
Dec 24 2014, 03:17
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773

|
Да, действительно, период будет 256*30821=7890176/7890123=1,000006717259 секунды. Виноват, извините. Ниже показана работа кода из указанного поста.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|