реклама на сайте
подробности

 
 
> ШИМ в ATtiny13
dominator
сообщение Feb 7 2011, 22:14
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 7-02-11
Пользователь №: 62 780



Добрый вечер!

Пытаюсь сделать светящийся кристал, который был не так давно описан на хабре: http://habrahabr.ru/blogs/DIY/111671/ (там код для ATtiny13, снизу страницы ссылки на две другие части описания). Общая идея в том, что при прикосновении человека должен постепенно разгораться светодиод, потом - гаснуть. Все вроде бы просто, исходный код программы есть, но почему-то не работает ШИМ.
Работаю в связке AVR Studio 4.16+WinAVR 2008-12-05+Proteus VSM. При отладке заметил, что при прохождении строки кода TCCR0A=0x83 вместо значения 0х83 (COM0A1, WGM01, WGM00) этому параметру присваивается значение 0х30 (COM0B1, COM0B0). Может, кто подскажет, почему такое может быть? Рад буду любым идеям.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skyled
сообщение Feb 8 2011, 13:27
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Код
void SetTimer(char Mod)         //Функция для быстрой переинициализации таймера с режима сенсора на ШИМ
{
    if(Mod)            //1,  проверка сенсора
    {    
        TCCR0A=0x00;
        TCCR0B=0x00;
        TCNT0=0x00;
    }
else            //0,  ШИМ
    {
        TCCR0A=0x83;
        TCCR0B=0x00;
        TCNT0=0x00;
    }
}
Это единственное место, где упоминается этот регистр. При (Mod==0) должно присваивать 0x83. А у Вас что? Заново вречную при латинской раскладке наберите строчку и ту же строчку выше.

строчки с присваиванием нулей выкинте вообще.

Смените опцию оптимизации.
Go to the top of the page
 
+Quote Post
dominator
сообщение Feb 21 2011, 08:25
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 7-02-11
Пользователь №: 62 780



Цитата(skyled @ Feb 8 2011, 16:27) *
Смените опцию оптимизации.


Спасибо! Поменял оптимизацию с -Os на -O1 значение TCCR0A стало нормально устанавливаться.

Но теперь не работает строчка OCR0A=PWM. OCR0A постоянно равна 0, хотя PWM меняет свое значение. Рад буду любым идеям. Может, кто-то уже сталкивался с чем-то подобным?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 16:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016