реклама на сайте
подробности

 
 
> Таймеры atmega32a
ishpanec
сообщение Dec 19 2014, 09:57
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-14
Пользователь №: 84 192



Здравствуйте
Проблема возникла такая, есть у меня atmega32a китайский. постигаю таймеры. использую таймер0 (8 бит).
Логика моих мыслей такова:

если там частота 16МГц а таймер считает до 256 то каждое переполнение таймера будет происходить (1 / 16 000 000) * 256 = 16 микросекунд (0,000016).
Соответственно, что бы получить 1 секунду надо таких отрезков 62 500 (0,000016 * 62 500 = 1 сек.)
Что бы особо не мучиться с 16 битными числами я разбил на две 8 битные, т.е. 250 и 250.
Значит в прерывании по переполнению мы считаем первый счетчик, када он доходит до 250 мы увеличиваем второй и обнуляем первый.
Сразу что скажу что cksel биты не менял, они все отключены, значит частота должна быть нормальной. В коде не устанавливаю предделитель для таймера.
Внешнего кварца, как и осциллографа, не имею. замерить частоту не выходит. пробовал всю партию контроллеров (10 штук) результат один и тот же, либо у них у всех не 16 МГц, либо логика моих действий не верна.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ishpanec
сообщение Dec 21 2014, 13:54
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-14
Пользователь №: 84 192



отвечу всем по порядку)

Цитата(zombi @ Dec 19 2014, 15:11) *
Не плохо было бы узнать полученный результат



значит при счете до 62 500 мигает он раз в 15 секунд %) наблюдал просто, ни каких особых измерений, это если бы там миллисекунды погрешности было, другое дело) вот биты из программки

Цитата(Dust112 @ Dec 19 2014, 15:16) *
Вы раздел 8-bit Timer/Counter0 with PWM документации читали?


я исключительно по книжкам. не думал что там особая разница есть.

Цитата(stells @ Dec 19 2014, 15:26) *
не 8?


пробовал клепать расчеты под 8, все равно заметные глазу отличия есть) мигание ~ раз в 7 секунд
что за таблица 9?

Цитата(demiurg1978 @ Dec 19 2014, 16:10) *
У меня такой способ получить 1 мс при 8 и 16 мгц:


с Си не дружу) после того как gcc танцы с бубном устраивать заставлял)))))

Цитата(akl @ Dec 20 2014, 10:56) *
С точностью до такта можно временной интервал формировать так. Писано для tiny13, но и для mega32 будет примерно также.


вашу магию тоже не совсем понял...

вот моя магия

CODE

device atmega32a
.include "D:\asm\include\m32def.inc"
.def temp = r16 ; темповая переменная
.def countTimer = r17 ; счетчик задержки
.def countTimer2 = r27
.def posR = r25

.equ timerSleep = 250
.equ timerSleep2 = 125

; начало программы
.org 0
rjmp RESET

.org $16 ; перывание таймера 0
rjmp TIMER0

TIMER0: ;начало таймер0

inc countTimer
cpi countTimer, timerSleep
ldi temp, 0
out TCNT0, temp
breq showsInt
reti

showsInt:

clr countTimer
inc countTimer2
cpi countTimer2, timerSleep2
breq IncsSeconds
reti

IncsSeconds:
clr countTimer2
inc posR
cpi posR,1
breq showReg1
cpi posR,2
breq showReg2

showReg1:
ldi temp, 0b11111111
rjmp continueTimers

showReg2:
ldi temp, 0b00000000
ldi posR,0


continueTimers:
out PORTA, temp
reti ;конец таймер 0


RESET:

ldi temp,low(RAMEND) ;загружаем указатель на стек
out SPL,temp

ldi temp,high(RAMEND) ; указатель стека, старший байт
out SPH,temp

ldi temp,0b11111111 ; контакт 0-7 порта A на выход
out DDRA,temp ;

ldi temp, 0b00000001 ; контакт 0-1 порта В на выход
out DDRB, temp
out PORTB,temp

clr countTimer
clr countTimer2

ldi temp,0b00000001
out TIMSK,temp

ldi temp,0b00000001
out TCCR0,temp

clr posR

sei ;разрешить прерывания

END:
rjmp END ;бесконечный цикл

там у меня просто циферблат стоит, пока им моргаю...)
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Dec 22 2014, 21:53
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 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
//========================================================================
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ishpanec   Таймеры atmega32a   Dec 19 2014, 09:57
- - zombi   Цитата(ishpanec @ Dec 19 2014, 13:57) рез...   Dec 19 2014, 14:11
- - Dust112   ishpanec, Вы раздел 8-bit Timer/Counter0 with PWM...   Dec 19 2014, 14:16
- - stells   Цитата(ishpanec @ Dec 19 2014, 12:57) есл...   Dec 19 2014, 14:26
|- - demiurg1978   У меня такой способ получить 1 мс при 8 и 16 мгц: ...   Dec 19 2014, 15:10
- - akl   С точностью до такта можно временной интервал форм...   Dec 20 2014, 09:56
|- - ishpanec   Цитата(ishpanec @ Dec 21 2014, 14:54) не ...   Dec 21 2014, 15:17
|- - stells   Цитата(ishpanec @ Dec 21 2014, 16:54) что...   Dec 21 2014, 16:29
- - zombi   получается Internal Calibrated RC Oscillator 1 MHz...   Dec 21 2014, 16:06
- - ishpanec   да, уже разобрался, всем спасибо за помощь!) п...   Dec 21 2014, 18:19
- - akl   Ваш код дает интервал 1 секунды, за счёт сравнений...   Dec 22 2014, 04:18
- - alexeyv   Зачем для этой цели использовать 8-ми разрядный сч...   Dec 22 2014, 04:39
|- - akl   Цитата(alexeyv @ Dec 22 2014, 09:39) Не п...   Dec 22 2014, 05:57
||- - RabidRabbit   Цитата(akl @ Dec 22 2014, 08:57) Проще, к...   Dec 22 2014, 07:35
||- - akl   Цитата(RabidRabbit @ Dec 22 2014, 12:35) ...   Dec 22 2014, 09:43
||- - RabidRabbit   Цитата(akl @ Dec 22 2014, 12:43) По мне, ...   Dec 23 2014, 08:47
|- - ishpanec   Цитата(alexeyv @ Dec 22 2014, 05:39) Не п...   Dec 22 2014, 12:43
- - akl   Каждое прерывание Т0, в котором дополнительно чист...   Dec 22 2014, 14:03
|- - ishpanec   Цитата(akl @ Dec 22 2014, 15:03) в которо...   Dec 22 2014, 14:47
- - akl   Да, действительно, период будет 256*30821=7890176/...   Dec 24 2014, 03:17
- - RabidRabbit   Я одного не понимаю, после первого переполнения в ...   Dec 24 2014, 11:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016