Загорелся и я желанием сделать себе приемник для беспроводных геймпадов из RF модуля от толстушки. Покупать ардуину под это дело было бы расточительно (да и не люблю я их), вариант с использованием FT232 у меня не заработал, не хватало скорости порта, так что я решил сделать свою реализацию на AVR, благо контроллеры лежали, да и давно хотелось поизучать их, а изучать на конкретной задаче имхо намного продуктивнее. Первым делом сделал мост, который принимал команды по UART и отправлял в RF модуль, немного поигрался с возможностями модуля, даже снял видео с демонстрацией, но стало быстро понятно, что лежащая рядом с модулем здоровая отладочная плата, это мягко говоря неудобно. В закромах были найдены ATTiny13, у которых не оказалось аппаратного уарта, так что решено было пока сделать автономный вариант, а дальше уже будет видно (очень уж привлекает возможность использовать ring of light для вывода уведомлений). Для того, чтобы собрать полноценный приемник понадобится: 1. Собственно сам RF модуль, я использовал модель ревизии F (есть сведения, что у ревизии A меньше радиус приема, а также проблема с совместимость с Windows 8/10) 2. Микроконтроллер AVR. Подойдет практически любой, я использовал ATTiny13, но скомпилировать прошивку можно и под другие контроллеры, возможно только придется поменять назначение портов в дефайнах, ну и выставить клок в 1 МГц для корректной работы задержек 3. Линейный стабилизатор на 3.3 вольта, я использовал 1117-33 4. 2 мелких конденсатора по входу и выходу стабилизатора, я поставил керамику 1 мкФ 5. 3 резистора по 10 КОм, для подтяжки линий. Вообще здесь номинал не так критичен, можно спокойно брать резисторы от 5 до 20 КОм, все должно работать 6. Разъем USB-B, или кусок кабеля с разъемом USB-A, или может у вас есть свои предпочтения в способе подключения - выбирайте на свой вкус и цвет. 7. Монтажный провод, паяльник, программатор, нетрясущиеся руки - все стандартно. Схема подключения Скомпилированная прошивка под ATTiny13 приютилась в архиве во вложениях Исходный код на языке C Code: #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> //pb1 - sync //pb0 - clock //pb2 - data #define DATA 2 #define CLOCK 0 #define SYNC 1 #define DATA_PORT PORTB #define DATA_DDR DDRB #define CLOCK_PIN PINB #define CLOCK_DDR DDRB #define SYNC_PIN PINB #define SYNC_DDR DDRB char prev; int i; void sendToRFModule (unsigned char recieved) { prev = 0xFF; DATA_PORT &= ~(1<<DATA); //óñòàíîâêà 0 for(i = 0; i < 11; i++) { while (prev == (CLOCK_PIN & (1<<CLOCK))){} //detects change in clock prev = CLOCK_PIN & (1<<CLOCK); // should be after downward edge of clock, so send bit of data now if (i < 2) { DATA_PORT &= ~(1<<DATA); //óñòàíîâêà 0 } else { if (recieved >> 7) { DATA_PORT |= 1<<DATA; //óñòàíîâêà 1 } else { DATA_PORT &= ~(1<<DATA); //óñòàíîâêà 0 } recieved = recieved << 1; } while (prev == (CLOCK_PIN & (1<<CLOCK))){} //detects upward edge of clock prev = CLOCK_PIN & (1<<CLOCK); } DATA_PORT |= 1<<DATA; //óñòàíîâêà 1 } int main(void) { DATA_DDR |= 1<<DATA; //gpio init CLOCK_DDR &= ~(1<<CLOCK); //gpio init SYNC_DDR &= ~(1<<SYNC); //gpio init DATA_PORT |= 1<<DATA; //óñòàíîâêà 1 _delay_ms(3500); sendToRFModule(0x84); int timer; int flag; while(1) { if ((SYNC_PIN & (1<<SYNC)) == 0) { flag = 1; for (timer = 0; (timer < 400) && (flag); timer++) { if (SYNC_PIN & (1<<SYNC)) { sendToRFModule(0x04); flag = 0; } _delay_ms(2); } if (flag) { sendToRFModule(0xA9); _delay_ms(4); sendToRFModule(0xB6); _delay_ms(4); sendToRFModule(0x09); _delay_ms(500); sendToRFModule(0xA0); _delay_ms(4); sendToRFModule(0xB0); } _delay_ms(2000); } } } Если буден нужен hex под другой микроконтроллер, пишите - сделаю Принцип работы очень простой, короткое нажатие на кнопку на модуле - синхронизация, долгое нажатие на кнопку - отключение всех геймпадов.
А нет желания усложнить код? при подключении питания загорается центральный светик моргнет 2-3 раза(инициализация что у нас все включилось загрузилось) . После того как все отморгалось он ушол в сон(ничего не горит ждет команду).Задержать кнопку все проснулось и запустили бут анимацию(зеленое кольцо), анимация пролетела и центральный светик горит постоянной(устройство включено). тыкаем на центральную кнопку 2 раза и у нас инициализируется режим синхронизации(когда модуль ищет джойстик) когда джой подключен горит постоянно секция зеленого круга. ну и выключение задержать кнопку в этом режиме все тухнет(и также посылает команду всем джойстиком уснуть) и ждет включения. И последнее если возможно когда модуль"спит" его можно было включить через джой прям как на боксе. данная идея у меня давно, но так не реализовал ибо не програмер
Китайцы давно запилили подделку под оригинальный ресивер на своем контроллере. И всё стоит 500р. Смысл данного? Если бы вы запили без участия rf модуля. Тогда смысл есть.
смысл в том что есть модуль и валяется без дела прикупил тинку не сложная схемка и вуаля модуль к пк готов
@Boxdemon, та не вредничай ты. Сам, чай, уж давно вышел из возраста, когда хочется своими руками что-нибудь такое запилить. Я бы радовался, что народ такие стремления проявляет.
2007 году, когда были только оригиналы почти по 3000 р это имело смысл. Тогда на pic'ах собирали. Сейчас при стоимости девайса в 500 р (копии) я думаю 99% даже заморачиваться не будут. Для самообразования, когда времени до .. много, это да, катит.
Неоднократно слышал, что у китайских ресиверов проблемы с определением и драйверами, а на этот поставились оригинальные дрова от M$. Насчет цены - сама панелька обошлась в 100 рублей (а у большинства они скорее всего просто валяются без дела), все остальное было под рукой, хотя цена обвязки тоже не превышает сотни рублей. С учетом нынешних стипендий достаточно неплохо, ну и приобретенный опыт бесценен. Время - да, вещь дорогая, но в данном случае оно было. Касательно приемника без участия RF модуля - вполне можно попробовать разобраться, только стоимость готового изделия будет весьма высокой, да и не факт, что оно будет работать стабильно и безглючно, так что при доступности панелек от толстушек это имхо лишено всякого смысла. Давайте обсудим в лс, часть из описанного точно можно сделать
На копию - ресивер ставятся дрова не родные в ручном режиме, с определением проблем нет. На джойстик ставятся родные дрова автоматом.
На оригинал дрова подсасываются с инета автоматом. На те копии, что у меня, ручками ставишь -выбираешь устройство и к нему драйвер.
а господа если не секрет зачем вы заморачиваетесь - вроде вот же инструкция по переделке и всего то нужен 1 диод на 5 вольт http://www.xbox.vn.ua/forum/32-akse...ler-ot-xbox-360-k-pc-bez-majkovskogo-resivera