Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » помогите с таймером счетчиком

Страниц (2): [1] 2 »
 

1. sibiryak - 04 Июня, 2013 - 08:18:10 - перейти к сообщению
Никак не могу понять работу этих прерываний от таймера и внешних. Запустить могу, а как с ними работать ну никак не пойму.
В общем нужно посчитать внешние прерывания за определенный период ( обороты чего либо ).
Есть 8ми разрядный таймер работает в режиме 4Мгц/64 по завершению складывает значения в регистр. В итоге регистр прокручивается около секунды.
А обороты которые надо посчитать равны от 5 об/сек до 100об/сек. Я так понимаю нужно посчитать сколько будет прерываний за один прогон регистра от таймера...

Вот собственно наброски.

CODE:

.NOLIST
.INCLUDE "m8def.inc" ; ATMEGA8
.LIST

.def temp = r16
.def temp1= r17
.def temp4= r18
.def count = r19 ;счетчик таймера
.def flag = r20

.DSEG
.ORG 0X0060
.CSEG
.ORG $0000

rjmp RESET
rjmp EXT_INT0 ;внешнее прерывание INT0
reti // INT1
reti // TIMER2 COMP
reti // TIMER2 OVF
reti // TIMER1 CAPT
reti // TIMER1 COMPA
reti // TIMER1 COMPB
reti // TIMER1_OVF
rjmp TIMER0_OVF ;прерывание таймера 0
reti // SPI
reti // UART
reti // UART
reti // UART
reti // ADC_INT
reti // EE_RDY
reti // ANA_COMP
reti // TWI
reti // SPM_RDY


EXT_INT0:
ldi flag,0b00000001
reti


RESET:
ldi temp, HIGH(RAMEND) ; Initiiere MSB Stapel
out SPH,temp
ldi temp, LOW(RAMEND) ; Initiiere LSB Stapel
out SPL,temp

;инициализация портов
ldi temp,0xff ; ïîðò Â âûõîä
out DDRB,temp
ldi temp,0x00
out PORTB,temp
ldi temp,0x00 ; ïîðò D âõîä
out ddrd,temp

; выкл компаратор
ldi temp,1<<ACD
out ACSR,temp

;инициализация таймера
ldi temp,0b00000001
out timsk,temp
ldi temp,0b00000011
out tccr0, temp

ldi flag,0b00000000

;инициализация прерывания от int0
ldi temp, 1<<ISC01 ;по спаду 1-0
out MCUCR,temp
ldi temp, 1<<INT0 ;разрешаем int0
out GICR, temp
sei

main:
sbrs flag,0
rjmp main

; прерывание по таймеру

TIMER0_OVF:
inc count ; инкреметируем count
reti
2. mihail - 04 Июня, 2013 - 22:46:05 - перейти к сообщению
Как я понял Вам нужно посчитать число прерываний по внешнему сигналу за 1 секунду. В обработчике прерывания INT0 увеличиваете какой нибудь регистр на 1. В прерывании по переполнению таймера/счетчика 0 значение этого регистра передаете по UART. Затем обнуляете этот регистр. Раз в секунду UART будет передавать число оборотов в секунду. Основной цикл программы пустой.

PS При инициализации прерываний сбрасывайте их флаги.
3. sibiryak - 04 Июня, 2013 - 23:51:56 - перейти к сообщению
Спасибо, только с UARTом я еще не сталкивался, по этому не вкурсе куда и что по нему нужно передавать Замешательство Может без него можно ?
mihail пишет:
Как я понял Вам нужно посчитать число прерываний по внешнему сигналу за 1 секунду. В обработчике прерывания INT0 увеличиваете какой нибудь регистр на 1

Да, все верно. Далее исходя от числа оборотов я буду писать функции для портов вывода.
Это будет система зажигания с корректировкой угла опережения для авто.
4. mihail - 05 Июня, 2013 - 00:31:14 - перейти к сообщению
UART для примера. В прерывании по переполнению таймера/счетчика 0 можно копировать значение изменяемого в INT0 регистра в другой регистр. И в основном цикле программы работать с этой копией. Там всегда будет число оборотов в секунду.

CODE:
EXT_INT0:
inc R21 ; Increment R21
reti

TIMER0_OVF:
mov R22, R21 ; Copy R21 to R22
ldi R21, 0 ; Write 0 to R21
reti

