Главная  
18.05.2012 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
_GEN_GOTOBOTTOM Ответить

TOPIC: Дозиметр на ATmega 8

#1505
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
Дозиметр на ATmega 8 30.11.2008 13:34 Репутация: 0  
Здравствуйте.
Написал программу для реализации дозиметра на основе упомянутого в заголовке темы МК.
Суть такая: МК, по прерыванию от прихода импульса со счётчика Гейгера инкрементирует регистр R17. По истечению 40 секунд срабатывает компаратор таймера, МК осуществляет следующий алгоритм:
>проверяет регистр R18 на равенство нулю

>если не равен, то декрементит его и выводит на один из портов единицу, если равен, то перепрыгивает на регистр R17
>вызывает задержку
>выводит 0
>опять идёт на проверку

Загоняю прогу в симуляцию ,в AVR Studio 4, а там начинается беспорядочное прыгание по прерываниям.
Проверьте, пожалуйста, программный код.

Содержимое поста отредактировано: GRAF, в: 30.11.2008 13:35
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1506
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
В ответ на: Дозиметр на ATmega 8 30.11.2008 13:36 Репутация: 0  
Что-то не получилось при редактировании предыдущего поста вставить файл. Здесь код ASM.
File Attachment:
File name: Dozimetr.rar
File size:1555 bytes
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1507
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Дозиметр на ATmega 8 30.11.2008 14:20 Репутация: 167  
что я могу сказать по вашему коду... как минимум, там 2 ошибки:
1. Нет инициализации указателя стека в начале программы. Отсюда вызов rcall Delay приводит к тому, что все начинается сначала - стек-то не установлен и адрес возврата из подпрограммы Вудфн неизвестно куда пропал.
2. Путаница с прерываниями. Настраивается вроде бы INT1, но разрешается и обрабатывается INT0.

возможно, есть и еще какие-то проблемы, но не зная полного алгоритма и схемы сложно гадать - верно написана программа или нет.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1508
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
В ответ на: Дозиметр на ATmega 8 30.11.2008 14:39 Репутация: 0  
Вставил указатель стека. Всё равно начинается прыгание по прерываниям.

Прерывание хочу сделать от INT0, по даташиту настраивал, проглядел, видимо, что-то.

Алгоритм такой: МК считает импульсы со счётчика Гейгера, инкрементит регистр, по истечению 40 сек. выводит значение регистра, отведённого под хранение числа импульсов со счётчика ( путём его декремента), на один из выводов порта В (0-й байт) в виде последовательности импульсов. На этот порт вешаются последовательно включённые 4 счётчика К176ИЕ4 и 7-ми сегментные индикаторы.
Тактирование внешнее, от кварца 9.6 МГц.

Прохождение 40 секунд определяется сравнением регистра Temp2 на равенство 40, который инкрементится каждую секунду по прерыванию компаратора таймера.

Содержимое поста отредактировано: GRAF, в: 30.11.2008 14:41

Содержимое поста отредактировано: GRAF, в: 30.11.2008 14:42
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1509
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Дозиметр на ATmega 8 30.11.2008 14:48 Репутация: 167  
я тоже в ваш код вставил инициализацию стека, и сразу оказалось, что постоянно непрерывно идут прерывания INT0. У вас для INT0 не заданы значения битов ICS00 и ICS01 регистра MCUCR, т.е. они нулевые (по умолчанию) - а это означает "прерывание по низкому уровню на входе INT0". Этот тип зпроса характерен тем, что если уровень 0 на INT держится постоянно - то прерывания так же генерируются непрерывно. если изменить состояние PIND на единички - запросы прекращаются и, по меньшей мере, программа ваша не скачет никуда. что дальше делать - я пока не в курсе
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1510
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
В ответ на: Дозиметр на ATmega 8 30.11.2008 15:11 Репутация: 0  
INT1 использоваться не будет, посажу его чз конденсатор на землю.

Подправил код, теперь с регистрами MCUCR и GICR всё впорядке. Это нормально, что после обработки задержки прога возвращается опять на начало кода обработки RESET?
File Attachment:
File name: Dozimetr-e867701939fbea314e224ccf1d5bb131.rar
File size:1573 bytes
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1511
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Дозиметр на ATmega 8 30.11.2008 16:08 Репутация: 167  
нет конечно! в нормальном состоянии ваша прога должна доковылять до метки PROGA и на ней "стоять", отвлекаясь только на обработку прерываний.

почему вы инициализируете только SPL? а SPH кто будет инициализировать?
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1512
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
В ответ на: Дозиметр на ATmega 8 30.11.2008 16:18 Репутация: 0  
Пардон. Поставил. Теперь, после обработки задержки, возвращается на начало RESET,а не на то место, с которого ушло на задержку.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1513
ARV (Администратор)
Администратор
Постов: 2027
graph
В ответ на: Дозиметр на ATmega 8 30.11.2008 16:24 Репутация: 167  
ну что вы там такое творите?! повторяю: если все нормально сделать, то программа доходит до команды
Code:

 PROGArjmp PROGA

и далее никуда не девается. после
Code:

 rcall Delay

должна выполняться соманда
Code:

 ldi Temp0b00000010

а вовсе не переход на метку RESET
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#1514
GRAF (Пользователь)
Новичок
Постов: 33
graphgraph
В ответ на: Дозиметр на ATmega 8 30.11.2008 16:28 Репутация: 0  
Ничего не творю, смотрите код:
File Attachment:
File name: Dozimetr-c0e20fc9e0e39132aa12ea586e0f44f4.rar
File size:1582 bytes
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол