Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.10.2010, 21:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ШИМ в АТMega8535
omercury,
Цитата:
|
Почему, если не секрет?
|
Потому что у нас есть обратная связь на компаратор контролера и при возникновении аварийной ситуации мы внешним шимом уменьшаем ширину импульса до минимума, а по прерыванию от компаратора который на контролере останавливаем ШИМ на контролере и как следствие внешний ШИМ. Но если мы остановим ШИМ на контролере то как мы будем тактироваться.
Если вы посмотрите на функцию "прерывания от ШИМ 250 кГц" то там прекрасно видно как происходит переключение прерываний.
Если посмотрите на обработчик прерывания от компаратора то там видно что происходит с ШИМом. Это конечно пока скелеты но логика примерно такая.
|
|
|
|
11.10.2010, 22:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ШИМ в АТMega8535
Посмотрел код. Оно и не должно работать нормально...
ШИМ, судя по схеме, реализован на таймере2. При TOP=FFh(8 бит) частота шим будет 16000000/256=62,5 кГц...
У вас настроено:16 000 000/64(CS2-CS0=100[bin])/256(8 bit)=976,5625 Гц.
256 - это разрядность самого таймера.
Код:
|
// ADC Clock frequency: 1000,000 kHz |
Смело! А работать будет?
Последний раз редактировалось omercury; 11.10.2010 в 23:08.
|
|
|
|
11.10.2010, 22:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ШИМ в АТMega8535
Сообщение от 7Fantomas7
|
по прерыванию от компаратора который на контролере останавливаем ШИМ
|
А зачем его останавливать? Отключить ножку, пин в "1" и на выход - и всё. Внешний ШИМ остановлен, таймер продолжает тактировать.
|
|
|
|
11.10.2010, 23:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ШИМ в АТMega8535
omercury,
Цитата:
|
У вас настроено.......
|
Я по правде говоря настроил ШИМ контролера на частоту 250 кГц. Чтоб не парится с регистрами делал генератором кода. Результат Можно было увидеть в предидущей версии где я инкремировал переменную proba которая 8 битная и постоянно писал ее в OCR. На выходе осцилографом смотрел импульс именно ширину и он успешно увеличивался от min до max. Я еще писал что мол не стоит обращать внимание я просто игрался. Вообще то я пробовал как себя будет вести выходная цепь на внешний ШИМ. При частоте 250 кГц можно существенно уменьшить емкостя конденсаторов.
По правде сказать нужен 8 битный ШИМ потому как и результат АЦП тоже будет 8 битный, просто считать легче. И если Вы сможете объяснить где я ошибся то будет большой спасибо. Потому как в шиме плаваю.
Цитата:
|
А зачем его останавливать? Отключить ножку, пин в "1" и на выход - и всё. Внешний ШИМ остановлен, таймер продолжает тактировать.
|
Опять же как это правильно сделать, в шиме плаваю. Ваш вариант безспорно интересен и такая реализация нравится. Хотя и по моему будет работать. Просто красивее решение, однозначно.
Очень признателен что смотрите ошибки, они однозначно будут, просто пока еще все просто.
До конца недели закончу АЦП с фильтрами, выложу, в принципе фильтра написаны, может с дуру и кнопки закончу. Блин работы много, засыпаю когда прихожу дамой.
Наверное нужно попросить модератора переименовать тему например ИНВЕРТОР 200А и переместить в источники питания, потому как давно уже вышли за пределы темы.
Последний раз редактировалось 7Fantomas7; 11.10.2010 в 23:28.
|
|
|
|
11.10.2010, 23:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ШИМ в АТMega8535
Для 16МГц тактовой 62,5кГц ШИМ при 8ми битном разрешении - это аппаратный максимум. 250кГц уже будет режим СТС (очистка при совпадении) и разрешение 6 бит(64 отсчета). Учитывая, что регулировка TLки будет не от 0 до 5(или 3, всё равно перекрывать надо) вольт, получится ещё меньше...
Писать код - это, конечно, хорошо, но ИМХО сначала надо проработать концепцию, логику работы. С кодом помогу. Но писать буду на асме. По моему убеждению, только так можно добиться красоты, ручками. Посмотрел, что нагенерировал CodeVision - ужаснулся. Столько лишних телодвижений... В языках "высокого уровня", в том числе и в Delphi, очень нравится команда компилятору - .ASM
|
|
|
|
12.10.2010, 08:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ШИМ в АТMega8535
Цитата:
|
Для 16МГц тактовой 62,5кГц ШИМ при 8ми битном разрешении - это аппаратный максимум. 250кГц уже будет режим СТС (очистка при совпадении) и разрешение 6 бит(64 отсчета).
|
Понятно. Вобшем придется самому с ШИМом разбираться.
Цитата:
|
Писать код - это, конечно, хорошо, но ИМХО сначала надо проработать концепцию, логику работы.
|
Ну в моем понимании как бы проработана. Другими словами я понимаю чего хочу от инвертора.
Цитата:
|
Но писать буду на асме
|
Я его не понимаю. Ну может разве что пару команд и то тех что в учебнике "С" описаны.
Цитата:
|
По моему убеждению, только так можно добиться красоты, ручками
|
У разных людей убеждениния могут быть разными. На асемблере объем работы вырастет в разы. Хотя да можно добится вещей которые на "С" не получится.
Цитата:
|
Посмотрел, что нагенерировал CodeVision - ужаснулся
|
Да быкует програмка. Но многое и помогает. Я то что не нравится сношу и делаю по своему.
Цитата:
|
Столько лишних телодвижений
|
Ну мне по правде сказать до лампочки чего там компилятор генерит, я всеравно в том что нагенерено не понимаю.
На мой взгляд разговор ни очем. Тема извечная, что лучше "С" или асемблер.
|
|
|
|
12.10.2010, 09:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ШИМ в АТMega8535
Для примера выложу процедурку опроса 2х кнопок. Вообще - это отработка управления биполярным шаговым двигателем по 3м проводам. Здесь на ошибку срабатывания кнопки проверяется 4 раза. Задержка, правда дурацкая, а уж вывод - вообще Select - Case. Но - работает.
Код:
|
mainLoop: ;Главный цикл программы
IfKeyPress: ;Проверка нажатия кнопок...
in keycode,PINB ; Читаем порт
ori keycode,keymask ; Отсекаем лишнее
; sbrc flag,keypress ; Проверяем на новое нажатие
cp keyold,keycode ; Проверяем - тот же код?
breq keySkip ; Если да - пропускаем обработку
mov keyold,keycode ; Сохраняем код кнопок
cpi keycode,$ff ; Проверяем - нажата ли кнопка
breq keySkip ; Если нет(stup и stdwn = 1) - уходим
;rcall Delay20ms ; Задержка
;***************************************
ldi tcnt,ms20num
DelayCicle:
nop nop nop nop nop nop ;Уже не 20, подбирал
dec tcnt
brne DelayCicle
;***************************************
in keycode,PINB ; Читаем порт
ori keycode,keymask ; Отсекаем лишнее
cpi keycode,$ff ; Проверяем - нажата ли кнопка
breq keySkip ; Если нет(stup и stdwn = 1) - уходим
sbis PINB,stup ; Пропустить след. команду если не ВВЕРХ (stup)
rjmp keyUp ; Идем на обработку шага вверх
keyDown: ; Обработка шага ВНИЗ
;cpi StepCnt,maxstepdown+offset ; Проверяем, не нижняя-ли точка
;breq keySkip ; Если да - уходим
sbic PINB,stdwn ; Пропустить след. команду если не ВНИЗ (stdwn)
rjmp keySkip ; Выход
inc StepCnt ; Инкремент счетчика
rjmp StepUpDown ; Собственно шаг вниз
; rjmp keySkip ; Выход
keyUp: ; Обработка шага ВВЕРХ
;sbis PINB,stopKey ; Если сработал концевик
;rjmp upSkip ; Идем на очистку счетчика
;cpi StepCnt,offset ; Проверяем, не верхняя ли точка
;breq keySkip ; Если да - уходим
sbic PINB,stup ; Пропустить след. команду если не ВВЕРХ (stup)
rjmp keySkip ; Выход
dec StepCnt ; Декремент счетчика
rjmp StepUpDown ; Собственно шаг вверх
; rjmp keySkip ; Выход
upSkip: ldi temp,offset ; Загружаем
mov StepCnt,temp ; счетчик
rjmp keySkip ; Выход
StepUpDown: ; Шаг вверх/вниз для 2х выходов
; mov temp,StepCnt
; andi temp,0b00000011
; in OffsetReg,PINB
; andi OffsetReg,0b11111000
; or temp,OffsetReg
; ori temp,0b00011100
; out PORTB,temp
StepUpDn: ; Шаг вверх и вниз для 3х выходов
mov temp,StepCnt
andi temp,0b00000011
up0: cpi temp,0
brne up1
ldi temp,st0code
rjmp exeStep ;Собственно шаг 0
up1: cpi temp,1
brne up2
ldi temp,st1code
rjmp exeStep ;Собственно шаг 1
up2: cpi temp,2
brne up3
ldi temp,st2code
rjmp exeStep ;Собственно шаг 2
up3: cpi temp,3
brne up0
ldi temp,st3code
;rjmp exeStep ;Собственно шаг 3
exeStep:
ori temp,0b00011000 ;PullUp
out PORTB,temp ;Step
keySkip:
rjmp mainLoop |
Это всё к тому, что сначала проверяются все возможные ошибки, и, если их всё же каким-то чудом не случилось, обрабатывается само событие. Из обработки ошибок, собственно и состоит в основном программа. То есть правильно делать не так: (произошло то-то - значит делаем это), а так: (если не произошло то-то, другое и третье - тогда сделать это).
Последний раз редактировалось omercury; 12.10.2010 в 10:06.
|
|
|
|
12.10.2010, 21:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ШИМ в АТMega8535
Цитата:
|
То есть правильно делать не так:.... а так:.....
|
Согласен полностью.
Может с дуру АЦП допишу сегодня.
|
|
|
|
12.10.2010, 23:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ШИМ в АТMega8535
Страница 163 - про таймеры. Правда на асм, но принцип работы тоже описан. revich_yuriy.zip
|
|
|
|
13.10.2010, 23:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ШИМ в АТMega8535
omercury,
Тему здесь прекращу потому как давно вышла за пределы собственно говоря изначального вопроса.
Создам тему в источниках питания "Инвертор 200А".
Буду рад если поддержите.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:21.
|
|