Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.10.2010, 21:15  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

omercury,
Цитата:
Почему, если не секрет?
Потому что у нас есть обратная связь на компаратор контролера и при возникновении аварийной ситуации мы внешним шимом уменьшаем ширину импульса до минимума, а по прерыванию от компаратора который на контролере останавливаем ШИМ на контролере и как следствие внешний ШИМ. Но если мы остановим ШИМ на контролере то как мы будем тактироваться.
Если вы посмотрите на функцию "прерывания от ШИМ 250 кГц" то там прекрасно видно как происходит переключение прерываний.
Если посмотрите на обработчик прерывания от компаратора то там видно что происходит с ШИМом. Это конечно пока скелеты но логика примерно такая.
Реклама:
7Fantomas7 вне форума  
Непрочитано 11.10.2010, 22:28  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию 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.
omercury вне форума  
Непрочитано 11.10.2010, 22:32  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
по прерыванию от компаратора который на контролере останавливаем ШИМ
А зачем его останавливать? Отключить ножку, пин в "1" и на выход - и всё. Внешний ШИМ остановлен, таймер продолжает тактировать.
omercury вне форума  
Непрочитано 11.10.2010, 23:17  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

omercury,
Цитата:
У вас настроено.......
Я по правде говоря настроил ШИМ контролера на частоту 250 кГц. Чтоб не парится с регистрами делал генератором кода. Результат Можно было увидеть в предидущей версии где я инкремировал переменную proba которая 8 битная и постоянно писал ее в OCR. На выходе осцилографом смотрел импульс именно ширину и он успешно увеличивался от min до max. Я еще писал что мол не стоит обращать внимание я просто игрался. Вообще то я пробовал как себя будет вести выходная цепь на внешний ШИМ. При частоте 250 кГц можно существенно уменьшить емкостя конденсаторов.
По правде сказать нужен 8 битный ШИМ потому как и результат АЦП тоже будет 8 битный, просто считать легче. И если Вы сможете объяснить где я ошибся то будет большой спасибо. Потому как в шиме плаваю.
Цитата:
А зачем его останавливать? Отключить ножку, пин в "1" и на выход - и всё. Внешний ШИМ остановлен, таймер продолжает тактировать.
Опять же как это правильно сделать, в шиме плаваю. Ваш вариант безспорно интересен и такая реализация нравится. Хотя и по моему будет работать. Просто красивее решение, однозначно.
Очень признателен что смотрите ошибки, они однозначно будут, просто пока еще все просто.
До конца недели закончу АЦП с фильтрами, выложу, в принципе фильтра написаны, может с дуру и кнопки закончу. Блин работы много, засыпаю когда прихожу дамой.
Наверное нужно попросить модератора переименовать тему например ИНВЕРТОР 200А и переместить в источники питания, потому как давно уже вышли за пределы темы.

Последний раз редактировалось 7Fantomas7; 11.10.2010 в 23:28.
7Fantomas7 вне форума  
Непрочитано 11.10.2010, 23:58  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

Для 16МГц тактовой 62,5кГц ШИМ при 8ми битном разрешении - это аппаратный максимум. 250кГц уже будет режим СТС (очистка при совпадении) и разрешение 6 бит(64 отсчета). Учитывая, что регулировка TLки будет не от 0 до 5(или 3, всё равно перекрывать надо) вольт, получится ещё меньше...
Писать код - это, конечно, хорошо, но ИМХО сначала надо проработать концепцию, логику работы. С кодом помогу. Но писать буду на асме. По моему убеждению, только так можно добиться красоты, ручками. Посмотрел, что нагенерировал CodeVision - ужаснулся. Столько лишних телодвижений... В языках "высокого уровня", в том числе и в Delphi, очень нравится команда компилятору - .ASM
omercury вне форума  
Непрочитано 12.10.2010, 08:20  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

Цитата:
Для 16МГц тактовой 62,5кГц ШИМ при 8ми битном разрешении - это аппаратный максимум. 250кГц уже будет режим СТС (очистка при совпадении) и разрешение 6 бит(64 отсчета).
Понятно. Вобшем придется самому с ШИМом разбираться.
Цитата:
Писать код - это, конечно, хорошо, но ИМХО сначала надо проработать концепцию, логику работы.
Ну в моем понимании как бы проработана. Другими словами я понимаю чего хочу от инвертора.
Цитата:
Но писать буду на асме
Я его не понимаю. Ну может разве что пару команд и то тех что в учебнике "С" описаны.
Цитата:
По моему убеждению, только так можно добиться красоты, ручками
У разных людей убеждениния могут быть разными. На асемблере объем работы вырастет в разы. Хотя да можно добится вещей которые на "С" не получится.
Цитата:
Посмотрел, что нагенерировал CodeVision - ужаснулся
Да быкует програмка. Но многое и помогает. Я то что не нравится сношу и делаю по своему.
Цитата:
Столько лишних телодвижений
Ну мне по правде сказать до лампочки чего там компилятор генерит, я всеравно в том что нагенерено не понимаю.
На мой взгляд разговор ни очем. Тема извечная, что лучше "С" или асемблер.
7Fantomas7 вне форума  
Непрочитано 12.10.2010, 09:29  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию 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.
omercury вне форума  
Непрочитано 12.10.2010, 21:13  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

Цитата:
То есть правильно делать не так:.... а так:.....
Согласен полностью.
Может с дуру АЦП допишу сегодня.
7Fantomas7 вне форума  
Непрочитано 12.10.2010, 23:53  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

Страница 163 - про таймеры. Правда на асм, но принцип работы тоже описан.revich_yuriy.zip
omercury вне форума  
Непрочитано 13.10.2010, 23:23  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: ШИМ в АТMega8535

omercury,
Тему здесь прекращу потому как давно вышла за пределы собственно говоря изначального вопроса.
Создам тему в источниках питания "Инвертор 200А".
Буду рад если поддержите.
7Fantomas7 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте ШИМ Easyrider83 Информация по радиокомпонентам 19 04.10.2010 14:13
Проблема с аппаратным ШИМ в мега169 Archer07 Микроконтроллеры, АЦП, память и т.д 3 09.07.2010 15:40
переделка БП на ШИМ 2003 на одно напряжение artem_y Источники питания и свет 9 26.02.2010 23:35
Ищу ШИМ контроллер serb-radio Информация по радиокомпонентам 1 16.02.2010 21:10
Регулятор шим для шд5 Pavelrb Автоматика и аппаратура связи 6 27.12.2008 22:34


Часовой пояс GMT +4, время: 19:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot