![]()  | 
	
| 		
			
			 | 
		#1 | 
| 
			
			
			
			 Новый Пользователь 
			![]() Регистрация: 25.02.2015 
				
				
				
Регион: Беларусь 
Машина: VW Golf IV 
					Сообщений: 15
				 
				
				![]()  | 
	
	
	
	
		
			
			 Добрый день! 
		
	
		
		
			помогите отключить касетоприемник (SCA-R3-1, микроконтроллер philips 83c751) на магнитоле Philips CCRT700. SCA-R3-1 общается по шине I2c (скринштот сообщений на шине, когда вставляю кассету прилагаю). Подключаю Arduino Leonardo вместо SCA-R3-1 (+ - SDA SCL cо шлейфа магнитолы) (скетч внизу), а он молчит, на шине кроме запроса ответов никаких. Подскажите пожалуйста что не так? Код: 
	#include <Wire.h>
 
 void setup()
{
Wire.begin(24); // подсоединение к шине I2C с адресом #18
Wire.onRequest(requestEvent); // регистрация события
}
 
void loop()
{
delay(10);
}
// функция, которая выполняется всякий раз, когда данные запрашивает устройство
//в режиме «Master»
// эта функция зарегистрирована как событие, см. setup()
void requestEvent()
{
byte buffer[6];
buffer[0] = 4;
buffer[1] = 32;
buffer[2] = 4;
buffer[3] = 3;
buffer[4] = 39;
Wire.write(buffer, 6);
  // ответ с сообщением в 6 байт
// как ожидает устройство в режиме «Master»
}
 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			
			
			 Гуру 
			![]() Регистрация: 13.10.2006 
				
				Возраст: 47 
				
Город: Санкт-Петербург 
Регион: 54 
Машина: '98 PRIUS NHW10 
					Сообщений: 1,991
				 
				
				![]() ![]()  | 
	
	
	
	
		
			
			 два вопроса.... три! 
		
	
		
		
		
		
			1. чего хочешь добицца? 2. не надо ли сначала дернуть "insert" ? 3. не дергает ли твой касетоприемник CRQ перед посылкой данных? 
				__________________ 
		
		
		
		
	
	маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#3 | 
| 
			
			
			
			 Новый Пользователь 
			![]() Регистрация: 25.02.2015 
				
				
				
Регион: Беларусь 
Машина: VW Golf IV 
					Сообщений: 15
				 
				
				![]()  | 
	
	
	
	
		
			
			 (vS), Вы абсолютно правы! но попорядку... 
		
	
		
		
			1. подключил AUX, подружил Nexus c кнопками и магнитолой, но беда в том что у всех SCA-R3-1 чтобы включился AUX, нужно достать кассету и вставить, т.е. оставить кассету на месте и потом переключиться на ее не получается (выдает ошибку и переключается на радио). Таким образом процесс включения планшета (он у меня не встроенный, а снимается) превращается в "запуск шаттла". подключить питание планшета - подключить провод AUX - достать кассету - вставить кассету.. убрав кассетоприемник на его место станет ардуино и МСР4231 (все подключение в магнитоле - кнопки и питание ), не будет мерзко шуршать кассетоприемник с кассетой, короче одни плюсы. 2. я сам не подумал про это. Но Вы правы, надо. 3. опять Вы правы. CRQ - 3-й (розовый канал) это подтверждает. но как это реализовать ума не приложу...  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#4 | 
| 
			
			
			
			 Гуру 
			![]() Регистрация: 13.10.2006 
				
				Возраст: 47 
				
Город: Санкт-Петербург 
Регион: 54 
Машина: '98 PRIUS NHW10 
					Сообщений: 1,991
				 
				
				![]() ![]()  | 
	
	
	
	
		
			
			 человек с таким осцылом не может приложить ума к дудуине? ))) дак дергай пины в соответствии с имеющимся сигналом, повторяй его 
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#5 | 
| 
			
			
			
			 Новый Пользователь 
			![]() Регистрация: 25.02.2015 
				
				
				
Регион: Беларусь 
Машина: VW Golf IV 
					Сообщений: 15
				 
				
				![]()  | 
	
	
	
	
		
			
			 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#6 | 
