Например TDA7294

Форум РадиоКот • Просмотр темы - Пожалуйста помогите найти ошибку в программе для avr.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт мар 19, 2026 12:56:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 53 ]  1, ,  
Автор Сообщение
 Заголовок сообщения: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 12:08:53 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
По идеи на $0006 программа должна перейти только один раз (по прерыванию), а на деле получается постоянно.

.include "m16def.inc"

.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:

;***** инициализация стека

ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19

;***** инициализация таймера

LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний

LOOP:
RJMP LOOP

START:
LDI R16,10


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 12:59:23 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20085
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
astrgan писал(а):
START:
LDI R16,10

Иииииии? Всё???

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:11:42 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
да.
Ну конечно недоделана, и вообще учебная программа.


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:14:13 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Почему-то на метку START когда нужно не переходит.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:29:26 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20085
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ППЦ.
При наступлении прерывания МК прыгает на метку START, делает там LDI R16,10 и... продолжает идти дальше. А дальше у чистого МК находятся одни NOP'ы до конца флэша.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:31:45 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Что тут такого?
Когда эта часть заработает( прыгнит когда надо), буду дописывать.


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:33:45 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Ну пусть будет так:

.include "m16def.inc"

.CSEG
rjmp VECT_END
.ORG $0006 ;адрес вектор прерывания по совпадению Т2
rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:

;***** инициализация стека

ldi r19,0x04 ;инициализация указателя стека
out SPH,r19
ldi r19,0x5F
out SPL,r19

;***** инициализация таймера

LDI R19,0b01000001
OUT TCCR2,R19 ; Т2, режим ШИМ, предделитель 1
LDI R20,50
out OCR2, r20 ;Число для сравнения
LDI R21,0b10000000
OUT TIMSK, R21 ;разрешение прерывания по совпадению таймера Т2
sei ;разрешение глобальных прерываний

LOOP:
RJMP LOOP

START:
LDI R16,10
RJMP LOOP


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:39:22 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 238
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3868
Откуда: Москва
Рейтинг сообщения: 0
Код:
START:
 LDI R16,10
 RJMP LOOP

Из прерываний так не выходят (обычно). Нужно так
Код:
START:
 LDI R16,10
RETI

А если не надо опять включать прерывание, то вместо RETI писать RET. Выход в главный цикл по RJMP рано или поздно поломает стек.


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:39:59 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
А в чем отлаживаете? Как это пролазит?:
Код:
sei ;разрешение глобальных прерываний

_________________
Docendo discimus


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:40:48 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20085
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
astrgan писал(а):
START:
LDI R16,10
RJMP LOOP

ППЦ :facepalm: ППЦ
Код:
START:
 LDI R16,10
 RETI


Проблему я вашу понял, ошибку нашёл. Это же надо — сначала запускать таймер, а уже только ПОТОМ запихивать в него число для сравнения :facepalm: :facepalm: :facepalm:

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 13:46:52 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Всем БОЛЬШОЕ спасибо!)


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 15:26:31 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Извиняюсь что вопросы глупые но всеже, как потом изменить ocr?

Код:
.include "m16def.inc"

.CSEG
   rjmp VECT_END
.ORG $0006      ;адрес вектор прерывания по совпадению Т2
   rjmp START ;прерывание по совпадению (TIMER2)
VECT_END:

;***** инициализация стека

   ldi r19,0x04   ;инициализация указателя стека
   out   SPH,r19   
   ldi r19,0x5F
   out   SPL,r19
   
   ldi r17, 0b11111111 ;инициализация порта на вывод
   out DDRA, r17
   
MAS:   .DB 0x1A,0x2A,0x3A,0x4A


   LDI ZL, low(MAS*2)
   LDI ZH, High(MAS*2)
   LDI R22,0b000000001

;***** инициализация таймера
       ; Т2, режим ШИМ, предделитель 1
   LDI R16,10
   out OCR2, r16      ;Число для сравнения
   LDI R21,0b10000000 
   
   LDI R19,0b01000001
   OUT TCCR2,R19 
   OUT TIMSK, R21      ;разрешение прерывания по совпадению таймера Т2
   sei                 ;разрешение глобальных прерываний

LOOP:           
   RJMP LOOP

START:
   CLI
   LPM R16,Z+
   out OCR2, r16
   com R22
   ANDI R22,0b00000001
   OUT PORTA,R22
   sei
   RETI


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Пн май 28, 2012 15:28:08 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20085
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
astrgan писал(а):
Извиняюсь что вопросы глупые но всеже, как потом изменить ocr?

Видимо, остановив таймер? :idea:

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 07:59:13 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
Пожалуйсто подскажите еще раз.
Почемуто не срабатывает прерывание?

Код:
.include "m128def.inc"

   
.CSEG
   RJMP VECT_END
.ORG $0018          ;Вектор прерывания таймера T1 при совпадении
   RJMP SINOUT    ;Адрес подпрограммы обработки прерывания

VECT_END:
   
;***** инициализация стека

   ldi r19,0x04   
   out   SPH,r19   
   ldi r19,0x5F
   out   SPL,r19
;***** инициализация таймера


   LDI r19,0      
   OUT OCR1AH, r19      ;в регистр совпадений таймера T1
   LDI r19, 50      
   OUT OCR1AL, r19      ;в регистр совпадений таймера T1


   LDI R16,0b00000001
   OUT TCCR1A,R16

   LDI R17,0b00001001
   OUT TCCR1B,R17

   LDI R18, 0b00010000
   OUT TIMSK,R18

   SEI


LOOP:
   RJMP loop
   
SINOUT:
   LDI R22,10
   RETI


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:14:53 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
Вы установили режим Fast PWM, 8-bit


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:17:54 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
А какой нужен?


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:18:55 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 238
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3868
Откуда: Москва
Рейтинг сообщения: 0
На каком основании сделан вывод, что прерывание не срабатывает? Все работает.


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:20:37 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
astrgan писал(а):
А какой нужен?

Смотря что Вы хотите сброс при совпадении или PWM


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:30:09 
Встал на лапы

Зарегистрирован: Чт мар 08, 2012 01:13:30
Сообщений: 103
Рейтинг сообщения: 0
ILYAUL
Нужен PWM.

Engineer_Keen

На AVR Studio 4 симулирую (DEBUG), TCNT1 доходит до значения в OCR и нечего не происходит(кажется иногда он даже перепрыгивает это число).


Вернуться наверх
 
 Заголовок сообщения: Re: Пожалуйста помогите найти ошибку в программе для avr.
СообщениеДобавлено: Вт май 29, 2012 08:39:40 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 238
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3868
Откуда: Москва
Рейтинг сообщения: 0
astrgan писал(а):
На AVR Studio 4 симулирую (DEBUG), TCNT1 доходит до значения в OCR и нечего не происходит.

Если код написан в соответствии с даташитом, но в симуляторе почему-то не работает очевидный кусок, значит кривой симулятор. Нужен либо другой симулятор, либо реальный контроллер. Связка 2х симуляторов позволяет отлавливать баги друг друга. Проверял в протеусе. Переход на RJMP SINOUT происходит раз в 256us (Fclk=1МГц).
astrgan писал(а):
(кажется иногда он даже перепрыгивает это число)

А в этом нет ничего удивительного, TCNT1 и должен в этом режиме считать по кругу 0-65535 и прерывание по совпадению будет всегда раз в 256мкс, независимо от значения OCR.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 53 ]  1, ,  

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y