И вообще, если в задании не указано в каком виде выводить время секундомера - то вывести можно в ДВОИЧНОЙ форме, не заморачиваясь с динамической индикацией и сегментными индикаторами.
Atmega8: простенький секундомер
Успевают копировать... ну а на самом деле, когда дают задание до этого времени у вас уже должен быть минимальный набор знаний для его выполнения. Если подойти к заданию вдумчиво, то все получится. Тем более что выполняя одно задание у вас появляется опыт для выполнения других аналогичных.
И вообще, если в задании не указано в каком виде выводить время секундомера - то вывести можно в ДВОИЧНОЙ форме, не заморачиваясь с динамической индикацией и сегментными индикаторами.
И вообще, если в задании не указано в каком виде выводить время секундомера - то вывести можно в ДВОИЧНОЙ форме, не заморачиваясь с динамической индикацией и сегментными индикаторами.
- Реклама
- Сообщения: 85
- Зарегистрирован: Вт мар 27, 2012 16:07:25
Alexeyslav, теоретически должны быть эти знания, а практически их нет, потому что когда лекции диктуют по книге никаких знаний быть не может, книгу я и сама могу прочитать, но ничего там также не пойму, а по заданию должен быть семисегментный индикатор, поэтому придется заморачиваться.
- Сообщения: 1800
- Зарегистрирован: Вт окт 05, 2010 01:08:57
Банальное оправдание лени.......Иринка писал(а):потому что когда лекции диктуют по книге никаких знаний быть не может, книгу я и сама могу прочитать, но ничего там также не пойму
Вот тут несколько секундомеров есть. читать тему до конца - не ленится! http://radiokot.ru/forum/viewtopic.php?p=478747#p478747
Последний раз редактировалось O-LED Вт апр 24, 2012 00:24:12, всего редактировалось 2 раза.
KIT
Вот Вам рыба - разбирайтесь. Написана на том , что было под рукой и особо не заморачиваясь с оптимизацией кода .Outi outr inr - это макросы , как они действуют найдёте в соответствующем файле и литературе . Написано в STUDIO.
Программа просто считает секунды - без вычисления минут. PDF семисегментника и платформы приложены.
Удачи!
Программа просто считает секунды - без вычисления минут. PDF семисегментника и платформы приложены.
Удачи!
- Вложения
-
- second.rar
- (681 КБ) 345 скачиваний
- Сообщения: 85
- Зарегистрирован: Вт мар 27, 2012 16:07:25
ILYAUL, программа для Atmega128, но не Atmega8 же, такое вообще не пойдет, совсем другой микроконтроллер.
- Реклама
ОшибаетесьИринка писал(а):ILYAUL, программа для Atmega128, но не Atmega8 же, такое вообще не пойдет, совсем другой микроконтроллер.
- Сообщения: 85
- Зарегистрирован: Вт мар 27, 2012 16:07:25
O-LED, прочитала тему, но для Atmega8 нет ничего, какие-то tini, впервые вижу такой микроконтроллер, конец темы смотрела уже ранее, когда меня направили туда посмотреть примерную схему, теперь прочитала всю тему, но ни одной подходящей проги под мой микроконтроллер нет.
- Сообщения: 85
- Зарегистрирован: Вт мар 27, 2012 16:07:25
ILYAUL, в чем я ошибаюсь? Разве она не для Atmega128? Это же другой микроконтроллер, а мне нужен именно Atmega8, но не 128.
Ира вот это почитай сразу все станет на свои места
- Вложения
-
- DOC000141313.pdf
- (50.93 КБ) 333 скачивания
ни что в этой жизни не вечно!!!
ILYAUL тебе же выложил.
Tiny, mega - это всё разные семейства одной архитектуры - AVR. Atmega8 от ATMega128 отличается только объёмом памяти и другими вещами, которые тут не используются. В остальном это одно и то же.
Tiny, mega - это всё разные семейства одной архитектуры - AVR. Atmega8 от ATMega128 отличается только объёмом памяти и другими вещами, которые тут не используются. В остальном это одно и то же.
Всем здравствуйте!
И с праздником!
Сидя на даче и пока шёл дождь , решил подправить код секундомера.
И теперь не врублюсь никак , почему при переходе частоты обновления динамической индикации с 85гц на 56гц секундомер начинает пропускать 1 секунду из 5 . На 85- всё нормально.
И с праздником!
Сидя на даче и пока шёл дождь , решил подправить код секундомера.
И теперь не врублюсь никак , почему при переходе частоты обновления динамической индикации с 85гц на 56гц секундомер начинает пропускать 1 секунду из 5 . На 85- всё нормально.
- Вложения
-
- second.rar
- (10.92 КБ) 265 скачиваний
Пропускает счет секунд, или пропускает индикацию? Ну вроде как показывает 1, 2, 2 а потом сразу 4 но время само по себе идет точно?
Счёт не пропускает - т.е. 1 2 3 4 5 ..... 20 21 и т.д. Но даже на глаз видно что медленне работает . И вкл. компьютерный секундомер видно что на 5 сек он показывает 4 на 10 сек 8 и т.д. А при 85 всё тютелька в тютельку . Там в коде есть , где меняю значение . И оно не скрыто под прерыванием . Да иобработчики прерывний одни из самых коротких из возможных - можно ещё и запоминания SREG убрать без потерь.
Так ведь к этой частоте и привязан счет секунд! Скорость у тебя изменилась на 3/4 от номинала, соотношение 65 к 85 тоже подозрительно близку к 3/4 ... это и навело на такую простую мысль.
Тебе надо пересчитать коэфициент счета, он должен быть где-то в обработчике динамической индикации(возможно это прерывание таймера по переполнению или сравнению) и скорей всего равен 85 или кратному ему значению(170?).
Тебе надо пересчитать коэфициент счета, он должен быть где-то в обработчике динамической индикации(возможно это прерывание таймера по переполнению или сравнению) и скорей всего равен 85 или кратному ему значению(170?).
Два обработчика прерываний - один по переполнению - секунды, второй по сравнению - динамика.
Timer работает в режиме - Normal (Free timer) Прерывания одно от другого не зависяще и всегда считает от 0 до FF. Каждое чётное число TCNT - прерывание динамики для 85 гц или каждое 3-тье для 56 . В первом случае прерывание секунд совпадает с прерыванием динамики , но сбоя нет и так каждый раз . Во- втором случае , только каждое второе прерывание секунд совпадёт с динамикой и идёт сбой. Прескалер Timerа настроен на деление до 512 гц соответствено частота динамики или 256/3 или 170/3. Не врубаюсь где засада.
Timer работает в режиме - Normal (Free timer) Прерывания одно от другого не зависяще и всегда считает от 0 до FF. Каждое чётное число TCNT - прерывание динамики для 85 гц или каждое 3-тье для 56 . В первом случае прерывание секунд совпадает с прерыванием динамики , но сбоя нет и так каждый раз . Во- втором случае , только каждое второе прерывание секунд совпадёт с динамикой и идёт сбой. Прескалер Timerа настроен на деление до 512 гц соответствено частота динамики или 256/3 или 170/3. Не врубаюсь где засада.
Если обработка динамической индикации идет в прерывании и занимает в сумме хотябы чуть больше 250 тактов - возможен пропуск прерывания...или как-то так.
Есть же код выше . В прерываниях устанавливаются только флаги , что сие событие произошло.Alexeyslav писал(а):Если обработка динамической индикации идет в прерывании и занимает в сумме хотябы чуть больше 250 тактов - возможен пропуск прерывания...или как-то так.
И всё.
А каким образом было сформировано 65Гц для динамической индикации? Может проверяется условия кратности 3 и осуществляется выход из прерывания до того как будет произведена проверка на четность для подсчета секунд? Или признак установленный обрабатывается один который первым был проверен, а обнуляются оба сразу.
вот в исходнике накопал "cbr Flags,1<<fl_Second" что-то мне подсказывает, что это неправильное применение инструкции. Вторым аргументом идет НОМЕР БИТА, а вы подставляете туда маску этого бита. Компилятор может и не обнаружить этого прикола, а проблемы будут.
Аналогично надо исправить cbr/sbr инструкции по всему тексту программы, может в этом и была причина.
вот в исходнике накопал "cbr Flags,1<<fl_Second" что-то мне подсказывает, что это неправильное применение инструкции. Вторым аргументом идет НОМЕР БИТА, а вы подставляете туда маску этого бита. Компилятор может и не обнаружить этого прикола, а проблемы будут.
Аналогично надо исправить cbr/sbr инструкции по всему тексту программы, может в этом и была причина.
Команды установки или сброса битов регистра sbr/cbr устанавливают или сбрасывают тот бит или биты которые Вы указали не трогая то что не нужно. Собственно это "родственики" команды eor Сами биты описаны в *.inc файле


