Генератор частоты. Нужна помощь

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Аватара пользователя
Сообщения: 8
Зарегистрирован: Ср апр 09, 2008 20:35:53

Сообщение Pohmel »

Дядьки и тетьки выручайте. ATtiny 2313. 1 вход, 1 выход. На выходе при загрузке программы определенная частота. При нажатии на кнопку частота увеличивается. Следующее нажатие - увеличение частоты прекращается. Следующее нажатие частота уменьшается, следующее нажатие - уменьшение частоты прекращается. и т.д. В результате работает не понятно. Проверял в Протеусе и на проверочной плате. Не могу понять в чем дело. Все вроде перепроверял. Это моя первая программа. Можно пинать :shock: . Схему в Протеусе и текст в ассемблере прилагаю
Вложения
chastota.asm
(4.5 КБ) 278 скачиваний
chast.rar
(12.93 КБ) 248 скачиваний
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы

Сообщение Reboot_s »

Схему не"вижу" ибо Протеуса нету.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.
2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.
3. Начало стека:

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

 
ldi Temp,RamEnd       ;установка указателя стека
out SPL,Temp
надо ставить сразу после метки Reset:
4. Где вы тут увидели инициализацию компаратора?

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

ldi Temp3,0xff         ;инициализация компаратора
          out OCR1AH,Temp3
          ldi Temp4,0xff
          out OCR1AL,Temp4
Дальше смысла коммментировать нету, ибо уж прокоментированного хватает, чтоб прога нормально не работала. Исправляйте.
Не напрягайся - перезагрузись!
Контактная информация:
Реклама
Родился
Аватара пользователя
Сообщения: 8
Зарегистрирован: Ср апр 09, 2008 20:35:53

Сообщение Pohmel »

Схему не"вижу" ибо Протеуса нету.
Вопрос - а зачем такой сложный цикл управления одной кнопкой?
Замечания по программе:
1.Отключите ненужные перывания, путем введения их в коментарии ;.

Перестаёт программа совсем выполняться.

Описание прерывания взято из обучалки.
http://www.radiokot.ru/start/mcu_fpga/avr/11/


2. Для удобства назвите регистри не темп1, темп2 и тд, а по аналогии с функцией за которую они отвечают. станет куда проще.


Понял. Действительно будет удобней.

3. Начало стека:

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

 
ldi Temp,RamEnd       ;установка указателя стека
out SPL,Temp
надо ставить сразу после метки Reset:


Попробывал, ничего не меняется.


4. Где вы тут увидели инициализацию компаратора?

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

ldi Temp3,0xff         ;инициализация компаратора
          out OCR1AH,Temp3
          ldi Temp4,0xff
          out OCR1AL,Temp4
Описание прерывания взято из обучалки.
http://www.radiokot.ru/start/mcu_fpga/avr/11/
Как сделать правильно
?

Дальше смысла коммментировать нету, ибо уж прокоментированного хватает, чтоб прога нормально не работала. Исправляйте.
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы

Сообщение Reboot_s »

Если у вас программа перестает выполнятся, когда ненужные прерывания уведены в коменты, то значит прерывания у вас заданы неправильно. Я когда использую прерывания, пишу только нужные мне, правда при этом, я пишу адрес вектора прерываний.
Про компаратор прочитал, на мой взгляд это название неккоректно использовать в таком смысле, ибо у МК есть "настоящий" встроеный компаратор.
Я почитаю прогу более детально, посмотрю, что с прерываниями и завтра отпишу.
Не напрягайся - перезагрузись!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы

Сообщение Reboot_s »

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

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

subi temp4,0x01         ;увеличить частоту прерывания
cpi temp4,0x50          ;сравнить частоту прерывания с числом
brne pc+2               ;если не равны 
subi temp4,-0x01        ;если равны
out OCR1AL,Temp4
rjmp time
А вообще по проге я не понял, что конкретно не работает? Светодиод не светит? Как вы эту частоту на выходе измеряете?
Не напрягайся - перезагрузись!
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы

Сообщение Reboot_s »

И вообще, для кого ЧаВо делали?
9. Вопрос:
Я написал программу для МК AVR, а она не работает.
Ответ:
1.Возможно, у вас не инициализирован стек.
После метки начала основной программы, пишем что-то вроде:
out SPL, Low(Ramend*2)
out SPH,High(Ramend*2)
Что такое стек? Смотрим нашу Обучалку.
2.Частой ошибкой является несохранение регистра состояния в стеке, при вхождении в прерывание.
Регистр состояний - SREG, команда для его сохранения - push, для извлечения - pop.
Не напрягайся - перезагрузись!
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение 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

Сообщение Pohmel »

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

Сообщение Pohmel »

Reboot_s писал(а):И вообще, для кого ЧаВо делали?
9. Вопрос:
Я написал программу для МК AVR, а она не работает.
Ответ:
1.Возможно, у вас не инициализирован стек.
После метки начала основной программы, пишем что-то вроде:
out SPL, Low(Ramend*2)
out SPH,High(Ramend*2)
Что такое стек? Смотрим нашу Обучалку.
2.Частой ошибкой является несохранение регистра состояния в стеке, при вхождении в прерывание.
Регистр состояний - SREG, команда для его сохранения - push, для извлечения - pop.
Спасибо, завтра буду изучать фак. чот затупил к нему обратится. Седня голова совсем не варит уже, спасибо
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»