main:
cpi R22, 5 ; Compare R22 to 5
brne mark1 ; Branch if R22 <> 5
nop
mark1:
nop
rjmp main


PS Обновление данных раз в секунду не маловато будет для нормальной работы ДВС.
5. cjA - 06 Июня, 2013 - 04:47:50 - перейти к сообщению
если нупы для работы- значит нужно на лупы заменить в зависимости от частоты, а если для красоты- то убрать. Так для чего?

(а где вы копируете счетчик таймера? р22 и р21 - регистры общего назначения вроде? (каунт- р19)) или это для примера? mihail, с Вашими мозгами для примера очень сложно. (чот мне тоже захотелось на бензакосу такую штуку)
6. sibiryak - 06 Июня, 2013 - 10:40:59 - перейти к сообщению
cjA пишет:
чот мне тоже захотелось на бензакосу такую штуку

Коса наверно заморская там и так все отточено.
А на УАЗике всю электронику бы переделал.
7. cjA - 08 Июня, 2013 - 04:34:04 - перейти к сообщению
интерскул, есть магнето, свеча и тумблер между ними. Смущение
но подумать об этом лучьше же чем дом2 смотреть? (Хотя еще лучьше- пойти помидоры полить, раз я так умный парник и не сделал)
8. morokoriss - 08 Июня, 2013 - 09:54:02 - перейти к сообщению
У меня две косы, Shtil fs130 и интерскол (не помню какой). Shtil конечно другой уровень, но капризная до ужаса. Чуть бензин постоял и уже может не завестись, свежий подавай. Но и тяга зато у неё и движок 4х тактный (только масло в бензин всё равно добавляетя). А вот интерскол с бензином зиму простоял, весна пришла я её раз и завёл) Работает хорошо, мощи в принципе хватает но шпуль мне не очень нравится да и леску более 2мм лучше не использовать. А вот косы с картером (где масло не добавляют в бензин) - это шлак. Иногда приходится завалить косу на бок чтобы прокосить труднодоступный участок и в этот момень маслице то и стекёт вниз. Заборник его то не сможет всосать и капут! Не знаю делают ли такие косы известные фирмы, я пока только какой-то патриот видел за 4000р.
9. morokoriss - 08 Июня, 2013 - 23:23:25 - перейти к сообщению
cjA, Вы имеете такую же острую неприязнь к Дому 2 как и я?
10. cjA - 12 Июня, 2013 - 04:44:53 - перейти к сообщению
morokoriss пишет:
А вот интерскол с бензином зиму простоял, весна пришла я её раз и завёл
А что такое Дом2? У меня тоже на старом бензине "зимнем" запустилось и до конца выработало, я удивилсо!!! Жуть
И все! на новом бензине дажене пыхает, как проверить свечу "электронно"?
(Добавление)
от магнето есн
11. Predator - 12 Июня, 2013 - 14:55:39 - перейти к сообщению
Цитата:
А что такое Дом2?
- он неженатый или глобально повезло с супругой. году этак в 2005 (точно не помню) меня насторожила реклама "Дом2 - первая весна".
P.S. мне с супругой повезло, а вот "собутыльнику" нет...
12. cjA - 13 Июня, 2013 - 07:27:08 - перейти к сообщению
Predator, вопрос был задан конкретно!. Если бензосмесь поместить в морозилку (она простояла всю зиму в сарае, промерзала не раз) - она станет лучьше или нет? Чисто химический вопрос, я в химии дуб. (при чем тут дом2? Красивые бабы, да, но они же не отличат кусачки от пассатижев?)
13. Predator - 13 Июня, 2013 - 17:05:52 - перейти к сообщению
видимо дом2 это в оффтоп, так-же как и бензин (тема-то про таймер).
насколько я помню (из химии радиотехничекого университета) в бензине не должно быть морозонестойких компонентов. Разве что если его соляркой бадяжили - то некоторые фракции могли выпасть в виде парафина, но потом опять раствориться...
14. morokoriss - 13 Июня, 2013 - 18:44:23 - перейти к сообщению
Свечу надобно выкрутить и электрод на газу прожеч как следует. Затем щёткой металлической шоб блестел как эти самые) Куда уж ещё электронней?
15. cjA - 13 Июня, 2013 - 20:55:10 - перейти к сообщению
morokoriss вот ты куда?
Так почему перемороженая бензосмесь зажигается более чем на ура? (зописал- перед коской- отморозить.) А вам, химикам- вопрос!!!!???