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

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

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

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


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


Регулируемый генератор импульсов

Сообщений 31 страница 36 из 36

31

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

Впрочем по идеи можно и ещё проще:
Код:

Config Timer1 = Timer , Prescale = 1024 , Compare A = Toggle , Clear Timer = 1                                                                       
Dim Mem_time as Word
Enable Interrupts

Enable Timer1

start adc
Do
   set_time = Getadc(0)
   If Mem_time<>set_time Then
      Mem_time=set_time
      Compare1a = set_time
      print Timer1;  " ";set_time
   End If
Loop
End

В общем, на время изменения параметра сравнения, надо останавливать таймер, иначе он сравнивать будем скажем с числом 15, а таймер уже пролетел это число и получается пропуск (полный цикл). Конечно первый вариант кода более синхронный, т.к. загрузка изменения происходит на новом цикле.

Вот ввывод терминала, иногда таймер затыкается, но потом возвращается

Код:
86 557
216 554
362 556
508 557
97 556
1 557
86 556
216 557
364 554
508 557
96 556
3 555
87 556
217 555
363 557
510 556
2 557
86 556
216 555
362 556
509 555
99 556
3 555
88 556
220 557
364 555
510 557
99 556
2 555
86 556
216 557
362 555
509 556
527 557
86 555
216 557
362 555
508 559
95 56

0

32

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

А если так:
Код:

Do
main:
   set_time = Getadc(0)
   Compare1a = set_time
if Timer1 > set_time then goto main
print Timer1;  " ";set_time
loop

Работает, но так же таймер иногда затыкается, вывод терминала:

Код:
59 544
189 543
336 543
482 543
84 542
214 544
360 542
507 544
108 543
254 543
400 543
3 540
116 544
263 544
409 544
10 545
140 543
286 543
433 543
35 542
165 543
311 543
457 543
60 544
190 543
336 543
482 543
84 542
214 542
361 543
507 542
110 543
256 543
403 544
4 542
118 542
264 544
410 542
13 547

0

33

Может прописывать задание переполнения непосредственно в регистры, мимо операторов BASCOM ?

0

34

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

В общем, на время изменения параметра сравнения, надо останавливать таймер

А вы его останавливаете?

0

35

А я размышляю на данную тему с учетом архитектуры МК. У меня нет генератора и он мне как-то пока не нужен. Т.ч. реально проверить не могу.
Тут вроде на форуме уже тема генераторов глобально поднималась и была крутая тема с приличными хар-ми устройства.
Можно ещё в инете почитать про то как работает 16 разрядный таймер и какие подводные камни есть.

stas732, вы оба варианта попробовали? Непонятно. Можно временно вообще отказаться пока от print, чтобы понять вообще есть плавность в смене показаний генератора.

0

36

Да,я оба варианта тестировал

0


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