Страница 4 из 18 ПерваяПервая 1234567891014 ... ПоследняяПоследняя
Показано с 31 по 40 из 178
  1. #31
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    396

    По умолчанию Re: Бортовой компьютер мотоцикла

    С использованием delay будет тормозить выполнение всего кода. Скачай библиотеку TimerOne там в стандартных примерах есть пример как моргать светодиодом.
    хороший модем должен качать пиво!
    Мой проект

  2. #32
    Пользователь Аватар для lti1
    Регистрация
    15.10.2010
    Возраст
    48
    Сообщений
    78
    Вес репутации
    189

    По умолчанию Re: Бортовой компьютер мотоцикла

    Цитата Сообщение от XsanderS Посмотреть сообщение
    С использованием delay будет тормозить выполнение всего кода. Скачай библиотеку TimerOne там в стандартных примерах есть пример как моргать светодиодом.
    Причем тут delay? Oleg_33 спрашивал про millis(), который безо всяких библиотек великолепно работает.

    Цитата Сообщение от Oleg_33 Посмотреть сообщение
    Подскажите как сделать таймер например для светодиода (что бы мигал с интервалом 5/5 сенунд) используя millis(), всю голову сломал.

  3. #33
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    396

    По умолчанию Re: Бортовой компьютер мотоцикла

    Все верно, уставший был, автоматом подумал про delayMicroseconds(),

    насчет библиотеки: ему все равно нужно будет обрабатывать внешние прирывания а это удобнее всего сделать с помощью выше указанной библиотеки, и к тому же управление LED будет в пару строк, можно все сделать и без библиотеки но структура кода значительно усложнится.

    Олег, я не совсем понял насчет pin13. На схеме на него идет сигнал с датчика скорости, в коде он настроен как индикатор LED

    Leonardo имеет 5 таймеров и может обрабатывать 5 внешних прирываний на портах

    int-0 pin3
    int-1 pin2
    int-2 pin0
    int-3 pin1
    int-4 pin7

    Соответственно сигнал с датчика скорости надо заводить на один из этих портов.
    Если возникнет идея сделать все легко и использовать функцию PulseIn() то советую отказаться.
    Все попытки не давали нужного результата, значения плавают и сильно зависят от длинны коди и особенностей его выполнения.
    хороший модем должен качать пиво!
    Мой проект

  4. #34
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    143

    По умолчанию Re: Бортовой компьютер мотоцикла

    Собственно сложность когда меня не пугает, библиотека это хорошо.
    Она может запускать независимые таймеры для разных функций ?? Мне как раз этого не хватает ...

    По поводу схемы - она приблизительная, что бы иметь представление, в общем (держать всё в голове не возможно) прерывание не на том пине - не успел поправить, жду дисплей!! его мля..ть нету ещё, по выше указным причинам .
    Как приедет дисплей, подключу его, сделаю графическое меню и налажу внешнее прерывание (это фундаментальные "функции" от них буду плясать).
    То, что пины не сходятся есть простое объяснение, сейчас пишу код для отдельных "блоков" (пины рандомные, какие удобно, так и подключил) - то бишь: контроль температуры окружающего воздуха, индикатор включенной передачи, контроль температуры двигателя + управление реле (выкладывал предварительный код), чтение и запись настроек EEPROM ... потом объединю всё вместе, так проще выявлять баги в коде...

    Насчёт пинов не совсем понимаю, если допустим на 0 пине int 2! так же на этом пине SPI шина ? ...
    Реально переназначить пины, подключить одновременно устроства с SPI и I2S ? или я чего то не догоняю ?!

    Нажмите на изображение для увеличения. 

