Без описания |
Поиск в теме | Версия для печати |
Artem |
Отправлено: 04 Сентября, 2012 - 21:13:06
|
Главнокомандующий

Сообщений всего: 347
Дата рег-ции: Май 2012
|
Здравствуйте.
Программирую на Бейсик в Баском АВР, нужно настроить таймер что бы он формировал прямоугольные импульсы на выходе через равные промежутки времени. Вот код:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Compare1a = 222
Config Portb.1 = Output
Start Timer1
Do
Loop
End
Код взял с сайта, поэтому в правильности не уверен, но откомпилировав его ошибок не было, я загрузил его в мк и по идее он должен выдавать прямоугольные импульсы на выходе B1, но он этого не делает, я узнал это подключив светодиод, после того как ничего не произошло я подключил пьезодинамик, результат нулевой.
Затем я подумал, что сгорел порт мк поэтому я заменил его на другой, но результат всё тот же.
Затем я попробовал заменить код, попробовал заменить значение Compare1a, но всё равно ничего, попробовал объявить его значение после Do но тоже ничего, даже попробовал заменить Portd на PINd но ничего, попробовал запустить таймер в бесконечном цикле, но ничего, всё время результата нет, я не понимаю почему
Помогите кто нибудь
Заранее спасибо  |
|
|
Artem |
Отправлено: 05 Сентября, 2012 - 21:04:31
|
Главнокомандующий

Сообщений всего: 347
Дата рег-ции: Май 2012
|
Я читал эту статью, десять раз, но ведь по словам автора вот этот код:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Compare1a = 222
Config Portb.1 = Output
Start Timer1
должен работать, я просто пытался повторить его так что бы он работал.
Теперь по поводу вот этого кода:
Config Timer1 = Pwm, Pwm = 9, Compare A Pwm = Clear Down, Compare B Pwm = Clear Up, Prescale = 8
Config PORTB.3 = Output
Config PORTB.4 = Output
я так понимаю вот эта часть Compare A Pwm = Clear Down, Compare B Pwm = Clear Up она изменяет шим сигнал а нужно что бы он был постоянный, значит эту строчку нужно убрать, наверно
или нужно будет убрать строчку:
Incr Pwm1a
Incr Pwm1b
Я не знаю какую
Тогда в куда записывать значения OCR1A?
anar пишет: как вы только учитесь в школе?
извините, а вы как учились? |
|
|
anar |
Отправлено: 08 Сентября, 2012 - 09:46:08
|

Главнокомандующий

Сообщений всего: 441
Дата рег-ции: Июнь 2011
|
Artem пишет:Постойте вы сказали:
anar пишет:
Здесь вы управляете скважностью импульсов
я так понял что скважность, это растояние между импульсами
а потом вы говорите что управлять длиною импульсов можно изменением Pwm1a
Получается что эта переменная контролирует и длину и скважность?
Мне кажется так не должно быть
Я запутал вас да?Ну ладно увеличить длину импульса вы можете увеличив значение Pwm1a.
 Скважность равна отношению периода к длине импульса, так что если изменяется длина импульса, то изменяется и скважность.Так что просто увеличте значение Pwm1a и у вас увеличится длина импульса. (Отредактировано автором: 08 Сентября, 2012 - 09:49:11) |
|
|
Artem |
Отправлено: 10 Сентября, 2012 - 21:10:53
|
Главнокомандующий

Сообщений всего: 347
Дата рег-ции: Май 2012
|
anar, подскажите пожалуйсто, я хочу сделать что-то вроде простого вольтметра, но без дисплея(я пока не хочу его подключать), что-то вроде полоски из светодиодов. Логика работы такая: например полоска из 5 светодиодов, напротив каждого располагается какое-то значение в вольтах, то есть если значение 1 вольт загорается один нижний светодиод, два вольта-2 светодиода(при цене деления 1 вольт на один светодиод), вот как-то так, в интернете нашёл много схем конфигурирования ацп, но везде требуется дисплей, поэтому решил сам написать программу для мк ATmega8:
$regfile = "m8def.dat"
$crystal = 1000000
'здесь нужно сконфигурировать какие-то два порта вход и выход, есть описание выводов мк, только на английском поэтому я не знаю, не могли бы вы мне подсказать, точнее есть два порта ADC5 и ADC4(PORTC.5 и PORTC.4) это что выход или вход?
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W as Word 'здесь объявляем переменную я не совсем понимаю, это для дисплея или нет, но в нее потом записывается значение ацп
Start Adc
Do
W = Getadc(0) 'присваиваем переменной значение ацп затем его надо считать я полагаю, я думаю нужно объявить ещё пять переменных и записать в них значения ацп которые будут иметь место при 1, 2, 3, 4, 5 вольтах и затем сравнивать значение ацп с этими переменными, но такой способ мне кажется слишком сложным. Я не знаю как можно рассчитать значения переменных . И я думаю что должен быть способ проще только я не знаю какой.
Так вот не могли бы вы подсказать с на какой порт подавать аналоговый сигнал а с какого снимать, и как можно выполнить мою задумку без всех этих операций сравнения?
Буду очень благодарен  |
|
|
anar |
Отправлено: 11 Сентября, 2012 - 12:28:43
|

