- Вложения
-
- chastota.asm
- (4.5 КБ) 278 скачиваний
-
- chast.rar
- (12.93 КБ) 248 скачиваний
Генератор частоты. Нужна помощь
- Сообщения: 8
- Зарегистрирован: Ср апр 09, 2008 20:35:53
Дядьки и тетьки выручайте. ATtiny 2313. 1 вход, 1 выход. На выходе при загрузке программы определенная частота. При нажатии на кнопку частота увеличивается. Следующее нажатие - увеличение частоты прекращается. Следующее нажатие частота уменьшается, следующее нажатие - уменьшение частоты прекращается. и т.д. В результате работает не понятно. Проверял в Протеусе и на проверочной плате. Не могу понять в чем дело. Все вроде перепроверял. Это моя первая программа. Можно пинать
. Схему в Протеусе и текст в ассемблере прилагаю
- Реклама
Схему не"вижу" ибо Протеуса нету.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.
2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.
3. Начало стека:
надо ставить сразу после метки Reset:
4. Где вы тут увидели инициализацию компаратора?
Дальше смысла коммментировать нету, ибо уж прокоментированного хватает, чтоб прога нормально не работала. Исправляйте.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.
2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.
3. Начало стека:
Код: Выделить всё
ldi Temp,RamEnd ;установка указателя стека
out SPL,Temp4. Где вы тут увидели инициализацию компаратора?
Код: Выделить всё
ldi Temp3,0xff ;инициализация компаратора
out OCR1AH,Temp3
ldi Temp4,0xff
out OCR1AL,Temp4
Не напрягайся - перезагрузись!
- Сообщения: 8
- Зарегистрирован: Ср апр 09, 2008 20:35:53
Схему не"вижу" ибо Протеуса нету.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.
Перестаёт программа совсем выполняться.
Описание прерывания взято из обучалки.
http://www.radiokot.ru/start/mcu_fpga/avr/11/
2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.
Понял. Действительно будет удобней.
3. Начало стека:
надо ставить сразу после метки Reset:
Попробывал, ничего не меняется.
4. Где вы тут увидели инициализацию компаратора?
Описание прерывания взято из обучалки.
http://www.radiokot.ru/start/mcu_fpga/avr/11/
Как сделать правильно?
Дальше смысла коммментировать нету, ибо уж прокоментированного хватает, чтоб прога нормально не работала. Исправляйте.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.
Перестаёт программа совсем выполняться.
Описание прерывания взято из обучалки.
http://www.radiokot.ru/start/mcu_fpga/avr/11/
2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.
Понял. Действительно будет удобней.
3. Начало стека:
Код: Выделить всё
ldi Temp,RamEnd ;установка указателя стека
out SPL,TempПопробывал, ничего не меняется.
4. Где вы тут увидели инициализацию компаратора?
Код: Выделить всё
ldi Temp3,0xff ;инициализация компаратора
out OCR1AH,Temp3
ldi Temp4,0xff
out OCR1AL,Temp4
http://www.radiokot.ru/start/mcu_fpga/avr/11/
Как сделать правильно?
Дальше смысла коммментировать нету, ибо уж прокоментированного хватает, чтоб прога нормально не работала. Исправляйте.
Если у вас программа перестает выполнятся, когда ненужные прерывания уведены в коменты, то значит прерывания у вас заданы неправильно. Я когда использую прерывания, пишу только нужные мне, правда при этом, я пишу адрес вектора прерываний.
Про компаратор прочитал, на мой взгляд это название неккоректно использовать в таком смысле, ибо у МК есть "настоящий" встроеный компаратор.
Я почитаю прогу более детально, посмотрю, что с прерываниями и завтра отпишу.
Про компаратор прочитал, на мой взгляд это название неккоректно использовать в таком смысле, ибо у МК есть "настоящий" встроеный компаратор.
Я почитаю прогу более детально, посмотрю, что с прерываниями и завтра отпишу.
Не напрягайся - перезагрузись!
Почитал сегодня)
может я тугой, но я не совсем вьезжаю каким манером этой строкой увеличивается скорость:
А вообще по проге я не понял, что конкретно не работает? Светодиод не светит? Как вы эту частоту на выходе измеряете?
может я тугой, но я не совсем вьезжаю каким манером этой строкой увеличивается скорость:
Код: Выделить всё
subi temp4,0x01 ;увеличить частоту прерывания
cpi temp4,0x50 ;сравнить частоту прерывания с числом
brne pc+2 ;если не равны
subi temp4,-0x01 ;если равны
out OCR1AL,Temp4
rjmp timeНе напрягайся - перезагрузись!
- Реклама
И вообще, для кого ЧаВо делали?
9. Вопрос:
Я написал программу для МК AVR, а она не работает.
Ответ:
1.Возможно, у вас не инициализирован стек.
После метки начала основной программы, пишем что-то вроде:
out SPL, Low(Ramend*2)
out SPH,High(Ramend*2)
Что такое стек? Смотрим нашу Обучалку.
2.Частой ошибкой является несохранение регистра состояния в стеке, при вхождении в прерывание.
Регистр состояний - SREG, команда для его сохранения - push, для извлечения - pop.
Не напрягайся - перезагрузись!
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Код: Выделить всё
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
knopka:
sbic pinD,2 ;проверяем нажатие кнопки
rjmp knopka ;если не нажата
inc temp1 ;если нажата
;****************************************************
;Ожидаем отпускания кнопки
;****************************************************
knopka2:
sbic pinD,2 ;проверяем нажатие кнопки
rjmp pc+2 ;если не нажата
rjmp knopka2 ;если нажата
rjmp knopka
;****************************************************
В этом случае страшны нажатия больше четырех, поскольку по программе происходит переход на сброс таймера и тд
- Сообщения: 8
- Зарегистрирован: Ср апр 09, 2008 20:35:53
"Дребезг" не включал в программу, что бы не утяжелять поиск ошибок в программе. Т.к. протеус дребезга не видит и на него при этом можно не "закладываться".smac писал(а):если у вас действительно кнопка, то лучше организовать защиту от дребезга, ибо одно нажатие с точки зрения человека может быть двумя или более нажатиями с "точки зрения" МККод: Выделить всё
;**************************************************** ; ОСНОВНОЙ ЦИКЛ ;**************************************************** knopka: sbic pinD,2 ;проверяем нажатие кнопки rjmp knopka ;если не нажата inc temp1 ;если нажата ;**************************************************** ;Ожидаем отпускания кнопки ;**************************************************** knopka2: sbic pinD,2 ;проверяем нажатие кнопки rjmp pc+2 ;если не нажата rjmp knopka2 ;если нажата rjmp knopka ;****************************************************
В этом случае страшны нажатия больше четырех, поскольку по программе происходит переход на сброс таймера и тд
- Сообщения: 8
- Зарегистрирован: Ср апр 09, 2008 20:35:53
Спасибо, завтра буду изучать фак. чот затупил к нему обратится. Седня голова совсем не варит уже, спасибоReboot_s писал(а):И вообще, для кого ЧаВо делали?9. Вопрос:
Я написал программу для МК AVR, а она не работает.
Ответ:
1.Возможно, у вас не инициализирован стек.
После метки начала основной программы, пишем что-то вроде:
out SPL, Low(Ramend*2)
out SPH,High(Ramend*2)
Что такое стек? Смотрим нашу Обучалку.
2.Частой ошибкой является несохранение регистра состояния в стеке, при вхождении в прерывание.
Регистр состояний - SREG, команда для его сохранения - push, для извлечения - pop.


