Страница 1 из 1

Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 08:56:29
uwrtey
АТмега 328 на плате Ардуино мини.
Нужно настроить два ШИМа
ШИМ на тамер_1 - с регулируемой частотой
ШИМ на таймер_0 - обычный ШИМ ( FAST PWM )

К схеме подключен дисплей от нокиа-3310
На дисплей в дальнейшем буду выводить служебную инфу.
Сейчас на дисплей вывожу слово "ТЕМПЕР." - он служит мне помощником при отладке кода.

Ноги к которым подключен дисплей указаны в библиотеке дисплея.

Настроил таймер_0 на ШИМ.
ШИМ не работает - точнее нога OC0A не "дергается"... ( постоянно подтянута к земле )
Мало того, еще и дисплей перестал работать.

Предположительно вижу две причины:
1) процессор не доходит то того места, где нужно выводить инфу на дисплей. ( где то циклится или зависает )
2) где то в коде конфликт таймера_0 и библиотеки дисплея.

Провел тест:
Таймер_1 работает исправно, а значит процессор выполняет код исправно, это значит что первый вариант отпадает.
Остается второй вариант...

Думал может где-то элементарную ошибку допустил, но ни чего найти не могу.
Если удалить инициализацию дисплея и не подключать его библиотеку, то ШИМ все равно не работает.

П.С.:
1) В датащите куча ошибок.
Атмел ужасен в этом плане.
Они каждый раз копируют датащиты с предыдущих семейств МК вместе со старыми ошибками и добавляют новые..
2) Наткнулся на такой прикол:
я сперва допустил ошибку:
Настраивал таймер_0
И вместо того что бы написать

Код: Выделить всё

	ldi Temp, (1<<COM0A1)|(1<<COM0A0)|(1<<WGM01)|(1<<WGM00)
	sts TCCR[b]0[/b]A,Temp	
				

	ldi Temp, (0<<WGM02)|(1<<cs02)	
	sts TCCR[b]0[/b]B, Temp	


написал так:

Код: Выделить всё


	ldi Temp, (1<<COM0A1)|(1<<COM0A0)|(1<<WGM01)|(1<<WGM00)
	sts TCCR[b]1[/b]A,Temp	
				

	ldi Temp, (0<<WGM02)|(1<<cs02)	
	sts TCCR[b]1[/b]B, Temp	

И компилятор это проглотил - не поперхнувшись!
Не смотря на то, что в регистре TCCR1A(B) биты имеют другие "имена"
Как так?

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 09:01:22
ARV
uwrtey писал(а):В датащите куча ошибок.
перечислите хотя бы некоторые, но лучше все, известные вам
uwrtey писал(а):И компилятор это проглотил - не поперхнувшись!
Не смотря на то, что в регистре TCCR1A(B) биты имеют другие "имена"
Как так?
а компилятор должен за этим следить? откуда ему знать, что за "имена" вы пожелали использовать?

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 09:19:04
Z_h_e
или

Код: Выделить всё

out TCCR0A, R
или

Код: Выделить всё

sts TCCR0A+0x20, R
Добавлено after 57 seconds:
ARV писал(а):перечислите хотя бы некоторые, но лучше все, известные вам
+

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 09:22:08
uwrtey
перечислите хотя бы некоторые, но лучше все, известные вам
Это уже ОФФТОПОМ БУДЕТ.
Но раз уж начали:
1) посмотрите внимательно в таблицы с настройками тамера_1. как там ноги таймера подписаны ? А вот никак. Типа сам угадай..
2) посмотрите внимательно в таблицу с настройкой делителя тактовой частоы таймера - что такое CA ???? CS - знаю...
3) и много еще чего. Особенно в табличной части... Внимательно смотрите таблицы. Внимательно смотрите имена регистров.
Внимательно смотрите какие значение предлагает датащит указывать к регистрам. Ладно я уже знаю, что там ошибок куча.
а компилятор должен за этим следить? откуда ему знать, что за "имена" вы пожелали использовать?
Думаю, что да.
Он же в данном случае юзает библиотеку "m328Pdef.inc"
И мне кажется что он должен понимать с чем имеет дело.
Или нет? То-есть он может запихать в регистр TCCR1A бит (1<<cs02) ???
Если так, то это глупый компилятор.

