|
Звук через PWM
| |
mimino | Дата: Четверг, 11.04.2013, 23:28 | Сообщение # 16 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| О! Поздравляю! Все таки метод проб и ошибок рулит
|
|
| |
AVRик | Дата: Воскресенье, 14.04.2013, 23:12 | Сообщение # 17 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| ДА !!!!!!!!!!:) :) Добавлено (14.04.2013, 23:12) --------------------------------------------- Сергей ! Вопросик появился, если у контроллера нет емкостей фильтрации по +5 вольтам, 10 мкФ, 0,1 мкФ, возможны сбои в работе контроллера. Например, единица в порт и т. д.?
Сообщение отредактировал AVRик - Пятница, 12.04.2013, 08:33 |
|
| |
mimino | Дата: Воскресенье, 14.04.2013, 23:44 | Сообщение # 18 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Честно говоря, даже не знаю. Я всегда использовал хоть какую-то, но емкость. А изменение состояния портов может быть вызвано отсутствием подтягивающих сопротивлений.
|
|
| |
AVRик | Дата: Понедельник, 15.04.2013, 22:48 | Сообщение # 19 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей !!! Ломаю голову не первый день над модулем программы. Суть такова, к порту B5 подлючена кнопка задача её такова, при нажатии не её установить в PORTB,2 единицу. При повторном нажатии сбросить эту единицу в этом PORTB,2. Пробовал разные варианты, в AVR Studio всё четко работает, как только записываю в контроллер ATtiny-13 происходит мистика ничего не работает .... Привожу модуль программного кода ниже, это один вариант из множества, но не один в контроллере не заработал. main: nop sbic PINB,5 ;Если РВ5=0 (кнопка нажата), пропустить след. строку rjmp main ; pin_change ;Возврат к началу цикла rcall delay ;Вызов подпрограммы задержки на дребезг контактов wait1: ;Цикл ожидания, пока нажата кнопка sbis PINB,5 ;Если РВ5=1 (кнопка отпущена), пропустить след. строку rjmp wait1 ;иначе перейти к началу цикла ожидания rcall delay ;Вызов подпрограммы задержки на дребезг контактов cpi r23,4 brsh dim ;Если больше или равно, то переходим cpi r23,4 ;Сравниваем значение регистра r16 c 25 brlo dim1 ;Если меньше, то переходим nop dim1: cbi PORTB,2 ldi r23,(1<<2) ;Загрузка в r23 единицы в 2 бит rjmp exit2 dim: sbi PORTB,2 clr r23 exit2: cbi PORTB,4 ;Сбросить 4-й бит в регистре PORTB (реле разомкнуто) rjmp main ;Возврат к началу цикла
|
|
| |
mimino | Дата: Вторник, 16.04.2013, 21:07 | Сообщение # 20 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, почитайте четвертый шаг http://sokolsp.at.ua/publ....-1-0-15 Там не такая же задача?
|
|
| |
AVRик | Дата: Вторник, 16.04.2013, 23:35 | Сообщение # 21 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, скопировал код с 4 задания, светодиод горит при включении питания контроллера. Нажимаю кнопку диод тухнет, при отпускании кнопки сразу загорается, что-то вообще заморочился с этим.
|
|
| |
mimino | Дата: Четверг, 18.04.2013, 00:17 | Сообщение # 22 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, не знаю... Код рабочий, я все проверял.
Кстати, завтра я уезжаю несколько недель, где буду вне интернета, так что не обижайтесь, если я не отвечаю. Я не игнорирую, просто меня тут нет.
|
|
| |
AVRик | Дата: Воскресенье, 21.04.2013, 15:54 | Сообщение # 23 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Причину, я определил. Все дело в PB5, в описании других контроллеров было написано, что некоторые порты не могут работать на вход. В ATtiny 13 - это скорей всего PB5.
|
|
| |
mimino | Дата: Среда, 08.05.2013, 14:03 | Сообщение # 24 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир! Да, Вы правы. РВ5 - это вход сброса, он не работает как обычный порт ввода-вывода
|
|
| |
AVRик | Дата: Четверг, 09.05.2013, 12:04 | Сообщение # 25 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей !!! Возник банальный вопрос, у меня не работает задержка
ldi r22,255 ;Загрузка значения в регистр r23
ldi r23,255 ;Загрузка значения в регистр r24
ldi r24,255 ;Загрузка значения в регистр r25
ldi r25,255
del2:
subi r22,1 ;Вычитание 1 из регистра r23
subi r23,1 ;Вычитание 1 из регистра r24
subi r24,1
sbci r25,0 ;Вычитание 0 из регистра r25 с учетом переноса
brcc del2 ;Если не было переноса вернуться к метке del2sbros: ;Начало подпрограммы задержки
ldi r22,255 ;Загрузка значения в регистр r23
ldi r23,255 ;Загрузка значения в регистр r24
ldi r24,255 ;Загрузка значения в регистр r25
ldi r25,255
del2:
subi r22,1 ;Вычитание 1 из регистра r23
subi r23,1 ;Вычитание 1 из регистра r24
subi r24,1
sbci r25,0 ;Вычитание 0 из регистра r25 с учетом переноса
brcc del2 ;Если не было переноса вернуться к метке del2
ldi r22,255 ;Загрузка значения в регистр r23
ldi r23,255 ;Загрузка значения в регистр r24
ldi r24,255 ;Загрузка значения в регистр r25
ldi r25,255
del2:
subi r22,1 ;Вычитание 1 из регистра r23
subi r23,1 ;Вычитание 1 из регистра r24
subi r24,1
sbci r25,0 ;Вычитание 0 из регистра r25 с учетом переноса
brcc del2 ;Если не было переноса вернуться к метке del2sbros: ;Начало подпрограммы задержки
ldi r22,255 ;Загрузка значения в регистр r23
ldi r23,255 ;Загрузка значения в регистр r24
ldi r24,255 ;Загрузка значения в регистр r25
ldi r25,255
del2:
subi r22,1 ;Вычитание 1 из регистра r23
subi r23,1 ;Вычитание 1 из регистра r24
subi r24,1
sbci r25,0 ;Вычитание 0 из регистра r25 с учетом переноса
brcc del2 ;Если не было переноса вернуться к метке del2
ret
вроде бы все как обычно контроллер ATtiny 13A, программный модуль вызывается подпрограмно в теле программы. Задействовано одно прерывание по преобразованию АЦП. Хочу получить задержку несколько секунд, но не получется. Регистров делал разное количество, и загружал разными байтами. Мне кажется причина в прерывании АЦП ?
Добавлено (09.05.2013, 12:04) --------------------------------------------- Какой - то глюк сервера не могу отформатировать вопрос.
Сообщение отредактировал AVRик - Пятница, 10.05.2013, 11:22 |
|
| |
mimino | Дата: Четверг, 09.05.2013, 13:19 | Сообщение # 26 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, Вы не забыли стек инициализировать? И что происходит при выполнении Вашей подпрограммы?
|
|
| |
AVRик | Дата: Пятница, 10.05.2013, 10:39 | Сообщение # 27 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, начало программы выглядит так:
.include "tn13Adef.inc" ; Присоединение файла описаний .list .eseg ; Выбор сегмента EEPROM памяти .org 0x08 .cseg ; Выбор сегмента программного кода .org 0 ; Задание нулевого адреса старта программы rjmp reset ; Безусловный переход к метке reset .org 9 ;Задание адреса прерывания по окончанию преобразования АЦП rjmp ADC_complete ;Безусловный переход к метке ADC_complete
reset: ;Начало раздела инициализации контроллера ldi r16,RAMEND ;Загрузка в регистр r16 адреса верхней границы ОЗУ out SPL, r16 ;Копирование значения из r16 в регистр указателя стека SPL ldi r16,(1<<DDB0|1<<DDB1|1<<DDB4) ;Загрузка в r16 единицы в0, 2 и 5 биты out DDRB,r16 ;Переключение выводов PB4 на выход ldi r16,(1<<ADLAR|1<<MUX0|1<<MUX1);См. описание программы out ADMUX,r16 ;Копирование из r16 в ADMUX ldi r16,(1<<ADEN|1<<ADSC|1<<ADATE|1<<ADIE|1<<ADPS2);См.опис. out ADCSRA,r16 ;Копирование из r16 в ADCSRA ldi r16,(1<<WGM00|1<<COM0A1|1<<COM0A0);Fast PWM out TCCR0A,r16 ;с включением OC0A при совпадении с регистром OCR0A ldi r16,(1<<CS01);Загрузка в регистра r16 единицы в бит CS01 out TCCR0B,r16 ;Установка делителя тактовой частоты таймера 0 равным 8 ;ldi r16,(1<<WDTIF|1<<WDE|1<<WDP2|1<<WDP1|1<<WDP0) ; Задержка 2 секунды ;out WDTCR,r16 ; Включение сторожевого таймера ;ldi r16,(0<<PB1|0<<PB2) sei
Подрограмма должна произвести задержку (5 сек.), включения питания датчиков дыма после сброса тревоги, нажатием кнопки.
Да, ещё хотел задействовать сторожевой таймер от зацикливания программы, но таймер делал свое дело четко, сброс через каждые 2 секунды. Надо его как-то настроить, тоесть включение по какому-то событию. Но пока не понял, как это сделать ?
Сообщение отредактировал AVRик - Пятница, 10.05.2013, 16:15 |
|
| |
mimino | Дата: Пятница, 10.05.2013, 23:15 | Сообщение # 28 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, не понимаю, вроде все как надо. Вы нигде больше те регистры не используете, которые в задержке принимают участие? А насчет сторожевого таймера, сам не делал, но насколько я знаю, его надо инициализировать, а потом по ходу программы сбрасывать, причем время сброса должно быть меньше 2 секунд, чтоб он не успел сбросить контроллер
|
|
| |
AVRик | Дата: Суббота, 01.06.2013, 17:44 | Сообщение # 29 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Я ещё проверю регистры, может где-то двойное использование. Спасибо Сергей за совет.Добавлено (01.06.2013, 17:44) --------------------------------------------- Добрый вечер Сергей! Вопросик появился. В схеме используется порт ADC3, но если на его вход не подается напряжение с делителя, то контроллер ATtiny 13 не работает, но стоить подать питание на делитель, то все работает. Вход АЦП используется один. Как избежать этого пока не придумал.
|
|
| |
mimino | Дата: Суббота, 01.06.2013, 19:40 | Сообщение # 30 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Добрый вечер!
Что значит "не работает"? Вообще ничего не происходит? Вы правильно сконфигурировали АЦП?
|
|
| |
| |