Top.Mail.Ru
Перейти к содержанию

Logitech G25 / G27 - перенос кнопок с шифтера на руль (в процессе)


Рекомендуемые сообщения

Попробую перевести с "французского" :D :

 

Рома делает плату-имитатор блока шифтера логикетов Г25/27 на Ардуине. Ее можно будет воткнуть в разъем для шифтера и руль опознает ее как родную.

Плата маленькая, ее можно сунуть в руль например, или сделать баттон бокс.. словом использовать кнопки с шифтера по своему усмотрению.

 

Но Роман предлагает собирать все это самим... ))

Отсюда вопрос - интересно ли это владельцам Г25/27, и кто из них способен сам все собрать?

Изменено пользователем GranDoxin
Ссылка на комментарий

Попробую перевести с "французского" :D :

 

Рома делает плату-имитатор блока шифтера логикетов Г25/27 на Ардуине. Ее можно будет воткнуть в разъем для шифтера и руль опознает ее как родную.

Плата маленькая, ее можно сунуть в руль например, или сделать баттон бокс.. словом использовать кнопки с шифтера по своему усмотрению.

 

Но Роман предлагает собирать все это самим... ))

 

Почти правильно перевел :) На самом деле ситуация такая, прототип уже делает вид, что работает, но мне бы не помешала помощь в этом вопросе. Кроме того, раньше уже бывало, что я иногда терял мотивацию в середине процесса, если вдруг так случится опять - результаты моего творчества не пропадут (я надеюсь).

 

В любом случае конечный продукт изысканий - готовая плата, которая будет продаваться за огромные бабки :punk: , для тех, кто хочет все готовенькое :lol: А кто хочет попилить немного сам - я только за, глядишь и поможете чем-нибудь... К тому же я сам не настоящий сварщик, ардуину на стройке нашел...

 

 

 

Это у нас типа тестовый скетч для ардуины:

 

 


#define SPI_CS			 10 // SS (D10)
#define SPI_CLOCK	 13 // CLOCK (D13)
#define SPI_SDO_BDATA	 12 // MISO (D12)
#define SPI_SDI		 11 // MOSI (D11)
#define SPI_CS_INVERT 4 // D4

// Digital inputs pins, do not change, it affects the logic!!!
#define BLACK_BOTTOM_B18_PIN 2 // D2
#define BLACK_LEFT_B17_PIN 3 // D3
#define BLACK_RIGHT_B19_PIN 5 // D5
#define BLACK_TOP_B16_PIN 6 // D6
#define RED_LEFT_B1_PIN	 7 // D7
#define RED_RIGHT_B4_PIN	 8 // D8
#define RED_LEFT2_B2_PIN	 9 // D9
#define RED_RIGHT2_B3_PIN 14 // A0
#define DPAD_RIGHT_PIN	 19 // A5
#define DPAD_LEFT_PIN	 16 // A2
#define DPAD_BOTTOM_PIN	 17 // A3
#define DPAD_TOP_PIN	 18 // A4

volatile byte btn[2] = {0, 0};
byte btn_copy[2] = {0, 0};

