Обсуждаем контроллеры компании Atmel.
Ответить

Программирование таймера в Bascom AVR

Вт сен 18, 2012 16:39:43

Здравствуйте :)
Программирую AVR микроконтроллеры в BascomAVR нужно сделать ик бампер, знаю что в микроконтроллерах авр, в частности меге 8 имеется возможность формировать шим сигнал, на каком-то сайте нашёл прогу:
$regfile = "m8def.dat" 'используем Mega8
$crystal = 16000000 'частота кварцевого резонатора 16mHz

'Генерация частоты 36kHz
'Настраиваем Timer1

Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle

' Расчитываем Compare1a
' тактовая частота (kHz) / частота TSOPa (kHz) / 2 = Compare
' 16000 / 36 / 2 = 222

Compare1a = 222

'PortB.1 - выход сигнала
'PinC.0 - считываем состояние TSOPa
'Portd.0 - сигнальный светодиод

Config Pinb.1 = Output
Config Portd.0 = Output
Config Pinc.0 = Input

Start Timer1
Do
If Pinc.0 = 0 Then
Portd.0 = 1
Else
Portd.0 = 0
End If
Loop
на форумах поспрашивал, вроде работает, формирует на выходе В1 сигнал с частотой 36 кГц( как раз для ТСОПа), решил взять её, загрузил, прещитал comparea1 но ничего не работает, почему? :dont_know:
Тогда попробовал сам написать код:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Pwm , Pwm = 9 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 8
Config Portb = Output
Config Portd = Input
Config Portc = Output
Set Portc.1
Waitms 500
Reset Portc.1' эти строки не имеют смысла, они нужны просто для того что бы светодиод мигнув пару раз показал работает ли микроконтроллер или нет, к стати это пригодилось
Waitms 500
Set Portc.1
Waitms 500
Reset Portc.1
Do
Pwm1a = 1500' опытном путём было выяснено что именно это значение нужно для того что бы ТСОП понимал микроконтроллер
Loop
End
однако мне объяснили что при PWM=9 невозможно записать Pwm1a=1500, подскажите пожалуйсто что можно сделать?
И ещё дальность срабатывания бампера, указанная в статье откуда я взял первый код равна 30 см у меня же при запуске моего кода получилось всего 15см и срабатывания на этом расстоянии не уверенные(светодиод начина с 10см от препятствия мигает), я не понимаю с чем это связанно толи с кодом, то ли со схемой(собственно схемы нет, я просто подключил ТСОП к батарейке, а к нему светодиод для индикации), может нужно добавить какие-то средства, для избавления от помех?
В общем помогите пожалуйсто!
Заранее спасибо! :)
Ответить