Перейти к содержанию
    

Попрежнему хочу проверки связи, чтением статус регистра

 

    
   for (i = 0; i < 4;i++) spi_rw(0xFF);
    _delay_ms(10);
  /*проверкка связи с АЦП */
   spi_rw(0x40);//настройка АЦП для чтения STATUS регистра
   spi_rw(0xFF);//должно прочитаться 0x80 (AD7792)/0x88 (AD7793)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

FF читает... значит связи нет(

а осцыла нету? проверь хоть проц, когда закорачиваеш MISO (вход SPI) на общий должно вместо 0xFF читать 0x00

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

рабочий день заканчивается, буду завтра уже дальше разбираться... Спасибо!

 

цифровой осциллограф есть, но уже выходные...

Изменено пользователем ADEPTPS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И я снова здесь! Перекорачиваю MISO на общий, ноль появляется!

 

- Осцилограф показал, что НА MOSI, MISO и CLK висит постоянная "1". т.е. 5 В

Изменено пользователем ADEPTPS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АЦП имеет ногу Chip Select (CS), которой нужно "дрыгать" в определенные моменты... Что-то подобного я у Вас не нахожу... Плохо смотрел?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, Вы правы, а когда нужно "дрыгать"?

Изменено пользователем ADEPTPS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НА MOSI, MISO и CLK висит постоянная "1". т.е. 5 В

 

На CLK (выход синхронизации) мастера (вашей Mega128) при передаче ВСЕГДА должны быть импульсы. Вне зависимоси от того, что вы передаёте - хоть нули, хоть что.

 

Если их нету, 2 варианта:

1. Неправильно сконфигурировали SPI.

2. "Неправильный" контроллер - брак, сгорел SPI и т.п.

 

Хотя, если бы он сгорел, то он наверняка бы и не прошивался ....

 

когда нужно "дрыгать"?

 

1. CS=0 (м.б. 1 - уточите в ДШ на ваш АЦП).

2. Любой обмен данными

3. CS=1 (или 0).

 

Иначе АЦП просто пропустит ваши команди и всё остальное мимо ушей :biggrin: .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда нужно "дрыгать"?

Установили СS в низкий - передали/прочитали нужное число байт для записи/чтения в регистр - поставили CS в высокий уровень.

Исключение можно сделать только для режима Continuous Read, ну ещё можно и для режима Continuous Conversion (для последнего - можно, но не обязательно). В этих режимах: CS - низкий в начале режима, по окончанию режима - высокий уровень.

Всё это описано/нарисовано в DS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ноль на CS обязательно, если АЦП рабочий, то на выходе данных (17 вывод) будет видна частота около 4 Hz (готовность данных). По умолчанию АЦП работает циклически с частотой 4Hz.

 

Вобще, если работаеш только с одним АЦП по этим линиям связи, то можно CS навсегда запаять на ноль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SPI все же не работает, поскольку на CLK весит 5В ("еденичка"), вот что было последнее по настройке SPI (то что используется сейчас):

 

void spi_in(void)
{
#define DDR_SPI DDRB
/*#define CPOL 3	
   #define CPHA 2	
#define SPE 6
#define MSTR 4
#define SPR0 0
#define SPIF 7	*/
#define DD_SS 0
#define DD_MOSI 2
#define DD_MISO 3
#define DD_SCK 1
PORTB |= (1<<DD_SCK)|(1<<DD_MOSI)|(1<<DD_MISO);
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);
DDR_SPI &= ~(1<<DD_MISO);
//SPSR |= (1<<SPI2X);
SPCR |=  (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);  
}

uint8_t spi_rw(uint8_t Data)
{
SPDR = Data;//начинаем передачу
while((SPSR & (1<<SPIF)) == 0);//ждем пока передача завершится
Data = SPDR;
return Data;
}	

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как же это?

 

И я снова здесь! Перекорачиваю MISO на общий, ноль появляется!

 

Может не заметили в осциллограф?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как же это?

 

 

 

Может не заметили в осциллограф?

 

Но сигнал тактирования (CLK) то отсутствует....

 

еще раз проверил на осциллографе

Изменено пользователем ADEPTPS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но сигнал тактирования (CLK) то отсутствует....

Если точно SCK отсутствует (а не осцил неправильно настроен), то вариантов 2:

- или Вы в программе кроме показанного участка порты перенастраиваете;

- или пин у контроллера не работает.

Если SPI чувствует FF или 00 ( при закорачивании) значит он включен и вход MISO работает.

Проверте осцилом порты SCK и MOSI (PB1, PB2) настраивая их на вывод 0 (может залепуха или пробой пина).

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...