Tolyaha 1 23 декабря, 2011 Опубликовано 23 декабря, 2011 · Жалоба Попрежнему хочу проверки связи, чтением статус регистра for (i = 0; i < 4;i++) spi_rw(0xFF); _delay_ms(10); /*проверкка связи с АЦП */ spi_rw(0x40);//настройка АЦП для чтения STATUS регистра spi_rw(0xFF);//должно прочитаться 0x80 (AD7792)/0x88 (AD7793) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 23 декабря, 2011 Опубликовано 23 декабря, 2011 · Жалоба FF читает... значит связи нет( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tolyaha 1 23 декабря, 2011 Опубликовано 23 декабря, 2011 · Жалоба FF читает... значит связи нет( а осцыла нету? проверь хоть проц, когда закорачиваеш MISO (вход SPI) на общий должно вместо 0xFF читать 0x00 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 23 декабря, 2011 Опубликовано 23 декабря, 2011 (изменено) · Жалоба рабочий день заканчивается, буду завтра уже дальше разбираться... Спасибо! цифровой осциллограф есть, но уже выходные... Изменено 23 декабря, 2011 пользователем ADEPTPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 (изменено) · Жалоба И я снова здесь! Перекорачиваю MISO на общий, ноль появляется! - Осцилограф показал, что НА MOSI, MISO и CLK висит постоянная "1". т.е. 5 В Изменено 26 декабря, 2011 пользователем ADEPTPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба АЦП имеет ногу Chip Select (CS), которой нужно "дрыгать" в определенные моменты... Что-то подобного я у Вас не нахожу... Плохо смотрел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 (изменено) · Жалоба да, Вы правы, а когда нужно "дрыгать"? Изменено 26 декабря, 2011 пользователем ADEPTPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба НА MOSI, MISO и CLK висит постоянная "1". т.е. 5 В На CLK (выход синхронизации) мастера (вашей Mega128) при передаче ВСЕГДА должны быть импульсы. Вне зависимоси от того, что вы передаёте - хоть нули, хоть что. Если их нету, 2 варианта: 1. Неправильно сконфигурировали SPI. 2. "Неправильный" контроллер - брак, сгорел SPI и т.п. Хотя, если бы он сгорел, то он наверняка бы и не прошивался .... когда нужно "дрыгать"? 1. CS=0 (м.б. 1 - уточите в ДШ на ваш АЦП). 2. Любой обмен данными 3. CS=1 (или 0). Иначе АЦП просто пропустит ваши команди и всё остальное мимо ушей . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба когда нужно "дрыгать"? Установили СS в низкий - передали/прочитали нужное число байт для записи/чтения в регистр - поставили CS в высокий уровень. Исключение можно сделать только для режима Continuous Read, ну ещё можно и для режима Continuous Conversion (для последнего - можно, но не обязательно). В этих режимах: CS - низкий в начале режима, по окончанию режима - высокий уровень. Всё это описано/нарисовано в DS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба Спасибо, сейчас попробую! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tolyaha 1 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба Ноль на CS обязательно, если АЦП рабочий, то на выходе данных (17 вывод) будет видна частота около 4 Hz (готовность данных). По умолчанию АЦП работает циклически с частотой 4Hz. Вобще, если работаеш только с одним АЦП по этим линиям связи, то можно CS навсегда запаять на ноль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tolyaha 1 26 декабря, 2011 Опубликовано 26 декабря, 2011 · Жалоба А как же это? И я снова здесь! Перекорачиваю MISO на общий, ноль появляется! Может не заметили в осциллограф? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ADEPTPS 0 28 декабря, 2011 Опубликовано 28 декабря, 2011 (изменено) · Жалоба А как же это? Может не заметили в осциллограф? Но сигнал тактирования (CLK) то отсутствует.... еще раз проверил на осциллографе Изменено 28 декабря, 2011 пользователем ADEPTPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tolyaha 1 28 декабря, 2011 Опубликовано 28 декабря, 2011 · Жалоба Но сигнал тактирования (CLK) то отсутствует.... Если точно SCK отсутствует (а не осцил неправильно настроен), то вариантов 2: - или Вы в программе кроме показанного участка порты перенастраиваете; - или пин у контроллера не работает. Если SPI чувствует FF или 00 ( при закорачивании) значит он включен и вход MISO работает. Проверте осцилом порты SCK и MOSI (PB1, PB2) настраивая их на вывод 0 (может залепуха или пробой пина). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться