Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Приборы, средства и способы измерения величин » Помогите со счетчиком импульсов.


Помогите со счетчиком импульсов.

Сообщений 1 страница 17 из 17

1

Хочу написать програмульку на BASCOM-AVR. Её задача - посчитать импульсы, пришедшие на ногу микрухи, но я не въеду какую команду нужно использовать. ПОМОГИТЕ КТО МОЖЕТ (если конечно эта задача выполнима).

0

2

Ьщжно использовать таймер -счетчик в режиме счетчика.

0

3

Мне счетчик нужен не отдельно сам по себе, а внутри более сложной программы. Иначе стал бы я народ такой ерундой мучать!

0

4

Считай импульсы по прерыванию. Можно настроить на разные режимы - спад, высокий уровень, низкий...

0

5

Ну может быть такой вариант:
Разрешай внешнее прерывание, по нему инкрементируй свой счетчик.
Примерно так:

Dim Counter As Integere
Config Int0 = Low Level
On Int0 label33                                         
Enable Interrupts
Enable Int0
Do
.....................
Loop

End

label33:
   Incr Counter
Return

0

6

Спасибо за помощь! Но мне пока не понятно как работает этот алгоритм и где здеся переменная ="кол-во импульсов"? Рядом с умными чувствую себя таким тупым! :O

0

7

Dim Counter As Integere    'переменная "кол-во импульсов"
Config Int0 = Low Level      'настройка прерывания Int0 на срабатывание по низкому уровню
On Int0 label33                  'при срабатываниии прерывание Int0 переход  на метку label33                     
Enable Interrupts               'разрешить прерывания
Enable Int0                       'разрешить прерывание Int0
Do                                   'Начало основного цикла
.....................                  'Тело программы
Loop                                 'Конец основного цикла

End

label33:                           'Выполнение действий при срабатывании прерывания Int0
   Incr Counter                 'Увеличить значение Counter на еденицу
Return                             'Выход из подпрограммы

0

8

To FREEMAN все мы когда-то начинали ........
radan Спасибо за коментарии, ну не могу себя заставить писать коменты. Хоть часто об этом жалею......

Там в примере необходимо добавить подавление дребезга контактов, если входной сигнал от кнопки или реле.

0

9

AlexandrM написал(а):

Ьщжно использовать таймер -счетчик в режиме счетчика.

А с этого места поподробнее можно? С примерами:)

0

10

Спасибо за помощь ВСЕМ кто помог! У меня вопрос как привязать это прерывание int0 к нужному Pinb.0? А в остальном всё круто!

0

11

[

FREEMAN написал(а):

Спасибо за помощь ВСЕМ кто помог! У меня вопрос как привязать это прерывание int0 к нужному Pinb.0? А в остальном всё круто!

А для этого нога специательная есть, и для int0 и для int1-5

А вот привязать затруднительно :D
Проще плату переразвести :D

0

12

>>А с этого места поподробнее можно? С примерами:)
$regfile = "2313def.dat"
$crystal = 8000000
Config Timer0 = Counter , Edge = Rising

Do

Loop
End

По переднему фронту на PD4 +1 в TCNT0

0

13

Мне нужно использовать 2 пина для 2х разных источников прерываний и отслеживать то один, то другой, причем кол-во импульсов заносить в переменные; Как мне это оформить? Может использовать pulsein? Подскажите кто-нить, а то я уж всю голову сломал блин!!! ;о(

0

14

разрешай внешние прерывания и в обработчиках прописываешь свои условия и нужные процедуры по счетчикам.
Ася есть?
если че стучи #434077373

0

15

Теперь я в аське 418267559.

0

16

AlexandrM написал(а):

$regfile = "2313def.dat"
$crystal = 8000000
Config Timer0 = Counter , Edge = Rising
Do
Loop
End
По переднему фронту на PD4 +1 в TCNT0

А еще подробнее можно? Для совсем одаренных :)
для мега8:)

Отредактировано Skull (2007-11-17 22:56:17)

0

17

Нашел вот такую штуку, как понял частотомер....
Хто-нибудь,пожалуйста, подпишите комментарии, чтоб уразуметь что к чему .....

$regfile = "m128def.DAT"
$crystal = 16000000
$baud = 9600

$hwstack = 32
$swstack = 16
$framesize = 40

Dim IsrFlag As Byte
Dim StartStamp As Word
Dim StopStamp As Word
Dim TimerTicks As Word
Dim FrequencyHz As Long

' ======================================================
' Timer1 configuration
'
' Mode: Normal mode
' Prescaler: 1 (No prescaler)
' Input capture: Falling edge / noise canceler enabled

TCCR1A=&H00
TCCR1B=&H81   ' &H01 will disable the noise canceler

Config PinD.4 = Input  ' Input capture pin (ICP1)
Set PortD4.0            ' Enable internal pull-up on the ICP1 pin.

' ======================================================

On Capture1 Timer1_capture_isr Nosave
Enable interrupts

Do

  IsrFlag = 0
  StartStamp = 0
  StopStamp = 0
  Timer1 = 0  ' Clear Timer1 count

  Set TIFR.ICF1  ' Clear Timer1 Input Capture Flag.
  Enable Capture1 ' Enable Input Capture interrupt.

  Waitms 10 ' During this time the signal is measured on the ICP1 pin.
             ' Here we wait 10 ms so we can measure down to 250 Hz.
             ' If the lowest frequency is 44.1 kHz, then wait for 100 ?s.

  Print "Start: " ; StartStamp ; "   Stop: " ; StopStamp

  TimerTicks = StopStamp - StartStamp
  Print "Timer Ticks: " ; TimerTicks

  FrequencyHz = 16000000 / TimerTicks  '16 MHz clock and no prescaler.
  Print "Frequency : " ; FrequencyHz ; " Hz"

  Waitms 1000
  Print "=========================================================="

Loop

End

'======================================================
' This interrupt service routine is triggered by a falling edge
' on the ICP1 pin.(PD4 of the ATbanned28).

Timer1_capture_isr:

!PUSH R16
!PUSH R17
!PUSH R26
!PUSH R27
!IN R16, SREG
!PUSH R16

'==============================

LOADADR IsrFlag , X
!LD R16, X

!sbrc R16,0 ' Skip next instruction if bit 0 in R16 is cleared.
!rjmp Timer1_capture_isr2

!SER R16  ' Set Flag (the variable IsrFlag is our flag)
!ST X, R16 ' Store the variable IsrFlag

LOADADR StartStamp , X 'Save Input Capture Register. (First falling edge).
!IN R16, ICR1L
!IN R17, ICR1H
!ST X+, R16
!ST X, R17

!rjmp Timer1_capture_isr3

'==============================

Timer1_capture_isr2: 'This was the second falling edge

!LDS R16,TIMSK 'Disable capture interrupt
!ANDI R16,&HDF
!STS TIMSK,R16

LOADADR StopStamp , X   'Save Input Capture Register
!IN R16, ICR1L
!IN R17, ICR1H
!ST X+, R16
!ST X, R17

Timer1_capture_isr3:

!POP R16
!OUT SREG, R16
!POP R27
!POP R26
!POP R17
!POP R16

Return

'=====================================================

0


Вы здесь » Программирование ATMEL в BASCOM. » Приборы, средства и способы измерения величин » Помогите со счетчиком импульсов.