Страница 1 из 1

atmega SPI сенсор мыши ADNS 5090 считывание показаний

Добавлено: Пн апр 04, 2016 19:10:25
fatall_error
Всем привет. Бьюсь три дня над SPI avr. Хочу снимать показания X и Y с сенсора мыши. Есть в наличии ADNS 5090. Не могу понять как их подружить между собой. для отладки использую UART. на UART прилетают одни нули. Что я делал. Для начала по SPI подружил две меги между собой, чтобы понимать как вообще данные передаются, но у сенсора свои хитрости походу и моя кроимозгость не позволяет понять. Итак в CodeVisionAvr мега16 мастер на 8МГц SPI 125КГц режим ноль.

Помогите пожааааалуйста!!!

:shock: :shock: :shock:

Re: atmega SPI сенсор мыши ADNS 5090 считывание показаний

Добавлено: Ср апр 13, 2016 20:46:20
mas123
fatall_error писал(а): мастер на 8МГц SPI 125КГц режим ноль.
В то время как у ADNS 5090 по даташиту получается режим 3....
Хотелось бы узнать - а что ЭТО такое? :shock:

Код: Выделить всё

while (1)
      { 
      PORTB.4=0;
      SPDR=0x00;
      PORTB.4=1;
      PORTB.4=0;
      SPDR=0x00;
      PORTB.4=1;  
      delay_ms(1000);
      };
Если это - передача по SPI, то да-а-а-а....... :facepalm:
Мало того, что после начала передачи первого 0x00 не ждем завершения передачи (подсказываю: даташит на Атмегу, раздел SPI, регистр SPSR, бит SPIF), так зачем-то ещё дёргается CS между передачей байт (надеюсь, что PB4 - это CS).
В даташите на ADNS-5090 четко нарисована диаграмма обмена, и даже сказано: "If NCS is raised during a transaction, the entire transaction is aborted and the serial port will be reset."

Суда по коду - ты пытаешься прочитать содержимое регистра R0. А в том же даташите указаны задержки между байтами при SPI-обмене.
При чтении значения регистра, после выдачи байта адреса необходимо сделать задержку на tSRAD: "From rising SCLK for last bit of the address byte, to falling SCLK for first bit of data being read"
И указано время - 4 мкс, что на частоте 8 МГц составит эдак под 32 команды Атмеги.