джойстик PS2 к AVR -asm

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 31 окт 2009, 19:58

В хедере
.equ PORTF = $62

светодиоды мигают. на выход работает нормально.

команда in с портом F работает, а вот out не работает.
но ситуация всеравно не меняется.
уже не знаю где копать. попробую все таки на другом камне сделать
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение EdGull » 31 окт 2009, 19:59

попробуй на васике на вход проверить
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: джойстик PS2 к AVR -asm

Сообщение Drunya » 31 окт 2009, 21:09

milkpower писал(а):команда in с портом F работает, а вот out не работает.
Банально, но может порт на выход не сконфигурирован? :pardon:
Глюк по-немецки означает "счастье"...
Аватара пользователя
Drunya
 
Сообщения: 196
Зарегистрирован: 05 июн 2007, 12:20
Откуда: Киев
прог. языки: C/C++, ASSEMBLER

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 31 окт 2009, 21:25

не, я про то, что компилятор ругается если out portF писать
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение Michael_K » 31 окт 2009, 23:28

Правильно ругается.
Если 0x62, то однозначно
out PORTF,r24

Загадочно все это в общем... :pardon:
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: джойстик PS2 к AVR -asm

Сообщение boez » 31 окт 2009, 23:41

Да все правильно, смотрим ДШ:
адрес памяти $62 - PORTF
адрес IO $01 = адрес памяти $21 - DDRF
адрес IO $00 = адрес памяти $20 - PINF

Поэтому к PINF и DDRF можно обращаться с помощью in и out, а к PORTF - нельзя. Ну попробуй тупо написать

Код: Выделить всё
in R24, $00


или

Код: Выделить всё
lds R24, $20


Если заработает - проблема хидера, если нет - в чем-то другом. JTAG влияет только на ноги 4-7, ноги PF0-3 работают всегда (ну правда в режиме меги103 - только на вход)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 08 ноя 2009, 13:00

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

вот как подключил:
joy-----mega
clk<----SCK
data--->MISO
comnd<--MOSI
ATT<----`SS
ACK---->PB3

код
Код: Выделить всё
joy_init:
   ldi temp,(1<<4)|(1<<5)|(1<<7);SS-MOSI-SCK-out
   out DDRB,temp
;SPI в режиме мастера, fclk=1мгц,скорость fclk/4, первый фронт низкий, передача от младшего бита
   ldi temp,(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<DORD)
   out SPCR,temp
   ret


joy_com:   ;joyin joyout
   ldi temp,0
   out portb,temp ;`SS низкий уровень
   out SPDR,joyin ;запускаем передачу
