роботы робототехника микроконтроллеры


 Страниц (3): [1] 2 3 »   

> Без описания
Artem Post Id


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


Сообщений всего: 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 но ничего, попробовал запустить таймер в бесконечном цикле, но ничего, всё время результата нет, я не понимаю почему рёв в три ручья
Помогите кто нибудь
Заранее спасибо Улыбка
 
 Top
anar Post Id



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


Сообщений всего: 441
Дата рег-ции: Июнь 2011  



Artem пишет:
Программирую на Бейсик в Баском АВР, нужно настроить таймер что бы он формировал прямоугольные импульсы на выходе через равные промежутки времени. Вот код:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Ваш таймер сконфигурирован, как счетчик, то есть он считает импульсы.Если надо формировать импульсы через равные промежутки времени таймер надо сконфигурировать, так, чтобы он на выходе формировал шим сигнал.
 
 Top
Artem Post Id


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


Сообщений всего: 347
Дата рег-ции: Май 2012  



Значит нужно просто поменять Counter на Timer и убрать строчку Edge, если я правильно понимаю, то тогда получиться, что Таймер 1 будет работать в режиме таймер,(строчка Edge нам не нужна так как она определяет по какому фронту на входе будет происходить подсчёт) далее выбираем предделитель и затем переключаем выход при переполнении таймера.
Код по моему вот такой:
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Timer, Prescale = 8 , Compare A = Toggle
Compare1a = 222
(Добавление)
Я попробовал свой код всё вышло, но возникла проблема, импульсы генерируются с одинаковой последовательность при лбом значении Comparea как можно это исправить?
 
 Top
anar Post Id



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


Сообщений всего: 441
Дата рег-ции: Июнь 2011  



Artem пишет:
regfile = "m8def.dat"
$crystal = 1000000
Config Timer1 = Timer, Prescale = 8 , Compare A = Toggle
Compare1a = 222

рёв в три ручья как вы только учитесь в школе?Почитайте внимательно: http://avrproject.ru/publ/pwm_bascom/1-1-0-37
 
 Top
Artem Post Id


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


Сообщений всего: 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 пишет:
как вы только учитесь в школе?

извините, а вы как учились?
 
 Top
anar Post Id



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


Сообщений всего: 441
Дата рег-ции: Июнь 2011  



Artem пишет:
Compare A Pwm = Clear Down, Compare B Pwm = Clear U

Про это я писал вот здесь: http://myrobot.ru/forum/topic.ph...opic=307&p=2
Artem пишет:
Incr Pwm1a

Здесь вы управляете скважностью импульсов,присвойте Pwm1a какое-нибудь постоянное значение и у вас будут генерироваться импульсы постоянной длины.
Пример:
CODE:


$regfile = "attiny2313.dat"
$crystal = 8000000

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

Do
Pwm1a = 125 ' постоянно генерируем импульсы частотой 976,56 Гц, а длина имульсов равна половине периода

Loop

End

 
 Top
Artem Post Id


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


Сообщений всего: 347
Дата рег-ции: Май 2012  



anar пишет:
Здесь вы управляете скважностью импульсов,присвойте Pwm1a какое-нибудь постоянное значение и у вас будут генерироваться импульсы постоянной длины.

А как можно изменить длину импульсов ?
 
 Top
anar Post Id



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


Сообщений всего: 441
Дата рег-ции: Июнь 2011  



Artem пишет:
А как можно изменить длину импульсов ?

Увеличив значение Pwm1a .
 
 Top
Artem Post Id


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


Сообщений всего: 347
Дата рег-ции: Май 2012  



Постойте вы сказали:
anar пишет:
Здесь вы управляете скважностью импульсов

я так понял что скважность, это растояние между импульсами
а потом вы говорите что управлять длиною импульсов можно изменением Pwm1a
Получается что эта переменная контролирует и длину и скважность? Замешательство
Мне кажется так не должно быть Замешательство
 
 Top
anar Post Id



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


Сообщений всего: 441
Дата рег-ции: Июнь 2011  



Artem пишет:
Постойте вы сказали:

anar пишет:
Здесь вы управляете скважностью импульсов

я так понял что скважность, это растояние между импульсами
а потом вы говорите что управлять длиною импульсов можно изменением Pwm1a
Получается что эта переменная контролирует и длину и скважность?
Мне кажется так не должно быть

Я запутал вас да?Ну ладно увеличить длину импульса вы можете увеличив значение Pwm1a.

Скважность равна отношению периода к длине импульса, так что если изменяется длина импульса, то изменяется и скважность.Так что просто увеличте значение Pwm1a и у вас увеличится длина импульса.

(Отредактировано автором: 08 Сентября, 2012 - 09:49:11)

 
 Top
Artem Post Id


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


Сообщений всего: 347
Дата рег-ции: Май 2012  



А теперь понятно, но всё же как-то странно получается, нельзя было сделать отдельно регистр отвечающий за длину и отдельно за скважность. Замешательство
Спасибо за объяснение Улыбка
 
 Top
Artem Post Id


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


Сообщений всего: 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 вольтах и затем сравнивать значение ацп с этими переменными, но такой способ мне кажется слишком сложным. Я не знаю как можно рассчитать значения переменных . И я думаю что должен быть способ проще только я не знаю какой.
Так вот не могли бы вы подсказать с на какой порт подавать аналоговый сигнал а с какого снимать, и как можно выполнить мою задумку без всех этих операций сравнения?
Буду очень благодарен Улыбка
 
 Top
anar Post Id



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


Сообщений всего: 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

Прикреплено изображение
untitled.GIF

 
 Top
elmot Post Id



Гуру


Сообщений всего: 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х резисторах.
 
 Top
Artem Post Id


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


Сообщений всего: 347
Дата рег-ции: Май 2012  



anar, спасибо вам огромное за код и за схему!
elmot, по поводу вашей идеи использовать семи сегментный индикатор, это правда отличная идея при том если использовать шестнадцатиричную систему счисления то можно отображать значения от 0-15 вольт Подмигивающий
 
 Top
Страниц (3): [1] 2 3 »
« Обо всем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru