Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 37

Тема: I2C-Arduino

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

    По умолчанию I2C-Arduino

    Что имеем. данные с рулевых кнопок приходят в Arduino https://duino.ru/ и в зависимости от того в каком режиме включена магнитола управляют либо магнитолой либо компом. в данный момент реализовал с помощью счетчика нажатий но это вариант не стабильный и при каждом автоматическом включении радио, сбивается.

    В магнитоле стоит микросхема NJW1191 которая управляется по шине I2C в нее сходятся все аудио сигналы (CD/AUX/FM) и с процессора магнитолы активируются по протоколу I2C.

    Цель: Подключить параллельно Микрухе Arduino, подслушать сигнал приходящий от процессора магнитолы к этой микрухе и соответственно на основе приходящих данных реализовать распределение PC/AUX/FM в Arduino.

    Вопрос: как мне прочитать I2C шину с помощью Arduino? был бы очень благодарен если б кто нибудь показал примерчик прошивки для Arduino которая читает данные с I2C Шины и записывает их в порт Serial.
    Последний раз редактировалось Chip; 19.03.2017 в 03:33.
    хороший модем должен качать пиво!
    Мой проект

  2. #2
    Пользователь
    Регистрация
    12.02.2008
    Сообщений
    52
    Вес репутации
    181

    По умолчанию Re: I2C-Arduino

    Выкладываю код для обойх режимов I2C, Master и Slave
    Можно между собой соеденить два Arduino через аналоговые входы А4 и А5 , Master будет один раз в секунду отправлять строку "Test, communication." Slave должен быть подключен к USB и включен режим мониторинга

    Код для режима Master
    PHP код:
    // Передатчик 

    #include <Wire.h>  //подключаем библиотеку  
    #define ADDR  128  //адрес нужного нам Slave   

    void setup() 

      
    Wire.begin(); //включить i2c 


    void loop()// Главный цикл 

      
    Wire.beginTransmission(ADDR); //начало передачи, с адресом нужного нам Slave 
      
    Wire.write(random(09)); //отправляем данные для выбраного Slave 
      
    Wire.endTransmission();  //конец передачи 
      
    delay(3000); //пауза 
    }  } 
    Код для режима Slave
    PHP код:
    //Приёмник 

    #include <Wire.h> 
    #define ADDR 128 //адрес устройства  

    void setup() 
    {} 

    void loop() {} 

    void receive_handler(int numbytes

      for (
    int i 0numbytesi++) //читаем весь пакет 
      

        
    Serial.print(Wire.read()); // принимаем значение и передаем компьютеру 
      

      
    Serial.println(' '); //перенос строки 

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

Название:	CARDUINO_PINS.png 
Просмотров:	7768 
Размер:	13.9 Кб 
ID:	7557
    Последний раз редактировалось Chip; 04.11.2015 в 16:25.

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

    По умолчанию Re: I2C-Arduino

    Мне не надо управлять микрухой. мне нужно чтобы Arduino подслушивал то что процессор говорит микрухе и например на команду "активировать AUX" пускал данные приходящие с кнопок руля в комп а на команду "активировать CD" пускал данные с кнопок руля на управление выходми.

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

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

    По умолчанию Re: I2C-Arduino

    Нифига не могу разобраться. можно если не трудно подписать какая строчка что делает? Напрягает один момент "ADDR 128" какой то адрес но не пойму что за адрес похоже надо что то умное в Datashet вычитать, второй день смотрю в него как баран.
    хороший модем должен качать пиво!
    Мой проект

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

    По умолчанию Re: I2C-Arduino

    Все Slave устройства на шине имеют свои адреса, для того что бы Master мог выбирать кому слать данные, в DS на твою микросхему указан адрес 128 (80h)

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

    По умолчанию Re: I2C-Arduino

    Подчистил тему и добавил рабочий и проверенный мной код

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

    По умолчанию Re: I2C-Arduino

    Цитата Сообщение от Chip Посмотреть сообщение
    Подчистил тему и добавил рабочий и проверенный мной код
    Куча благодарностей будет время на днях попробую. Я так думаю прошивку для Slave можно использовать для чтения с любого девайса только нужно адрес/ADDR Master`а знать и естественно прописывать в прошивке.
    хороший модем должен качать пиво!
    Мой проект

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

    По умолчанию Re: I2C-Arduino

    У Мастера нет адреса , на то он и мастер
    Нужно знать адрес славе устройства вместо которого ты будешь цеплять Ардуино
    Последний раз редактировалось Chip; 17.02.2010 в 21:54.

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

    По умолчанию Re: I2C-Arduino

    Цитата Сообщение от Chip Посмотреть сообщение
    У Мастера нет адреса , на то он и мастер
    Нужно знать адрес славе устройства вместо которого ты будешь цеплять Ардуино
    Да точно. не так изложил мысль. Но принцип работы понял.
    Последний раз редактировалось Chip; 17.02.2010 в 21:54.
    хороший модем должен качать пиво!
    Мой проект

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

    По умолчанию Re: I2C-Arduino

    Так как самому не хватает знаний, прошу помочь дописать скетч режима Slave, необходимо, что бы при поступлении определенного кода по шине I2C загорался светодиод и не гас пока код продолжает поступать, если более 1 секунды начинает поступать другой код или не поступает ни чего светодиод гас.
    PHP код:
    #include <Wire.h> 
    #define ADDR 72 //адрес устройства 

    int AUX 13// управляющий пин

    void setup()  

    Serial.begin(115200);//скорость обмена с компом 
    Wire.begin(ADDR); //определим как ведомый с указанным адресом 
    Wire.onReceive(receive_handler); //ждем данных от мастера, функция возвращает int число байт данных
    pinMode(AUXOUTPUT); // назначаем пин как выход


    void loop() {} 

    void receive_handler(int numbytes)  

     for (
    int i=0;i<numbytes;i++)  //читаем весь пакет  
      

        if (??? == 
    0x05BD8F7D0)digitalWrite(AUXHIGH); // включаем pin 13 если совпадает с 05BD8F7D0 ("???" - не пойму, что тут должно быть)
        
    Serial.print(Wire.read(), HEX); // принимаем значение и передаем компьютеру 
      

      
    Serial.println(' '); //перенос строки 


Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Ваши права

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