joy_wait:   ; ждем конца передачи
   sbis SPSR,SPIF
   rjmp joy_wait
   in joyout,SPDR
   ldi temp,(1<<4) ;`SS высокий уровень
   out portB,temp
   ret


результат байтов на входе побитово смотрю на жк,
и вот самое интересное, что нет разницы в том что я делал все программно и сейчас аппаратно, при отключении джойстика на входе $80 все время. при включении 00.
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 17 ноя 2009, 02:51

купил осциллограф, решил добить все-таки работоспособность девайса.
нашел несколько багов, исправил.
джойстик реагирует на все получаемые команды, в порт шлет правильные данные, а вот МК не видит ничего на пине порта.

Код: Выделить всё
   ldi temp, 0b10001110; бит0 на вход
   ldi temp1,$00
   out   DDRD,temp
   out PORTD,temp1
   ret

.......cut.....и далее
   in temp,pinD


и на входе 0.
вот даже скрин, зеленая данные с джойстика, считываю порт когда желтый сигнал в высоком уровне, т.е. значение уже установлено
osc.jpg


что можете посоветовать?

Добавлено спустя 1 час 4 минуты 7 секунд:
все, вопрос отпал. заработало! :Yahoo!:
попробую еще переделать на SPI и если интересно кому, могу выложить процедурки работы с джойстиком
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение galex1981 » 17 ноя 2009, 09:32

Выложи конечно!
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 17 ноя 2009, 12:46

при переводе на SPI возникли непонятные баги,
osc_spi.JPG
желтый-CLK, зеленый-DATA с джойстика


на скрине видно, что сигнал с джойстика не успевает установиться, хотя при всех тех-же аналогичных условиях, в предыдущем варианте,когда программно генеришь импульсы, все успевает и работает.
кто-нибудь сталкивался с таким?
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение boez » 17 ноя 2009, 13:26

А программно отчего заработало? Случаем не от включения pull-up (подтяжки на ноге)? Потому что выглядит это как будто подтяжка слишком слабая, а выход джойстика - открытый коллектор.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 17 ноя 2009, 13:40

выход действительно ОК, но подтяжка у меня была, причем встроенная не справлялась, методом подбора нашел оптимальным 1кОм, программно заработало когда нашел баги в основной программе, у меня регистры немного конфликтовали :oops:

на SPI подтяжку меньше 1.8кОм делать нельзя, т.к. вход уходит в постоянный +5V, но и разницы при этом до 5кОм никакой. сигнал DATA не успевает установиться, при этом еще и последний бит заплывает на следующий пакет.
снижение частоты не помогает, т.к. джой устойчиво работает от 200 до 300кГц (родная=250кГц в мануалах) , увеличение паузы между пакетами не спасает, тогда джойстик может просто скинуть состояние и ждать опроса заново.
вобщем остановлюсь наверно пока на софтовой порто-дрыгалке, если ничего меня не осенит. :)
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Re: джойстик PS2 к AVR -asm

Сообщение Duhas » 17 ноя 2009, 14:53

там на СПИ прогера не висит случает в этот же момент ? )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: джойстик PS2 к AVR -asm

Сообщение milkpower » 17 ноя 2009, 15:19

отключал, не помогало. :(
вобщем остановился на эмуляции через порт

вот видео как оно работает



вот подпрограммы работы с джойстиком
Код: Выделить всё
joycall:
   rcall jinit
   rcall joystart
   ldi joyin,$01
   rcall joy_com
   rcall delay

   ldi joyin,$42
   rcall joy_com

   mov r14,joyout

   rcall delay


   ldi joyin,$00
   rcall joy_com
   rcall delay

   ldi joyin,$00
   rcall joy_com

   mov r13,joyout

   rcall delay

   ldi joyin,$00
   rcall joy_com

   mov r12,joyout

   rcall delay
   rcall joyend
   ret




jinit:
   ldi temp, 0b00001110
   ldi temp1,$0f
   out   DDRD,temp
   out PORTD,temp1
   ret

joystart:
   ldi temp,0b00001001
   out portD,temp
   ret
joyend:
   ldi temp,$0f
   out portD,temp
   ret

joy_com:   ;joyin   joyout  portB
   ;bit0 data   out                  port in
   ;bit1 cmd   in                  port out
   ;bit2 ATT   select device 0=select   port out
   ;bit3 CLK   òàêòîâûå            port out
   ;bit4 ACK   ïîäòâåðæäåíèå          port in
   clr   joyout
   ldi count,8
joy_l:
   clr temp1
   ;CMD
   rol joyin   ;сдвигаем старший бит в перенос
   rol temp1   ;сдвигаем перенос в младший
   rol temp1   ;во 2-й бит на контакт CMD


   ;Clk+ATT
   ori    temp1,0b00010000
   andi temp1,0b00010010
   out portD,temp1
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   ori    temp1,0b00011000
   andi temp1,0b00011010
   out portD,temp1
   nop
   nop
   in temp1,pinD
   ror temp1   
   ror joyout   
   dec count
   brne joy_l
   ret



delay:
   push temp
   ldi temp,4
del_lp:
   dec temp
   brne del_lp
   pop temp
   ret


joyin, joyout, temp, temp1, count = любые ваши регистры кроме:
r14 - индекс джойстика
r13 - первый байт кнопок
r12 - первый байт кнопок
результат в r12 r13 приходит инвертированый, т.е. нажатая кнопка =0
nop'ы для синхронизации для кварца 7.3728мГц
вся процедура опроса джойстика занимает около 220мкс.
ну а дальше если будут вопросы, задавайте.
Аватара пользователя
milkpower
 
Сообщения: 217
Зарегистрирован: 25 мар 2009, 13:57
Откуда: Ростов-на-Дону
ФИО: Виктор

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24