void setup() {
// have to send on master in, *slave out*
pinMode(MISO, OUTPUT);
pinMode(SPI_CS_INVERT, OUTPUT);

pinMode(BLACK_BOTTOM_B18_PIN, INPUT_PULLUP);
pinMode(BLACK_LEFT_B17_PIN, INPUT_PULLUP);
pinMode(BLACK_RIGHT_B19_PIN, INPUT_PULLUP);
pinMode(BLACK_TOP_B16_PIN, INPUT_PULLUP);

pinMode(RED_LEFT_B1_PIN, INPUT_PULLUP);
pinMode(RED_RIGHT_B4_PIN, INPUT_PULLUP);
pinMode(RED_LEFT2_B2_PIN, INPUT_PULLUP);
pinMode(RED_RIGHT2_B3_PIN, INPUT_PULLUP);

pinMode(DPAD_RIGHT_PIN, INPUT_PULLUP);
pinMode(DPAD_LEFT_PIN, INPUT_PULLUP);
pinMode(DPAD_BOTTOM_PIN, INPUT_PULLUP);
pinMode(DPAD_TOP_PIN, INPUT_PULLUP);

// turn on SPI in slave mode
SPCR |= _BV(SPE);
// turn on interrupts
SPCR |= _BV(SPIE);

digitalWrite(SPI_CS_INVERT, HIGH); // because I use XOR gate :)
PCICR = 7; // enable all 3 PCIE interrupts

*digitalPinToPCMSK(BLACK_BOTTOM_B18_PIN) |= (1<<digitalPinToPCMSKbit(BLACK_BOTTOM_B18_PIN));
*digitalPinToPCMSK(BLACK_LEFT_B17_PIN) |= (1<<digitalPinToPCMSKbit(BLACK_LEFT_B17_PIN));
*digitalPinToPCMSK(BLACK_RIGHT_B19_PIN) |= (1<<digitalPinToPCMSKbit(BLACK_RIGHT_B19_PIN));
*digitalPinToPCMSK(BLACK_TOP_B16_PIN) |= (1<<digitalPinToPCMSKbit(BLACK_TOP_B16_PIN));

*digitalPinToPCMSK(RED_LEFT_B1_PIN) |= (1<<digitalPinToPCMSKbit(RED_LEFT_B1_PIN));
*digitalPinToPCMSK(RED_RIGHT_B4_PIN) |= (1<<digitalPinToPCMSKbit(RED_RIGHT_B4_PIN));
*digitalPinToPCMSK(RED_LEFT2_B2_PIN) |= (1<<digitalPinToPCMSKbit(RED_LEFT2_B2_PIN));
*digitalPinToPCMSK(RED_RIGHT2_B3_PIN) |= (1<<digitalPinToPCMSKbit(RED_RIGHT2_B3_PIN));

*digitalPinToPCMSK(DPAD_RIGHT_PIN) |= (1<<digitalPinToPCMSKbit(DPAD_RIGHT_PIN));
*digitalPinToPCMSK(DPAD_LEFT_PIN) |= (1<<digitalPinToPCMSKbit(DPAD_LEFT_PIN));
*digitalPinToPCMSK(DPAD_BOTTOM_PIN) |= (1<<digitalPinToPCMSKbit(DPAD_BOTTOM_PIN));
*digitalPinToPCMSK(DPAD_TOP_PIN) |= (1<<digitalPinToPCMSKbit(DPAD_TOP_PIN));

Serial.begin(115200);
Serial.print("Ready...\r\n");
}
// SPI interrupt routine
ISR (SPI_STC_vect) {
SPDR = btn[1];
}
ISR(PCINT1_vect) { // pins A0-A5 (14-19)
if (!digitalRead(RED_RIGHT2_B3_PIN)) btn[0] |= (1 << 3); else btn[0] &= ~(1 << 3);
if (!digitalRead(DPAD_RIGHT_PIN)) btn[0] |= (1 << 4); else btn[0] &= ~(1 << 4);
if (!digitalRead(DPAD_LEFT_PIN)) btn[0] |= (1 << 5); else btn[0] &= ~(1 << 5);
if (!digitalRead(DPAD_BOTTOM_PIN)) btn[0] |= (1 << 6); else btn[0] &= ~(1 << 6);
if (!digitalRead(DPAD_TOP_PIN)) btn[0] |= (1 << 7); else btn[0] &= ~(1 << 7);
}
ISR(PCINT0_vect) { // pins D8-D13
if (!digitalRead(RED_RIGHT_B4_PIN)) btn[0] |= (1 << 1); else btn[0] &= ~(1 << 1);
if (!digitalRead(RED_LEFT2_B2_PIN)) btn[0] |= (1 << 2); else btn[0] &= ~(1 << 2);
}
ISR(PCINT2_vect) { // pins D0-D7
if (!digitalRead(BLACK_BOTTOM_B18_PIN)) btn[1] |= (1 << 4); else btn[1] &= ~(1 << 4);
if (!digitalRead(BLACK_LEFT_B17_PIN)) btn[1] |= (1 << 5); else btn[1] &= ~(1 << 5);
if (!digitalRead(BLACK_RIGHT_B19_PIN)) btn[1] |= (1 << 6); else btn[1] &= ~(1 << 6);
if (!digitalRead(BLACK_TOP_B16_PIN)) btn[1] |= (1 << 7); else btn[1] &= ~(1 << 7);

if (!digitalRead(RED_LEFT_B1_PIN)) btn[0] |= 1; else btn[0] &= ~1;
}

void loop() {
// if SPI not active, clear up things
if (digitalRead (SS) == HIGH) {
SPDR = btn[0];
if (btn[0] != btn_copy[0] || btn[1] != btn_copy[1]) {

 Serial.print("B: ");
 for (int i=0; i<8; i++) Serial.print((int)((btn[0] >> i) & 1));
 Serial.print(" ");
 for (int i=0; i<8; i++) Serial.print((int)((btn[1] >> i) & 1));
 Serial.println("");

 btn_copy[0] = btn[0];
 btn_copy[1] = btn[1];
 }
}
}

 

 