| 
			
			
			
			 Новый Пользователь 
			![]() Регистрация: 25.02.2015 
				
				
				
Регион: Беларусь 
Машина: VW Golf IV 
					Сообщений: 15
				 
				
				![]()  | 
	
	
	
	
		
			
			 получилось принять "запрос" и в зависимости от значения ответить. Но нужно еще раз отправить сообщение мастеру а как "дернуть" пин СRQ еще раз не знаю, да и время когда он от минуса опять в плюс переходит не то что нужно. на картинках видно, что поднимается в 5вольт на середине сообщения. delay не подходит чтобы управлять CRQ, так как вешает отправку между addres и data. millis не работает (не умею им пользоваться). 
		
	
		
		
			Подскажите как быть? куда копать? собственно скетч Код: 
	#include <Wire.h>
const byte SlaveDeviceId = 24;
const int CRQ = 8; //"прижимает" к минусу
enum {
  CMD_TAPE = 19,
  CMD_TUNNER = 25
     };
char command;
void setup()
{
  command = 0;
  Wire.begin(SlaveDeviceId); // Start I²C bus as a slave
  Wire.onReceive(receiveCallback); //ждем данных от мастера, функция возвращает int число байт данных
  Wire.onRequest(requestCallback);
  pinMode(CRQ, OUTPUT); //пин CRQ как вывод
}
void loop(){}
void receiveCallback(int numbytes)
{
  command = Wire.read (); //запоминаем команду на запрос
  digitalWrite(CRQ, LOW); 
}
void requestCallback()
{
 switch (command)
    {
      case CMD_TAPE: //значение на шине при нажатии Tape
      byte buffer[5]; //первое сообщение
      buffer[0] = 4;
      buffer[1] = 32;
      buffer[2] = 4;
      buffer[3] = 3;
      buffer[4] = 39;
      Wire.write(buffer, 5);
      break;
      {
        digitalWrite (CRQ, LOW); // не работает
      }
       byte buffer1[5]; //второе сообщение - не отправляется
      buffer1[0] = 4;
      buffer1[1] = 32;
      buffer1[2] = 5;
      buffer1[3] = 3;
      buffer1[4] = 40;
      Wire.write(buffer1, 5);
      break;
      
      case CMD_TUNNER: // значение на шине при нажатии Tunner
      byte buffer2[5]; //первый байт сообщения
      buffer2[0] = 4;
      buffer2[1] = 32;
      buffer2[2] = 5;
      buffer2[3] = 3;
      buffer2[4] = 40;
      Wire.write(buffer2, 5);
      break;
      }
    
    digitalWrite(CRQ, HIGH); //хз нужно ли, но без него бесконечный цикл 
}
 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#7 | 
| 
			
			
			
			 Гуру 
			![]() Регистрация: 13.10.2006 
				
				Возраст: 47 
				
Город: Санкт-Петербург 
Регион: 54 
Машина: '98 PRIUS NHW10 
					Сообщений: 1,991
				 
				
				![]() ![]()  | 
	
	
	
	
		
			
			 сними резистор на CRQ, посмотри откуда он идет на самом деле, а то поди проц его ждет а не формирует 
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#8 | 
| 
			
			
			
			 Новый Пользователь 
			
		
			
			
			Регистрация: 25.09.2017 
				
				Возраст: 39 
				
Город: Ростов-на-Дону 
Регион: 61 
Машина: OOOO 
					Сообщений: 1
				 
				
				![]()  | 
	
	
	
	
		
			
			 У меня такая же примерно задача, только я задействовал переключение треков, на кассете это работает по паузам, теперь и у меня работает. Вообщем отсканил протокол на анализаторе, и повторил на ардуине, не идеально но все работает)) CRQ отправляет кассетоприемник, переключая проц на режим чтения, и после передает свое состояние, без него никак. ПРи включении проц мафона сначало его считывает а потом команды выдает. Мой вариант, мудрено поди, но писал быстро, лишь бы работало 
		
	
		
		
		
		
		
	
	![]() Код: 
	#include <Wire.h>
byte buffer_i1[5]={4, 17, 16, 146, 179}; //3 пакета для инициализации привода, без них проц команду не даст))
byte buffer_i2[5]={4, 32, 1, 3, 36};
byte buffer_i3[4]={3, 65, 18, 83};
byte buffer_m1[5]={4, 32, 1, 3, 36}; //режим ожидания, на повторе, команда 16
byte buffer_m2[5]={4, 32, 4, 3, 39}; //ответ на команду 19, переходное состояние
byte buffer_m3[5]={4, 32, 5, 3, 40}; //ответ на команду 16, нормальный режим на повторе
byte buffer_n[5]={4, 32, 7, 3, 42}; //ответ на команду 16, перемотка вперед, на повторе
byte buffer_p[5]={4, 32, 8, 3, 43}; //ответ на команду 16, перемотка назад, на повторе
byte i=0, j=0;
int del=0;
byte s=0;
byte com;
byte tape_mode=0; //0-ожидание, 1-воспроизведение, 2-перемотка вперед, 3-перемотка назад
void setup()
{
  Wire.begin(24);                
  Wire.onReceive(receiveEvent); 
  Wire.onRequest(requestEvent);
  pinMode(2, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(4, OUTPUT); //пин CRQ как вывод
  
  digitalWrite (2, LOW);
  digitalWrite (4, LOW);
  digitalWrite (9, LOW); //next
  digitalWrite (10, LOW); //prev
  
}
void loop()
{
if(s>1) {digitalWrite (2, HIGH); digitalWrite (2, LOW);}
}
// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int x)
{
  com = Wire.read();    // receive byte as an integer
  
  if(com!=90) digitalWrite (4, LOW);
  else tape_mode=1;
  if(com==21) digitalWrite (9, HIGH);
  if(com==22) digitalWrite (10, HIGH);
}
void requestEvent()
{
  if(i < 4)
    {
    i++;
    switch(i){
    case 1: Wire.write(buffer_i1, 5); break;
    case 2: Wire.write(buffer_i2, 5); break;
    case 3: Wire.write(buffer_i3, 4); break;
    }
    digitalWrite (4, HIGH);
    if(i<3) digitalWrite (4, LOW);
    }
   else
    { 
     switch(com) 
       {
       case 16: 
         {
         switch(tape_mode){
           case 0: Wire.write(buffer_m1, 5); break;
           case 1: {Wire.write(buffer_m3, 5); s=0;} break;
           case 2: {Wire.write(buffer_n, 5); s++;}  break;
           case 3: {Wire.write(buffer_p, 5); s++;} break;
           }
         }break;
       case 19: {
         Wire.write(buffer_m2, 5); 
         if(tape_mode>1) tape_mode=1;
         }break;
       case 21: {
         if(j==0) {Wire.write(buffer_m2, 5); j=1;} 
         else {Wire.write(buffer_n, 5); j=0; tape_mode=2; digitalWrite (9, LOW);}
         }break;
       case 22: {
         if(j==0) {Wire.write(buffer_m2, 5); j=1;} 
         else {Wire.write(buffer_p, 5); j=0; tape_mode=3; digitalWrite (10, LOW);}
         }break;
       }       
    digitalWrite (4, HIGH);
    if(j==1) digitalWrite (4, LOW);
    }
}
 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#9 | 
| 
			
			
			
			 Новый Пользователь 
			![]() Регистрация: 28.10.2018 
				
				
				
Город: орел 
Регион: 57 
Машина: пежо 307 
					Сообщений: 17
				 
				
				![]()  | 
	
	
	
	
		
			
			 Эх... Уважаемый Nomadic, везёт тебе! ))) 
		
	
		
		
		
		
		
	
	Я хочу повторить твой подвиг, только не с кассетной декой, а с CD приводом. Т.е. выкинуть из магнитолы этот CD привод, а вместо него впихнуть "блютуз to SPDIF" звуковушку (маленькую такую платку), а ардуиной сэмулировать сидюшник, чтоб магнитола думала что сидюшник на месте. Надо сказать что у меня почти всё получилось. Перемкнул в магнитоле нужные контакты, в результате чего магнитола мне разрешила активировать сидюк которого нет, а вот как быть с кнопками переключения треков я не знаю. Ктоб подсказал б...  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
![]()  | 
	
	
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
		
  | 
	
		 |