Главнокомандующий

Сообщений всего: 441
Дата рег-ции: Июнь 2011
|
Artem пишет:anar, подскажите пожалуйсто, я хочу сделать что-то вроде простого вольтметра, но без дисплея(я пока не хочу его подключать), что-то вроде полоски из светодиодов. Логика работы такая: например полоска из 5 светодиодов, напротив каждого располагается какое-то значение в вольтах, то есть если значение 1 вольт загорается один нижний светодиод, два вольта-2 светодиода(при цене деления 1 вольт на один светодиод), вот как-то так, в интернете нашёл много схем конфигурирования ацп, но везде требуется дисплей, поэтому решил сам написать программу для мк ATmega8:
Вот схема и код вольтметра.При определенном напряжении включается определенный диод.
CODE:
$regfile = "m8def.dat"
$crystal = 8000000
Dim I As Integer
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Do
Start Adc
I = Getadc(0)
If I > 610 And I < 616 Then
Portb = 0
Waitms 1
Portb.0 = 1
End If
If I > 400 And I < 420 Then
Portb = 0
Waitms 1
Portb.4 = 1
End If
If I > 200 And I < 210 Then
Portb = 0
Waitms 1
Portb.7 = 1
End If
Loop
End
Прикреплено изображение
|
|
|
elmot |
Отправлено: 11 Сентября, 2012 - 12:46:33
|

Гуру

Сообщений всего: 1141
Дата рег-ции: Дек. 2010
|
Artem пишет:anar, подскажите пожалуйсто, я хочу сделать что-то вроде простого вольтметра, но без дисплея(я пока не хочу его подключать), что-то вроде полоски из светодиодов. Логика работы такая: например полоска из 5 светодиодов, напротив каждого располагается какое-то значение в вольтах, то есть если значение 1 вольт загорается один нижний светодиод, два вольта-2 светодиода(при цене деления 1 вольт на один светодиод), вот как-то так, в интернете нашёл много схем конфигурирования ацп, но везде требуется дисплей, поэтому решил сам написать программу для мк ATmega8:
$regfile = "m8def.dat"
$crystal = 1000000
'здесь нужно сконфигурировать какие-то два порта вход и выход, есть описание выводов мк, только на английском поэтому я не знаю, не могли бы вы мне подсказать, точнее есть два порта ADC5 и ADC4(PORTC.5 и PORTC.4) это что выход или вход?
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W as Word 'здесь объявляем переменную я не совсем понимаю, это для дисплея или нет, но в нее потом записывается значение ацп
Start Adc
Do
W = Getadc(0) 'присваиваем переменной значение ацп затем его надо считать я полагаю, я думаю нужно объявить ещё пять переменных и записать в них значения ацп которые будут иметь место при 1, 2, 3, 4, 5 вольтах и затем сравнивать значение ацп с этими переменными, но такой способ мне кажется слишком сложным. Я не знаю как можно рассчитать значения переменных . И я думаю что должен быть способ проще только я не знаю какой.
Так вот не могли бы вы подсказать с на какой порт подавать аналоговый сигнал а с какого снимать, и как можно выполнить мою задумку без всех этих операций сравнения?
Буду очень благодарен 
ADC - это вход, конечно. Только его включить надо как именно вход ADC. Зависимость числа полученного из ADC от входного напряжения - линейная, т.е. надо высчитать коэффициент и поделить. Вообще я советую Вам не линейку из 5 диодов, а 7-сегментный индикатор. Проводов столько же(а может и меньше, у семисегментника все семь сегментов имеют один общий вывод), зато градаций напряжения от 0 до 9 в цифровом виде + можно вывести что-нибудь типа буквы E в случае перегруза.
PS не забудте поделить входное напряжение делителем на 2х резисторах. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): [1] 2 3 » |
« Обо всем » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|