По делу то можете чего подсказать? ( При всем моем уважении к старшему поколению :) , снимаю шляпу )

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 09:28:22
Z_h_e
uwrtey писал(а):посмотрите внимательно в таблицы
Таблиц там очень много. Сошлитесь на конкретную.
uwrtey писал(а):Если так, то это глупый компилятор.
Поясните как должен компилятор понять, что тут ошибка

Код: Выделить всё

Ldi 0x10,0x22
out 0x12,0x10
uwrtey писал(а):По делу то можете чего подсказать?
Вроде все по делу написано, нет?

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 10:01:31
uwrtey
out TCCR0A, R
sts TCCR0A+0x20, R
извините я не понял...

Таблиц там очень много. Сошлитесь на конкретную.
открываем датащит http://www.atmel.com/Images/Atmel-42735 ... asheet.pdf

смотрим страницу 170
TC1 Control Register A
чего в таблице написано? Все ли верно?
открываем страницу 138 и смотрим как должно быть.

далее стр 142
таблица Table 19-10. Clock Select Bit Description
CA02 CA01 CS00 Description
что такое CA2 и CA01 ????
может CS ????
однако это Clock Select

Я не хочу остальные ошибки перечислять... Времени категорически не хватает.
Можно конечно ветку новую начать и там, на досуге, раздуть...

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 10:07:33
Z_h_e
uwrtey писал(а):извините я не понял...
Поглядите определение TCCR0A в файле m328Pdef.inc. Затем адрес регистра TCCR0A (раздел Registrs summary). Затем описание команд out и sts.

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 11:49:09
uwrtey
Спасибо, намек понял.
Под рукой данного файла нет.
Обычно я использовал команду OUT, но в 328 меге компилятор ругается, что ссылка "не достает" - почитал, что надо юзать STS.
однако таймер_1 удалось инициализировать именно так

Код: Выделить всё

sts TCCR1A

И работает нормально.
:dont_know:

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 11:52:31
Z_h_e
А Вы сделайте тоже самое и для регистра TCCR1A. Я имею ввиду поглядеть его определение и его местоположение в памяти.

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 12:25:13
uwrtey
OK. Дома буду - гляну.
Под рукой нет подобной информации.
В Общем - спасибо большое.
Помощь приходит от одних и тех-же людей. :)
Низкий поклон за это.

ПС: А чего вы с меня так яро пытались про ошибки из датащита узнать?
Не поверили, что они там есть? Или можно Атмел носом ткнуть?
Если можно их носом ткнуть, то я кучу еще могу найти.. Я много находил.

Даже как то раздували, что это индусы в силиконовой долине отжигают, так как плохо инглиш знают. :)

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 13:08:09
ARV
uwrtey писал(а):А чего вы с меня так яро пытались про ошибки из датащита узнать?
потому что наученные горьким опытом: у подавляющего большинства неучей всегда виноват компилятор, даташит и еще недокументированный баг в кристалле. в вашем случае это не совсем так, но подход изначально одинаков ко всем :)))

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 13:48:32
Z_h_e
И я подтверждаю сказанное. Из опыта, в том числе своего, 99% глюков ПО и ошибок ДШ, это "косоглазие" и "рукожопие".
uwrtey писал(а):А чего вы с меня так яро пытались про ошибки из датащита узнать?

То что Вы указали из ДШ, я бы не назвал это ошибками, скорее досадными опечатками, которые несомненно мешают. Но изредка, бывают и серьезные баги, которые Вы могли выяснить и это было бы очень полезно предоставить на общее обозрение.

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 21:27:20
uwrtey
Z_h_e, спасибо! Заработало! :beer:

ПС:
страница 184
20.14.12. Timer/Counter 1 Interrupt Mask Register
биты OCIEA и OCIEB на самом деле называются по другому - OCIE1A и OCIE1B
другие биты в этом регистре скорее всего тоже.. Только на практике я не проверял их...

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 21:47:42
Z_h_e
Возможно этот документ облегчит Вам жизнь.

Re: Конфликт таймера_0 и дисплея-3310. Не работает ШИМ.

Добавлено: Ср ноя 16, 2016 21:56:06
uwrtey
Хм. А я ведь встречал его и раньше.
Видимо на этот раз выбрал неудачный датащит. :)
Еще раз спасибо! :beer:

************

В продолжение разговора о памяти

.equ TCCR1A = 0x80 ; MEMORY MAPPED
.equ TCCR0A = 0x24

пояснение нашел вот тут - http://easyelectronics.ru/avr-uchebnyj- ... h-rom.html

:beer: :beer: :beer: