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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » генерация 21-23 кгц ШИМ Atmega48


генерация 21-23 кгц ШИМ Atmega48

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

1

доброго дня!
помогите с кодом для Bascom для реализации аппаратного ШИМ на Мега48
Не могу запустить...

Программый - не проблема

просто программа делает одно, а ШИМ должен гнать в линию меандр 22 кгц (+/- 1 кгц)

СПАСИБО! :)

ps
пример из комплекта компилятора с описаним таймеров не помог :(

ps2
как правильно выставить предделитель, а потом выставить режимы

на ассме примеры нашел, вроде понял их
но как записать на Bascom?

Отредактировано Александр Д. (2010-10-06 12:49:11)

0

2

что-то запустил на ноге 15, PB.1...

$regfile = "m8DEF.dat"                  ' >>> BASCOM <<<
$crystal = 8000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Pwm1a = 100

End

0

3

ничего не работает
как настроить таймер в режиме СТС (без использования прерываний)?
Как на Bascom правильно инициализировать этот режим, чтобы в Мега48 на ноге PD.6 был сигнал 22 кгц?
:canthearyou:

0

4

спасибо
сейчас попробую...

да, именно на ноге D.6
подскажите, пожалуйста, а то я день (и ночь) на это убил...

0

5

почему это - не работает?
Config Timer0 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Compare0a = 182

хотя в dat файле к данному МК имя разрешено и описано... :(
всё, это какой-то кашмар
я спать!

ps
тут говорится, что это баг баскома:
http://roboforum.ru/forum2/topic6212.html?style=9

Отредактировано Александр Д. (2010-10-07 01:09:10)

0

6

у японцев нашел...
надо так:
Config Timer0 = Counter , Edge = Rising , Clear Timer = 1 , Compare A = Toggle
Ocr0a = 49 ' 100 ÷ 2 = 50 @@@@@- 1

тут отличное описание таймеров, примеры на Bascom!
Там на японском, но Google прекрасно переводит:
http://translate.google.ru/translate?u=http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/BASCManu/BASCMtimer.html&amp;sl=ja&amp;tl=ru&amp;hl=&amp;ie=UTF-8

Отредактировано Александр Д. (2010-10-07 08:54:19)

0

7

а у меня Демо....

так...
Ясно:
в демо "вырезана" часть возможностей
НО АВТОР НЕ ПРЕДУПРЕДИЛ!!!

жирный МИНУС Баском`у за такие дела: я СУТКИ убил, чтобы это понять :(

Отредактировано Александр Д. (2010-10-07 08:45:58)

0

8

словом, ассемблер - сила!

Код:
ldi zl,66
out TCCR0A,zl

ldi zl,186
out OCR0A,zl

равно

Код:
Config Timer0 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Ocr0a = 182

Отредактировано Александр Д. (2010-10-07 11:05:34)

0

9

Эта функция в Bascom неудачная - ведь все кристаллы разные и поэтому встречаются ошибки.
Рекомендую все конфигурационные регистры описывать вручную, например так
'    ТАЙМЕРЫ
Tccr0 = &B00000111                      'режим таймера 0: Fкв/1024 - часы реального времени
'---------------------
Tccr1a = &B10100010                     'таймер 1: 16-ти разрядный ШИМ с выходами OCR1A и OCR1B
Tccr1b = &B00011001
Tccr1c = &B00000000                     'значение длительности 65536/fкв
Tcnt1h = &H00 : Tcnt1l = &H00
Ocr1ah = &H20 : Ocr1al = &H00           'и коэффициентом 0.4 %
Ocr1bh = &HE0 : Ocr1bl = &H00
Icr1h = &HFF : Icr1l = &HFF             'и коэффициентом fкв * ffffh
'---------------------
'    ПОРТЫ
Ddra = &B11110011                      'направление линий порта A: 1 - на вывод
Porta = &B00001100                      'исходное состояние линий A: 0000HH00
'---------------------
Ddrb = &B11111101                      'направление линий порта B: 1 - на вывод
Portb = &B00000100                      'исходное состояние линий B: 000001Z0
Если не хочется читать даташит, можно использовать классный инструмент
CodeWizardAVr компилятора CodeVision v.1.25
или аналогичный Application Builder ICC ImageCraft v.7 (доступно в ДЕМОверсиях)

+1

10

спастбл, попробую

CodeWizardAVr компилятора CodeVision v.1.25
пробовал и его, не очень его понял

0

11

Если найдется время у уважаемых форумчан, то просветите. Не работает ШИМ режим таймера 0. вот код

$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40

Dim W As Byte

'Config Pinb.2 = Output
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1 , Clear Timer = 1
Tccr0a = &B11000011
Tccr0b = &B00000001
Timsk = &B00000011

'Tccr0b.wgm02 = 0
'Ocr0b = 0
Ocr0a = 14

On Ovf0 Tim0_isr
On Oc0a Tim0_compa_isr

Enable Timer0
'Enable Oc0b
Enable Oc0a
Enable Interrupts

Do

Loop

Tim0_isr:
'Pwm0a = 200
Return

Tim0_compa_isr:
'Ocr0a = E
Return

'Tim1_isr:
'Return

End

подскажите что не так. заранее благодарен.

Отредактировано kara1126 (2011-01-19 10:37:43)

0

12

CLKPR=&H80    'делитель тактовой частоты К=1
CLKPR=&H00

TCCR0A=&H83  'режим таймер 0
TCCR0B=&H01
OCR0A=&H14    'значение ШИМ

DDRB=&H04     'линия порта на вывод

и все!

0

13

Пробовал как Вы ddm указали. Не работает. В другом симуляторе AlgorithmBuilder все работает. Может причина в программе-симуляторе. Использую Bascom-AVR 1.11.9.8

Отредактировано kara1126 (2011-01-20 11:36:59)

0

14

Прошей в кристалл и пробуй! Проверять ШИМ в симуляторе - это бред. Вряд ли его разработчик знает настоящую модель таймера и, тем более, захочет ее полностью реализовать.

0

15

Спасибо за совет dmm. Мысль такая была, что что-то не так с симулятором, ведь в другой программе все работает. Буду пробовать.

Отредактировано kara1126 (2011-01-25 03:55:28)

0

16

Какая частота будет на выходе?

Код:
$regfile = "m8def.dat"                            ' ATmega8
$crystal = 4000000                                ' 4 МГц

$hwstack = 48
$swstack = 36
$framesize = 36

Config Pinb.3 = Output                            ' Выход ШИМ
Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Up , Prescale = 1
Ocr2 = 128

Do
Loop
End

Под рукой нет частотомера, есть только старый аналоговый осциллограф (1982 года выпуска), правда, его давно пора выбросить уже. Если верить ему, то на выходе частота, примерно 20 кГц.

По логике вещей, должно быть 4000000 / 256 = 15625 Гц.

Но какая будет на самом деле?

0

17

Погонял все это в протеусе, и если ему верить, то период составляет 120 мкс., что соответствует частоте, примерно 8300 Гц.
Подозреваю что ШИМ работает в режиме Phase Correct PWM Mode, для которого частота будет 4000000 / 510 = 7843 Гц.  :confused:  :suspicious:

0

18

Ребят, а использовать PD.5 (OC0B) для ШИМ в меге8 на таймере0 реально?

0


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » генерация 21-23 кгц ШИМ Atmega48