РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


    • Страница 3 из 8
    • «
    • 1
    • 2
    • 3
    • 4
    • 5
    • 7
    • 8
    • »
    Архив - только для чтения
    Бортовой компьютер на мотоцикл
    Вт, 21.02.2017, 23:13 | Сообщение # 21        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата [)еНиС ()
    прога быстро с прерывания выйдет, а если условие мутить
    Вообще-то в прерывании нужно только секунды (1 байт) инкрементировать. Остальное в майне. Кстати, инкремент с проверкой 3-х char-ов по времени будет как 1 лонг.
    Цитата [)еНиС ()
    10секунд копим прерывания потом делим на 10
    Эх, сишники... smile Не 10 с нужно брать, а 8 или 16. Это принципиально. Очень тяжело не зная как работает АЛУ писать эффективные программы. Конечно так никакого процессора не хватит.
    А измерения ставить в очередь (все контролируемые величины изменяются медленно) и выполнять, например, после очередного прерывания секунд и/или такта ДИ. Тогда не будет ни одного действительно внезапного прерывания - просто ожидание окончания измерения. Причем в обработчике прерывания только флаг выбрасывать - измерение выполнено . Измерил, данные записал, если времени прорва (посчитать заранее) - запустил следующее, если впритык - лучше в следующую секунду.
    Это мое видение. Конечно делай как знаешь и умеешь. Но систему команд контроллера знать надо бы.
    Ср, 22.02.2017, 18:40 | Сообщение # 22        
    [)еНиС
    аватар
      Постов: 3074   Друзья 
    Так я и не умею и знаний не хватает, поэтому пишу догадки как бы я реальзовал biggrin
    Вообще если честно я не догоняю как вышесказанное тобой в коде реализовать.

    Цитата msmmmm ()
    ще-то в прерывании нужно только секунды (1 байт) инкрементировать. Остальное в майне. Кстати, инкремент с проверкой 3-х char-ов по времени будет как 1 лонг.


    понимаешь в чем дело, если у меня часы на дисплей не вызваны - онии вообще никак не обрабатываются в майне (обработка есть только при выводе на дисплей), а для условий нужно постоянно их проверять каждый новый цикл программы. А в моем случае такое можно реализовать только в самом прерывании.

    В случае же с чистым счетом секунд - даж без вывода на дисплей и без обработки этих часов ничего не куда не денется (т.к. секунды не обнуляются по достижении 60), по необходимости просто эти секунды обработаются и выведутся на дисплей в виде часов и минут
    Ср, 22.02.2017, 18:42 | Сообщение # 23        
    [)еНиС
    аватар
      Постов: 3074   Друзья 
    Кстати по какому принципу выбирать какие фюзбиты ставить?
    Ср, 22.02.2017, 23:07 | Сообщение # 24        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата [)еНиС ()
    Кстати по какому принципу выбирать какие фюзбиты ставить?
    А это как барин пожелают biggrin . У меня принцип простой - открыл в даташите вкладку Fuse Bits, там все расписано. Потерял минут 15, почитал, выставил. Только не путать: 0 - запрограммировано и наоборот. Держать в голове все это не получается уже, да и не нужно.
    Цитата [)еНиС ()
    А в моем случае такое можно реализовать только в самом прерывании
    Все это (кроме счета импульсов емкостного датчика) легко делается вообще без прерываний. Просто проверкой флагов в главном цикле. Я за время изучения программирования МК написал с десяток программ часов, секундомеров и таймеров в т.ч. и с тактовой частотой 32768Гц с ДИ. Ни разу в часах прерывания не использовал. Ты только не говори никому biggrin . Часы, как это ни странно - очень медленно работающая штука, особенно если тактовая частота 8-16 МГц. Что поменяется, если индикация секунд задержится на 1000 тактов генератора? Катастрофа!! На целых 0,125 мс задержится смена циферки. И это при том, что сам счет идет правильно. И период динамической индикации 10 мс. То же самое - таймер выбросил флаг, а когда обработается зависит от приоритета, который в данном случае не жесткий, как в прерываниях (по номеру в таблице), а зависит от программиста. Как написал, то и получил.
    Применительно к обсуждаемому subject-у: в прерывании увеличились секунды, а в майне проверка - если меньше 60-ти, так и индицировать, если 60 - сбросить в 0 и инкрементировать минуты, а если нужно и часы. И по времени это будет тактов 8. Еще проще, я так и делаю, выделить под часы 5 char-ов: полусекунды, единицы минут, десятки минут, единицы часов, десятки часов. Полусекунды нужны для мигания точек и изменяются в прерывании (если без них не спится спокойно), остальные простыми инкрементами в главном цикле щелкают и никакой математики не нужно. Времени занимает вообще ничего.
    Об очереди, если интересно, потом напишу, тоже ничего сложного.

    Цитата msmmmm ()
    Не 10 с нужно брать, а 8 или 16. Это принципиально.

    Это понял почему?
    Ср, 22.02.2017, 23:26 | Сообщение # 25        
    [)еНиС
    аватар
      Постов: 3074   Друзья 
    Цитата msmmmm ()
    Это понял почему?


    Честно, нет. Вот если это аппаратное было, то да там понятно. Но тут все программно, не вижу разницы если не 8 а 7 сделать)

    Я понял про часы, аналогично в моем случае, ну потрачу я на обработку лонга 0.5мс роли не сыграет, зато код не придется переписывать. (хотя наверно всего пару строчек передвинуть)

    Обработка часов у меня в свитч кейс, поэтому если не совпадает переменная этого свитч кейса (select) то просто не обрабатывются часы
    Чт, 23.02.2017, 09:15 | Сообщение # 26        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата [)еНиС ()
    не вижу разницы если не 8 а 7 сделать
    А разница колоссальная. В этом процессоре есть аппаратное умножение, но только байта на байт, поэтому в случае больших аргументов приходится городить циклами, а деления нет вообще. Алгоритм деления точно такой же как в школе в столбик - отнял, сдвинул и по циклу. Даже байт на байт разделить занимает уже какое-то существенное время, а уж инт или лонг тем более. А теперь смотри:d(b)
    14(1110)/2 = 7(111)
    26(11010)/2 = 13(1101)
    Как видишь, операция деления на 2 сводится к сдвигу делимого вправо. Соответственно деление на 4, это Х>>2, а на 8, это Х>>3 и т.д. Сдвиг - это элементарная операция, и в случае лонга должен занимать 4 такта. Вот и разница.
    Чт, 23.02.2017, 13:59 | Сообщение # 27        
    [)еНиС
    аватар
      Постов: 3074   Друзья 
    msmmmm, понятно теперь biggrin я сам до такого не допер бы
    Сб, 25.02.2017, 15:01 | Сообщение # 28        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    Цитата msmmmm ()
    В этом процессоре есть аппаратное умножение, но только байта на байт, поэтому в случае больших аргументов приходится городить циклами, а деления нет вообще.


    msmmmm, это ты конкретно про Атмега169 говоришь?
    Сб, 25.02.2017, 21:54 | Сообщение # 29        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата Тёмыч ()
    это ты конкретно про Атмега169 говоришь?
    Система команд у всех мег практически одинаковая. Честно, в разницу особо не вникал, т.к. когда пишу на ассемблере, листки с командами и регистрами лежат на столе. А на С это нужно только тогда, когда просматриваешь после компиляции листинг дизассемблера - не навертел ли чего? smile
    Тиньки аппаратного умножения не имеют.
    Чт, 02.03.2017, 20:58 | Сообщение # 30        
    Тёмыч
    аватар
      Постов: 759   Друзья 
    Есть такой вопросик, не по теме правда, но по поводу программирования.
    Написал кое-какую программку, и в ней необходимо переводить контроллер в режим выключения.
    Почитал даташит, выяснил, что для перевода в режим сна надо прописать нужные биты в регистре MCUCR и выполнить инструкцию #asm("SLEEP")
    Для пробуждения используется внешнее прерывание INT0 и INT1. Вся проблема в том, что в режим сна то он уходит, а из него не возвращается wacko
    Вот кусок кода за всё это отвечающий, может кто что подскажет дельное?

    Добавлено (02.03.2017, 21:58)
    ---------------------------------------------
    Симулировал правда только в протеусе, в железе ещё не собирал.

    • Страница 3 из 8
    • «
    • 1
    • 2
    • 3
    • 4
    • 5
    • 7
    • 8
    • »
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA