Страница 4 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 31 по 40 из 73
  1. #31
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Только не забудь что регистр 8 битный и максимум может натикать 255.
    Как вариант можно добавить еще один регистр и в прерывании после переполнения инкрементировать. Или предделитель увеличить

  2. #32
    Новичок
    Регистрация
    25.11.2010
    Возраст
    42
    Сообщений
    7
    Вес репутации
    174

    По умолчанию Re: Прерывания в Arduino.

    а я то думаю что за...
    можете помочь? нужно ну очень быстро заполнять восемь регистров 74hc595.. варианты скоростного shiftOut нашел, latch тоже напрямую в порт пишу, а вот с таймером засада.

  3. #33
    Новичок
    Регистрация
    25.11.2010
    Возраст
    42
    Сообщений
    7
    Вес репутации
    174

    По умолчанию Re: Прерывания в Arduino.

    Ваш пример не хочет работать..

    #include <avr/interrupt.h>
    #include <avr/io.h>

    //таймер
    //#define FQ 5000 //установка частоты обновления в Гц
    volatile unsigned int tcnt2; //timer freq
    //74hc595 wiring
    //Pin connected to ST_CP of 74HC595
    int _latch = 8;
    //Pin connected to SH_CP of 74HC595
    int _clock = 12;
    ////Pin connected to DS of 74HC595
    int _data = 11;

    byte registers[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

    //настройки при запуске
    void setup() {
    //timer setup
    TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
    TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
    TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
    ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
    tcnt2 = 1; // 16000000/64/f=tcnt2
    TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
    //установка портов
    pinMode(_latch, OUTPUT);
    digitalWrite(_latch, LOW);
    pinMode(_clock, OUTPUT);
    digitalWrite(_clock, LOW);
    pinMode(_data, OUTPUT);
    digitalWrite(_data, LOW);
    }

    //цикл главной программы
    void loop() {
    }

    //процедура динамической индикации
    void timer2() {


    if (registers[0]==0x01) registers[0]=0x00;
    else registers[0]=0x01;
    digitalWrite(_latch, LOW);
    shiftOut(_data, _clock, MSBFIRST, registers[7]);
    shiftOut(_data, _clock, MSBFIRST, registers[6]);
    shiftOut(_data, _clock, MSBFIRST, registers[5]);
    shiftOut(_data, _clock, MSBFIRST, registers[4]);
    shiftOut(_data, _clock, MSBFIRST, registers[3]);
    shiftOut(_data, _clock, MSBFIRST, registers[2]);
    shiftOut(_data, _clock, MSBFIRST, registers[1]);
    shiftOut(_data, _clock, MSBFIRST, registers[0]);
    digitalWrite(_latch, HIGH);

    }

    //обработчик прерывания
    ISR(TIMER2_OVF_vect) {
    TCNT2 = tcnt2;
    timer2();
    }

    Включается но не выключается, либо скорость настолько высока что пц (при установке в 1).

    Как установить частоту 1 гц? просто 1?

  4. #34
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Вот так можно
    PHP код:
    //Выполнение процедуры по прерыванию таймеру. 
    #include <MsTimer2.h> 
      
    static boolean output HIGH
       
    void flash_led() //обработчик прерывания 

      
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH); 


    void setup() { 
      
    pinMode(13HIGH); 

      
    MsTimer2::set(1000flash_led); // 1000ms период 
      
    MsTimer2::start();  //включить таймер 


    void loop()  

    //..... 


  5. #35
    Новичок
    Регистрация
    25.11.2010
    Возраст
    42
    Сообщений
    7
    Вес репутации
    174

    По умолчанию Re: Прерывания в Arduino.

    Спасибо, наверно так и сделаю. Просто хотелось разобраться именно на уровне МК и его регистров и прочей мутотени.

    Читал-читал, далеко не все отложилось в голове. Надо на практике попробовать.

  6. #36
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Я шифты поключал к SPI , работает очень быстро и в коде все просто реализуется

  7. #37
    Пользователь
    Регистрация
    01.11.2010
    Возраст
    42
    Сообщений
    57
    Вес репутации
    185

    По умолчанию Re: Прерывания в Arduino.

    А можно ли сделать вот такое: есть прерывание по фронту на спад, когда оно срабатывает, то надо включить таймер на определенный интервал и по его истечению подать коротко временный импульс (логическая 1) на какой-не будь выход?

  8. #38
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Можно конечно

  9. #39
    Пользователь
    Регистрация
    01.11.2010
    Возраст
    42
    Сообщений
    57
    Вес репутации
    185

    По умолчанию Re: Прерывания в Arduino.

    да, забыл добавить: после срабатывания таймер должен останавливаться и ждать новой инициализации

  10. #40
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Ты бы лучше описал для чего тебе это нужно, возможно что уже давно все написано

Страница 4 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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