Название:	arduino_leonardo_pinout_l.jpg 
Просмотров:	1262 
Размер:	341.8 Кб 
ID:	18376
    Последний раз редактировалось Oleg_33; 07.01.2015 в 01:42.

  5. #35
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    396

    По умолчанию Re: Бортовой компьютер мотоцикла

    int0 int1 int2 int3 int4 это номера прирываний timer0 timer1 timer2 timer3 timer4 здесь глянь и станет все ясно
    SPI c pin0 не связанны на пинах 0,1 UART 2,3 связанны с теми что подписанны на плате SCL SDA это и есть квадратная шина, SPI выведен на отдельный разем (SPI процессора)
    Например если подключаешь дисплей по SPI там в зависимости как органезованна библиотека для конкретного устройства и там же прописанны пины.

    Можещь запускать и останавливать таймеры когда тебе надо, инициалезируешь таймер и при инициализации указываещь номер таймера . нужно посмотреть, как на леонардо, точнее какой таймер за что отвечает. Например timer0 системный таймер, timer1 управляет ШИМ итд... Точно посмотрю и напишу.

    Посмотри здесь описание функции attachInterrupt()

    Запускаем таймер при появлении сигнала и останавливаем при исчезновении, записывая длинну сигнала.
    библиотека просто дает возможность задействовать мощный системный таймер. почитай здесь про библиотеку

    вот пример, делал обработку сигнала с RC пульта.

    PHP код:
    #include <TimerOne.h>

    #define BTNPIN 2 // Вход сигнала
    #define L 5         // Выход на H-Мост вращение в лево
    #define R 6         // Выход на H-Мост вращение в право

    volatile uint16_t startImpuls;
    volatile uint16_t lengthImpuls;
    volatile uint16_t timerCount=0;

    void setup()
    {  

    /* LOW — вызов прерывания всякий раз, 
        когда на порту низкий уровень напряжения;
        CHANGE – прерывание вызывается при изменении 
        значения на входе;
        RISING – вызов прерывания при изменении уровня 
        напряжения с низкого (LOW) на высокое(HIGH)
        FALLING – вызов прерывания при изменении уровня 
        напряжения с высокого (HIGH) на низкое (LOW)*/
      
      
    startImpuls=0;
      
    lengthImpuls=0;
      
      
    pinMode (BTNPININPUT); 
      
    pinMode (LOUTPUT);
      
    pinMode (ROUTPUT);

      
    Serial.begin(115200);

      
    Timer1.initialize(10);                // Интервал срабатывания таймера 10мкс
      
    Timer1.attachInterrupt(callback);

      
    attachInterrupt(0fireUpRISING); // Запуск таймера при наличии сигнала HIGH

    }
    void callback() {  timerCount++; }

    void loop()
    {
       if (
    lengthImpuls 0
      { 
         
    uint16_t li lengthImpuls
         
    lengthImpuls=0;
      
         if (
    li 100  && li 150)   // эамер сигнала для вращения в лево
         
    analogWrite (L23 li);
         
         if (
    li 155  && li 200)   // эамер сигнала для вращения в право
         
    analogWrite (R23 li);
      }   
     }

    // Функция обработки прерывания на подъем
    void fireUp()
    {

      
    detachInterrupt(0);
      
    startImpuls timerCount;
      
    attachInterrupt(0fireDownFALLING);
    }

    // Функция обработки прерывания на падение
    void fireDown()
    {
      
    detachInterrupt(0);
      
    lengthImpuls timerCount startImpuls;
      
    startImpuls=0;
      
    timerCount=0;
      
    attachInterrupt(0fireUpRISING);

    ps: просьба заключать выкладываемые примеры кодов в php teg (доступен в расшыренном режиме написания сообщения)
    Последний раз редактировалось XsanderS; 07.01.2015 в 05:10.
    хороший модем должен качать пиво!
    Мой проект

  6. #36
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    143

    По умолчанию Re: Бортовой компьютер мотоцикла

    Итак ...из этого следует, что внешние прерывания можно подключить к любому из выводов 0-1-2-3-7, мне предпочтительнее к 0(RX) так как врятли он мне понадобится для чего то другово??

    I2C интерфейс находится на выводах 2-3 и эти выводы дублируются на контакты SCL и SDA, те выводы 2 и 3 заняты I2S интерфейсом по любому, не зависимо подключился ли я к выводам SCL и SDA ??

    Если я захочу подключить LED Bar, на какие выводы нужно подключать ... ?
    Нажмите на изображение для увеличения. 

Название:	687474703a2f2f7777772e736565656473747564696f2e636f6d2f77696b692f696d616765732f622f62382f4261722e.jpg 
Просмотров:	1140 
Размер:	92.0 Кб 
ID:	18377

    В примере к библиотеке написано https://github.com/Seeed-Studio/LED_Bar_Suli -
    PHP код:
    SeeedLedBar bar(A4A5);                  // CLK, DTA 
    В описании ничего не сказанно про A4, A5 пины. Может нужно подключить к разъёму ICSP ? но там нет таких выводов
    Последний раз редактировалось Oleg_33; 07.01.2015 в 21:01.

  7. #37
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    396

    По умолчанию Re: Бортовой компьютер мотоцикла

    По первому пункту: Да можно использовать пин0 для прирываний, но я бы посоветовал в процессе проектирования выбрать другой, например 7 потому как тебе наверняка понадобиться UART для связи с компом для отладки и просмотра данных с сенсоров, Если задействуешь пин0 то не сможешь использовать UART для связи с компом.

    По второму пункту: Все верно они продублированны.

    А зачем этот LED Bar? Все можно вывести на дисплей.

    Насчет подключения, A4 A5 потому что библиотека для него так написана, напишешь свое управление и можешь другие пины использовать. Протокол чипа посмотри здесь

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

    Итог: Либо надеяться что библиотеки не поругаются с библиотекой timerOne и той что будет для дисплея и пробовать, либо если поругаются то писать свое управление этим баром, в принципе можно подсмотреть в библиотеке как там все устроенно и либо свое управление смострячить, либо подправить то что конфликтует.
    хороший модем должен качать пиво!
    Мой проект

  8. #38
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    143

    По умолчанию Re: Бортовой компьютер мотоцикла

    Лед бар хочу завести на уровень топлива, давно уже думаю о таком. Посмотрел библиотеку для Led bar, ничего особенного нашел только в функции Grove_LED_Bar::latchData() есть задержка 10 микросекунд... Зашел с планшета на сайт, нашел в гоогле библиотеку на Grove_LED_Bar, предыдущую какую-то другую нашел на LED_Bar_Suli! Правильная Grove_LED_Bar получается.
    https://github.com/Seeed-Studio/Grov...evel/Level.ino в ней 9и8 пин (с шим и без шим) можно другие повесить пины?

    Еще вопрос, как бороться с отключением питания, на Ардуино. Мне нужно записывать в eeprom данные о пробеге, они успеют записаться при отключении? Либо держать Ардуино включенным всегда, но тогда milis() будет переполняться...или мне эта функция не нужна? Смогу я с timerOne засекать время в стандартном формате HH:MM:SS не мешая прерыванию?

    p.s. Спасибо вы мне очень помогли.
    Последний раз редактировалось Oleg_33; 08.01.2015 в 01:56.

  9. #39
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    396

    По умолчанию Re: Бортовой компьютер мотоцикла

    С Grove_LED_Bar.h проблем не возникнет, пины можно поменять как угодно, достаточно просто прописать их в скетче, даже аналоговые. Примечание: аналоговые настроятся как дигитальные в самой библиотеке, тоесть переделывать ничего не надо, просто прописать в скетче напримев вот так нужно прописать если используешь а0, а1, а2 потому что как мы уже говорили аналоговые пины работают и как дигитальные при настройке как дигитальные прописываются след образом: a0=14 a2=15 итд...

    PHP код:
    #include <Grove_LED_Bar.h>

    Grove_LED_Bar bar(141516);  // Clock pin, Data pin, Orientation

    void setup()
    {
      
    // nothing to initialize
    }

    void loop()
    {

    Насчет записи в EEPROM: не успеет, откуда ардуина узнает что ей вот вот отрубят свет запись нужно организовать по какому то действию, например заглушил мотор и ардуина себе думает, ага мотор погас, мы не едем, пробег не капает, сейчас меня отрубят от сети, бах и записала все что насчитала в EEPROM

    Для работы со временем возми лучше модуль DS1307 меньше гемороя на мой взгляд если хочешь реально часы или что то вроде того зделать
    хороший модем должен качать пиво!
    Мой проект

  10. #40
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    143

    По умолчанию Re: Бортовой компьютер мотоцикла

    Насчёт записи в EEPROM ... запись должна производится по наличия и отсутствию напряжения на А5 (если судить по схеме),успеет или нет ?? через этот же ввод будет замер напряжения в бортовой сети. Через резистор 55кОм и 10кОм получится примерно 700мВ при напряжении 12В.
    Объясню почему 55кОм - на мотоцикле бывает сгорает РР и напряжение может скакнуть до 30В! при таком делителе при 30В на входе получится около 4,5В ...

Страница 4 из 18 ПерваяПервая 1234567891014 ... ПоследняяПоследняя

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

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

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

Ваши права

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