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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Аппаратное формирование задержки импульсов


Аппаратное формирование задержки импульсов

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

1

Код:
$regfile = "m8def.dat"                            ' Выбор типа контроллера.
$crystal = 12000000                               ' Частота генератора, Гц.
$hwstack = 128                                    ' Размер аппаратного.
$swstack = 64                                     ' и программных стеков.
$framesize = 64

Config Portb.3 = Output
Config Portb.4 = Output

Config Timer0 = Timer , Prescale = 1024
On Timer0 Int_timer
Timer0 = 138
Enable Timer0

Config Timer2 = Timer , Prescale = 1024 , Compare = Set , Clear_timer = 1
Timer2 = 0
Compare2 = 250
Enable Timer2

Enable Interrupts



Do
Loop
End

Int_timer:

  Timer0 = 138

  Timer2 = 0
  Compare2 = 50

  Toggle Portb.4
Return

Нужно сформировать импульс с некоторой задержкой относительно прерывания. Лог. 0 на выходе PortB.3 должен появляться при возникновении прерывания, а лог. 1 через некоторое время, задаваемое в Compare2, но на выходе все время лог. 1. Что я делаю не так?

0

2

Код:
  $regfile = "m8def.dat"       ' Выбор типа контроллера.
  $crystal = 8000000       ' Частота генератора, Гц.
  $framesize = 64
  $hwstack = 128       ' Размер аппаратного.
  $swstack = 64       ' и программных стеков.



  Config Portb.3 = Output

  Config Timer2 = Timer , Prescale = 1024

  On Timer2 Обработка_прерывания_timer2
  On Compare2 Обработка_прерывания_compare2

  Enable Timer2
  Enable Compare2
  Enable Interrupts


  Do

     nop

   Idle
  Loop
 End


'===============================================================================
  Обработка_прерывания_timer2:
'-------------------------------------------------------------------------------
    Reset Portb.3

    Compare2 = 128
'-------------------------------------------------------------------------------
  Return
'===============================================================================


'===============================================================================
  Обработка_прерывания_compare2:
'-------------------------------------------------------------------------------
    Set Portb.3
'-------------------------------------------------------------------------------
  Return
'===============================================================================

0

3

sasha_1973, прерывания это логичное решение, но т. к. присутствуют другие прерывания, то обработка его от Compare может произойти с некоторым опозданием, а это нежелательно.

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

Можно через PWM

Спасибо, попробую. Может и получится.

Вообще это будет регулятор мощности. Вместо прерывания от таймера будет от Int0 каждые 10 миллисекунд. Чтобы была возможность регулировать мощность от 0 до 100%, шаг задержки импульса должен быть 0.1 миллисекунд. Если реализовать используя прерывания может быть относительно большая, случайная погрешность.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Аппаратное формирование задержки импульсов