Так мы будем имитировать шифтер с помощью подручных средств (Arduino Nano, EEPROM, inverter gate):

post-1173-0-26093400-1463744429_thumb.png

Изменено пользователем RomanST
Ссылка на комментарий

У меня кнопки уже давно перенесены. :rolleyes:

 

Угу, причем если посчитать количество кнопок на руле - получается то же самое (6 + 12), что наводит на интересную мысль, что электроника в G29 стоит точно такая же %)

Ссылка на комментарий

Тема интересная,спасибо, Роман.

Угу, причем если посчитать количество кнопок на руле - получается то же самое (6 + 12), что наводит на интересную мысль, что электроника в G29 стоит точно такая же %)

А меня мысль уводит дальше- полагаю, что, если платы электроники идентичны у Г27-29, то проводов в баранку заходит тоже немного. ( используется тот же интерфейс) Это было бы большим плюсом. Посему, было бы интересно в этом убедиться, но, кроме Владимира Озирного это, похоже, не может сделать никто . ) Если бы Володя был электронщиком и имел Г27- мог бы потрудиться на общее благо )

Изменено пользователем Baikal
Ссылка на комментарий

Тема интересная,спасибо, Роман.

 

А меня мысль уводит дальше- полагаю, что, если платы электроники идентичны у Г27-29, то проводов в баранку заходит тоже немного. ( используется тот же интерфейс) Это было бы большим плюсом. Посему, было бы интересно в этом убедиться, но, кроме Владимира Озирного это, похоже, не может сделать никто . ) Если бы Володя был электронщиком и имел Г27- мог бы потрудиться на общее благо )

 

Сдвиговые регистры можно в цепочку объединять несколько штук, если там такие же, как в G27 стоят - вместо одного в руле и двух в шифтере будет три последовательно в руле. Количество проводов при этом останется таким же.

Ссылка на комментарий

Сдвиговые регистры можно в цепочку объединять несколько штук, если там такие же, как в G27 стоят - вместо одного в руле и двух в шифтере будет три последовательно в руле. Количество проводов при этом останется таким же.

Но тут по- любому ,видимо,этим ен обойтись.. Прошивки основных контроллеров рулей то разные.. А тут уже ничего не поделать.. Так что, видимо, не судьба.. (?)

Ссылка на комментарий

Вот как то так:

 

 

N59TC.png

 

 

 

Но тут по- любому ,видимо,этим ен обойтись.. Прошивки основных контроллеров рулей то разные.. А тут уже ничего не поделать.. Так что, видимо, не судьба.. (?)

Ничего не понял... :) Что не судьба?

Ссылка на комментарий

Вот как то так:

 

 

N59TC.png

 

 

 

 

Ничего не понял... :) Что не судьба?

Ну прошивки то у рулей Г27 и Г29 разные. Скорее всего и интерфейс с кнопками по- другому реализован. То есть невозможно будет вот так вот просто взять Г27 с его платой , и воткнуть в аналог платы из баранки Г29, просто скопировав его, ( сделав копию в железе)

Изменено пользователем Baikal
Ссылка на комментарий

Ну прошивки то у рулей Г27 и Г29 разные. Скорее всего и интерфейс с кнопками по- другому реализован. То есть невозможно будет вот так вот просто взять Г27 с его платой , и воткнуть в аналог платы из баранки Г29, просто скопировав его, ( сделав копию в железе)

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

Ссылка на комментарий

А меня мысль уводит дальше- полагаю, что, если платы электроники идентичны у Г27-29, то проводов в баранку заходит тоже немного. ( используется тот же интерфейс) Это было бы большим плюсом. Посему, было бы интересно в этом убедиться, но, кроме Владимира Озирного это, похоже, не может сделать никто . ) Если бы Володя был электронщиком и имел Г27- мог бы потрудиться на общее благо )

Фото нутрянки есть здесь: http://www.edracing....ogitech_G29.php

Плата в руле точно другая, крупнее и все такое - лично я разбирал до съема баранки, причем это оказалось нереально геморройно по сравнению с Г27.

Изменено пользователем werewolfenstein
Ссылка на комментарий

Фото нутрянки есть здесь: http://www.edracing....ogitech_G29.php

Плата в руле точно другая, крупнее и все такое - лично я разбирал до съема баранки, причем это оказалось нереально геморройно по сравнению с Г27.

Самого интересного там не видно, маркировки микросхем на плате баранки :) Но кое-какие выводы сделать можно:

 

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

 

