roboforum.ru

Технический форум по робототехнике.

Помогите с ШИМ

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Помогите с ШИМ

Сообщение Dars » 11 авг 2005, 15:26

Надо сделать ШИМ на Бэйсике, в документации как-то все скудно.
Нашел пример

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down

'to set the PWM registers, just assign a value to the compare A and B registers
Compare1a = 100
Compare1b = 200

Кто нибудь знает как это работает?Или подскажите свой пример реализации ток надо обязательно на Бэйсике
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение setar » 11 авг 2005, 18:22

:lol:
тебе лабораторный практикум что ли задали ?
ктож его вспомнит то бейсик ...
поробуй на робоклубе спроси в форуме там где детишки тусуются с лего машинками - они бейсик хорошо знают.
Это не шутка если что.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение Dars » 11 авг 2005, 20:21

Таблица 12. Установка режима совпадения при работе ШИМ
-------T-------T-----------------------------------------------------¬
¦COM1A1¦COM1A0 ¦Влияние на вывод OC1                                 ¦
+----------+-------+-----------------------------------------------------+
¦0                 0       не подключен                                         ¦
+---------+--------+------------------------------------------------+
¦0                  1         ¦не подключен                                         ¦
+------+-----------+--------------------------------------------------+
¦1        ¦0     ¦очищается при совпадении, для возрастания  счетчика и¦
¦                ¦сбрасывается для уменьшения (неинвертирующий ШИМ)    ¦
+------+-------+-----------------------------------------------------+
¦1     ¦1      ¦очищается при совпадении, для уменьшения счетчика и  ¦
¦      ¦       ¦сбрасывается для возрастания (инвертирующий ШИМ)     ¦
L------+-------+------------------------------------------------------




Что значит "очищается"? Мне надо знать когда он имеет значение лог 1 или лог 0
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение setar » 12 авг 2005, 10:42

Бррр, ничего не понял, откуда этот кусок ?
я так не врубился что значит эта шифровка.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение Dars » 12 авг 2005, 13:27

Да я уже понял кое что
Config Timer1 = Pwm , Pwm = 8 устанавливает таймер в 8 битный решим
Compare A Pwm = Clear Up в com1a1 записывает 1, а в COM1A0 0,то есть вывод oc1 "очищается при совпадении, для возрастания счетчика и сбрасывается для уменьшения (неинвертирующий ШИМ)", я не понимаю что значит очищается? Насколько я понял из документации таймер работает как реверсивный счетчик, и считает сначала до 255(если режим 8 битный) а потом назад, и только потом сбрасывается,таймер постоянно сверяет свое значение с OCR1A, и в зависимости от значений com1a1 и com1a0 происходит событие если com1a1=1 и com1a0=0 то выход oс1 "очищается при совпадении, для возрастания счетчика и сбрасывается для уменьшения (неинвертирующий ШИМ)"
если com1a1=1 и com1a0=1 то oc1 "очищается при совпадении, для уменьшения счетчика и сбрасывается для возрастания (инвертирующий ШИМ)"

Я не понимаю когда oc1 = 1 а когда 0, вот что мне надо,я не понимаю что значит "очищается" и "сбрасывпется"
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение Dars » 12 авг 2005, 15:27

Я кажись понял. объясню свои мысли на примере at90s2313
1)Таймер/счетчик 1 работает как реверсивный счетчик.
2)Config Timer1 = Pwm , Pwm = 8 таймер устанавливается в 8 битный режим шим,конечное значение таймера 255,частота шим Ftc1/510
3)Compare A Pwm = Clear Up ,устанавливается неинвертирующий шим
4)Compare1a = 100, OCR1A присваевается значение 100.

В момент начала отсчета таймера, portb3(oc1) имеет лог 1,когда таймер досчитывает до 100,portb3 принимает значение лог 0, далее таймер считает до 255 и начинает считать обратно, когда он опять досчитывает до 100 portb3 принимает значение лог 1, когда он досчитывает до 0,происходит сброс и цикл повторяется снова.

Я правильно понял? Мне кто нибудь скажет? :?:

Далее,бэйсик Г с большой буквы эт я уже понял,т.к как в at90s2313  один режим шим а в atmega 8 например есть быстрый шим, шим с фазовой коррекцией и шим с фазовой и частотной коррекцией, в бэйсике нет возможности выбора этих режимов,поэтому про атмегу можно забыть.
Вопрос:если я себе куплю книжку по ассемблеру я пойму как для контроллеров писать проги?Она ведь просто вроде как для компа?
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение setar » 12 авг 2005, 16:37

вот пример ШИМ на ASM
http://www.roboforum.ru/viewtopic.htm?t=186
правда это шим на таймере.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение Dars » 09 сен 2005, 22:46

Config Timer1 = Pwm ,prescale =1, Pwm = 8 , Compare A Pwm = Clear down,

вот она правильная строчка :D
нашел пример на usenet,народ там есть реально ВСЕ,у кого че не получается топайте туда(http://groups.google.com/-поисковик)
Теперь вот какой вопрос, какая оптимальная частота шима?Двигатель у меня маленький,леговский.
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение setar » 12 сен 2005, 13:33

да пофигу, сколько получится
от сотен герц до десятков килогерц.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Сообщение Dars » 12 сен 2005, 19:22

ясно. Но я уже начал ассемблер учить. не подскажете где можно получить информацию для новичка? Мне бы про самое основное почитать а дальше сам разберусь. И еще хотел бы посмотреть на различные примеры программ, с комментариями естественно.
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва

Сообщение chief » 12 сен 2005, 19:28

Первым делом нужно изучить сам контроллер, потом систему команд. Если конечно все это подкреплено хоть какими то знаниями по схемотехнике.
примеры приминения (правда на английском) можно посмотреть здесь:
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
А если что конкретно будет не понятно то спрашивай...
Аватара пользователя
chief
 
Сообщения: 60
Зарегистрирован: 22 янв 2005, 21:47
Откуда: Нетешин Хмельницкая обл. Украина

Сообщение Dars » 12 сен 2005, 19:33

Я это уже все видел, мне нужно почитать про основные понятия, типа что такое флаги как ими пользоваться, зачем нужен стек ну и прочее. В общем самые самые основы...
Я за ассемблер взялся так как в бэйсике кое какие функции плохо реализованы, но от него я отказываться не собираюсь, просто не хочу ограничивать себя рамками встроенных функций. И вообще мне не понятно всеобщее пренебрежение к этому языку, не надо равнять бэйсик для компа и для микроконтроллеров. на компьютере действительно удобнее писать на С т.к есть полно библиотек и время уходит на составление кода а не на рутиную работу(вывод на жк,включение шим,ацп и прочее),  бэйсик для микрокотроллеров имеет столько встроенных функций что С даже и не снилось,да многое у него сделано криво но ведь есть ассемблерные вставки. По моему связка асм и бэйсик гораздо лучше чем например С, так как бэйсик позволяет создавать простой, понятный со множеством функций(там даже есть отправка и прием rc5 и rc6 кода) код, а асм поможет справитс с недочетами бэйсика и решить задачи которые там не предусмотрены. Ведь сложною логику робота гораздо удобнее писать на понятном языке. Разве я не прав?
Dars
 
Сообщения: 106
Зарегистрирован: 04 авг 2005, 18:56
Откуда: Москва


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13