Выплескивание эмоций

Тема в разделе "Флудилка", создана пользователем alp69, 15 окт 2016.

  1. a1000

    a1000 Гуру

    А можно в нескольких словах описать алгоритм обработки с использованием двух прерываний?
     
  2. issaom

    issaom Гуру

    Дак я же давал ссылку на статью.
    Кондеры и резюки можно заменить оператором return;
    Вот кстати и для Arduino пример (ATMega328P которая)
    Как подключить к Arduino 2 (ДВА) и более энкодера.
     
  3. a1000

    a1000 Гуру

    Интересное решение. На мой взгляд немного сложновато. Метод, на который ссылался я, даёт более простой и наглядный код. Даже на ASM это выглядит просто и элегантно
    Код (C++):

    ;////////////////////////////////////////////////////////////////////////////
        .include "m8def.inc"        ; Программа под ATmega8
    ;=================================================
    ; Имена регистров
        .def     MulLow                     = R0            ; Младший регистр результата умножения
        .def     MulHigh                   = R1            ; Старший регистр результата умножения
        .def     Temp0                     = R15            ; Регистр с нулевым значением
        .def     Temp1                     = R16
        .def     Temp2                     = R17
        .def     Temp3                     = R18
        .def     Temp4                     = R19
        .def     Temp5                     = R20
        .def     Temp6                     = R21
        .def     Temp7                     = R22
        .def     Temp8                     = R23
        .def     Counter                   = R24            ; Счетный регистр
        .def     Flags                       = R25             ; Флаговый регистр

    ;=================================================
    ; Сегмент SRAM памяти
    .DSEG

         sEncoderPrev:
         .BYTE 1
                       
    ;=================================================
    ; Сегмент EEPROM памяти
    .ESEG
                 
    ;=================================================
    ; Сегмент FLASH памяти
    .CSEG
    ;=================================================
    ; Таблица прерываний
        .ORG 0x00     RJMP    RESET
        .ORG 0x009 rjmp TIM0_OVF      
    ;=================================================
    ;прерывание по переполнению таймера 0
    TIM0_OVF:
     
        lds  Temp2, sEncoderPrev   ;читаем из оперативки предыдущее значение
        lsl  Temp2                 ;сдвигаем в лево на два бита
        lsl  Temp2
        in   Temp1, PINB   ;чмтаем весь порт
        andi Temp1, 3           ;оставляет два младших бита (PB0 и PB1)
        sts  sEncoderPrev, Temp1   ;кидаем в оперативку
        or   Temp2, Temp1              ;соединяем новые значения (биты 0 и 1) и предыдушие значения (битв 3 и 4)
     
        ;проверяем полученное число

        ; 1 7 8 14 -> по часовой стрелке
        cpi  Temp2, 1
        breq Encoder_clockwise
        cpi  Temp2, 7
        breq Encoder_clockwise
        cpi  Temp2, 8
        breq Encoder_clockwise
        cpi  Temp2, 14
        breq Encoder_clockwise
     
        ; 2 4 11 13 -> против часовой стрелки
        cpi  Temp2, 2
        breq Encoder_counterclockwise
        cpi  Temp2, 4
        breq Encoder_counterclockwise
        cpi  Temp2, 11
        breq Encoder_counterclockwise  
        cpi  Temp2, 13
        breq Encoder_counterclockwise  
        rjmp Encoder_done
     
    Encoder_clockwise:
     
            ; обработка поворота по часовой стрелке

        rjmp Encoder_done ;на выход
     
    Encoder_counterclockwise:
     
            ; обработка поворота против часовой стрелки

        rjmp Encoder_done ;на выход    


    Encoder_done:
     
             
            RETI
    ;=================================================

    ; Прерывание по сбросу, стартовая инициализация
    RESET:  
        ; Инициализация стека
        LDI     Temp1, LOW(RAMEND)
        OUT     SPL, Temp1
        LDI     Temp1, HIGH(RAMEND)  
        OUT     SPH, Temp1
         
        ; Настраиваем порты ввода-вывода
        ; для энкодера
        cbi DDRB, 0   ;PB0 на вход
        cbi DDRB, 1   ;PB1 на вход
        sbi PORTB, 0  ;PB0 подтягиваем к +
        sbi PORTB, 1  ;PB1 подтягиваем к +
     
        ; первоначальная инициализация энкодера
        in    Temp1, PINB  ;чмтаем весь порт
        andi    Temp1, 3            ;оставляет два младших бита (PB0 и PB1)
        sts     sEncoderPrev, Temp1    ;кидаем в оперативку
     
        ; Настраиваем таймер0
        LDI     Temp1, 0b00000100  ;предделитель 256
        OUT    TCCR0, Temp1
        LDI     Temp1, 0b01000001  ;разрешение прерывания по переполнению
        OUT    TIMSK, Temp1
     
        ; Глобальное разрешение прерываний
        SEI

    ;=================================================
    ; Основная программа (цикл)
    Main:
     
        ; Тут пишем наш основной код

        RJMP    Main
     
    Данный метод тоже не лишен недостатков. Забираем для обработки один таймер, вы-же используете только внешние прерывания, коих в ESP навалом. Тут, как говорится, на вкус и цвет все фломастеры разные :)
     
    parovoZZ и issaom нравится это.
  4. issaom

    issaom Гуру

    Главное чтобы работало, прерываний и в Arduino хватит )))
     
  5. SergeiL

    SergeiL Оракул Модератор

    Вчера компанией сходили на бой в VR.

    До 10 человек одевают очки-шлем VR, в каждой руке манипулятор-джойстик, зал метров 300.
    Загружают игру и все попадают в VR. Нас было 9 человек, взрослые и дети от 10 лет, - 2 команды. Террористы и спецназ.
    Бой между командами. Зал, где проходит мероприятие - пустой, но в VR - видишь участников в бронеках, над головой имя, написано синим - свой, красным - противник, видишь территорию какой то базы, вокруг военная техника, контейнеры, небо, на полу блоки, которые приходится обходить и перешагивать, хотя конечно их в реальности нет.
    В шлеме все ну очень реально. Стерео изображение, стерео звук, крутишь голову- ничего не тормозит.
    Причем наблюдающие, кто не пошел играть - уржались от вида 9 людей со странным поведением в пустом зале.
    Выбираешь оружие, видишь его своих руках (есть вариант два УЗИ, каждый в своей руке, стреляешь из двух рук, наводя каждую куда нужно), главное не замочить своих, и перестрелять вражескую команду.
    Попали в тебя - выбываешь на несколько минут, идешь на свою базу, через несколько минут восстанавливаешься. Выбираешь оружие - и снова в команде. У каждого вида оружия - свои возможности, свой запас патронов, его нужно перезаряжать, когда запас заканчивается.
    Мы играли 3 раза по 15 минут, все мокрые, больше точно не нужно, хотя дети еще просились.
    Очки-шлем - в передней части 4 камеры, а стенах, на полу - рисунок из линий. Очки снимать переворачивать нельзя - потребуется калибровка.
    То есть камеры секут куда смотришь, поворот головы, участников рядом. Думаю есть еще позиционирование какое-то.
     
    Un_ka, Andrey12 и Airbus нравится это.
  6. ivan_alexoff

    ivan_alexoff Гик

    Интересно, надолго этого товарища @Серафим хватит? Скоро спамить начнет?
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Наблюдаю за ним. Если что в бан. Раньше его звали Петр Оршин
     
    Последнее редактирование: 17 окт 2021
  8. Рокки1945

    Рокки1945 Гуру

    народ как вы думаете - эта ава мне больше подходит или остаться на старой
     
  9. Airbus

    Airbus Радиохулиган Модератор

    И чего ты все время то аву меняешь то ник? Я вот airbus с самого рождения а Рассею поменял на Ерофлот на аве пару лет назад как перешел туда. Здесь мой самый любимый самолет. Да и там был самый любимый VP-BIT
     
    Un_ka нравится это.
  10. Рокки1945

    Рокки1945 Гуру

    забыл про работу сказать :)
     
  11. parovoZZ

    parovoZZ Гуру

    самолёт штурвалы попутал или что
    upload_2021-10-18_0-10-8.png
    я вообще не ТС этой темы. Кто ТС той тем вообще хер поймёшь. Первый пост от совы, но он явно не первый, т.е. не ТС.
     
  12. SergeiL

    SergeiL Оракул Модератор

    @parovoZZ, ТС - это обращение, и обращение к ТС темы. Это уведомление ТС той темы, в которой он флудит.
    Не паримся, ТС знает кому это уведомление.
    @Airbus тут не причем, просто я удалял много сообщений, всем пришло уведомление обращенное к ТС.
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Я в это время сплю. Кстати мне тоже такое пришло. Да, и хватит уже флудить везде и всюду
     
  14. parovoZZ

    parovoZZ Гуру

    кто бы говорил)
     
  15. Рокки1945

    Рокки1945 Гуру

    ну чо отдахнем недельку:D
     
  16. Рокки1945

    Рокки1945 Гуру

    @b707 - приветствую - у меня есть осциллограф дсо150 - там стоит стм32 - кароче мне его вышли из строя - сгорел контроллер - у меня вопрос можно купить новую микросхему и прошить через уарт - есть ли по дефолту бутлоадер в нем ?
     
  17. SergeiL

    SergeiL Оракул Модератор

    А прошивку из вышедшего из строя контроллера выкачать? :)
     
  18. Рокки1945

    Рокки1945 Гуру

    Сергей привет - он в коротком - прошивка опен соурс
     
  19. Рокки1945

    Рокки1945 Гуру

  20. SergeiL

    SergeiL Оракул Модератор

    Привет, привет.
    А загрузчик тоже есть в открытом доступе?