Optional gear shift has no buttons...
  • G27 shifter works, not the buttons.
  • The new buttons on the G29 / G920 wheel face replace the G27 shifter buttons

Теперь там только потенциометры и одна кнопка заднего хода. Кстати, зря они не проверили задний ход на шифтере G27, Думаю, он бы не работал с базой G29.

 

G29 wheel won't run without the electronics in wheel rim being attached.

Понятно, eeprom перенесли в баранку, следовало ожидать.

 

Fewer overall buttons.

G27 (22 total): has 20 buttons and 2 paddles.

G29 (21 total): 17 buttons, 2 paddles and a spin knob.

Spin knob - это 2 кнопки с точки зрения электрики, т.е. тоже 22.

Ссылка на комментарий

Классная тема :)

 

Роман, почему на схеме нарисована atmega328 с обвязкой отдельно, а не просто как один блок Nano? Так запутаннее.

Я так понял используется отдельный внешний eeprom? а почему не собственный ардуинный?

и что за инвертор?

Ссылка на комментарий

Роман, почему на схеме нарисована atmega328 с обвязкой отдельно, а не просто как один блок Nano? Так запутаннее.

Тут вопрос вот какой, если у меня на макетке Nano и отдельно 2 микросхемы в DIP-корпусах - все хорошо и красиво... Но в баранку макетку не засунешь, надо либо делать бутерброд, либо разводить новую плату. И тут начинается трэш и израиль, если все брать в DIP-корпусах - плата получается квадрат 5х5 см, меньше я развести не смог... В итоге наверное придется делать свою плату в мелких корпусах, которая будет не совсем Nano уже.

 

Я так понял используется отдельный внешний eeprom? а почему не собственный ардуинный?

При низком уровне CS работает внешний EEPROM, при высоком - атмега имитирует работу сдвиговых регистров. Т.е. это два отдельных устройства, а SPI в атмеге только один (USART в SPI master не годится). Я не придумал способа использовать внутренний EEPROM...

и что за инвертор?

Ну на макетке у меня вообще сейчас XOR стоит (к155лп5), а вот что будет в конечном варианте... Что-нибудь типа такого: http://www.chipdip.r...rter-4.5-5.5-1/

 

Я у мамы инженер :)

post-1173-0-44975600-1463757623_thumb.png

Изменено пользователем RomanST
Ссылка на комментарий

Не обязательно ведь использовать хардварный spi? Можно написать свой обработчик и в зависимости от уровня этого cs делать то или другое. Я сейчас немного занят другим девайсом, но потом обязательно поковыряюсь, интересная тема :)

Не верю я, что все это нельзя реализовать на одной голой ардуине

Ссылка на комментарий

Не обязательно ведь использовать хардварный spi?

Обязательно, можешь не верить :) Там частота сигнала CLOCK на порядок выше, чем атмега может побитово с ног прочитать. Я сначала пытался, дай бог если каждый десятый бит прочитать получалось :)

Ссылка на комментарий

понятно, верю :)

может тогда проще взять что-то помощенее атмеги? Какая там кстати частота клока?

Ну вот есть STM32 дешевый, я давно хотел его попробовать: http://ali.onl/2qb. Только он приедет через месяц...

 

Вообще годная штука:

 

The STM32F103xx medium-density performance line family incorporates the high-performance ARM®Cortex®-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.

 

 

 

Честно говоря, я не мерял, какая там частота, но судя по тому, что между соседними пиками CLOCK не всегда успеваю SPDR значение присвоить - для ардуины это на пределе возможностей.

Изменено пользователем RomanST
Ссылка на комментарий

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

 

у атмеги частота 16 МГц, если она справляется, то и клок не больше.

Если же этот АРМ настраивать на макс. для него 72МГц, то частоту выводов шины APB1 можно получить 36Мгц, а АРВ2 - 72Мгц.

Должно хватить на программную обработку :)

 

post-1259-0-44894700-1463926263_thumb.png

  • Нравится 1
Ссылка на комментарий

Мне нравится такая игрушка :) Придется заказывать :)

 

у атмеги частота 16 МГц, если она справляется, то и клок не больше.

 

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

Ссылка на комментарий

Будет очень круто сделать с этой платой формульную баранку для логитеков!

 

Ну сейчас расклад такой, ко мне едут STM32, наваять на них я что-то смогу через месяц, не раньше. То, что на картинке выше, работать скорее всего будет, но я не буду заказывать печатные платы, пока не попробую STM32. Если кто-то хочет сам попробовать - могу дать исходники (DipTrace).

 

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

Ссылка на комментарий
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...