AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
28.10.2016, 19:02
|
|
Временная регистрация
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Работа с AD7799
Здравствуйте!
Пытаюсь разобраться как нужно работать с AD7799.
У этой микросхемы есть несколько регистров, которые в зависимости от регистра содержат в себе 8-bit, 16-bit, 24-bit.
Как записать в 8-bit регистр вроде все понятно, но как правильно записывать в 16-bit регистр?
Предполагаю что это делается как-то так:
Код:
|
PORTB &= ~(1‹‹ SPI_CS);
SPDR = 0x20; // Старший байт
while(!(SPSR & (1‹‹ SPIF)));
SPDR = 0x0A; // Младший байт
while(!(SPSR & (1‹‹ SPIF)));
PORTB |= (1‹‹ SPI_CS); |
Спасибо!
Последний раз редактировалось Mr.Denis; 28.10.2016 в 19:06.
|
|
|
|
28.10.2016, 20:44
|
|
Прописка
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
|
Re: Работа с AD7799
Не совсем так.
Запись и чтение из регистров AD7799 происходит после записи в коммуникационный регистр, который активен сразу после опускания пина /CS.
В него записывается нужное действие, а затем читается или пишется нужное количество байт, в зависимости от размера регистра.
Страница 13 Datasheet'а.
Настоятельно рекомендую перечитать.
В моём случае инициализация микросхемы выглядит так:
Код:
|
void AD7799_init(void) {
CS2_PORT &= ~cs2_adc;
SPI_Wr_Byte(0x08); // Mode register
SPI_Wr_Byte(0x00);
SPI_Wr_Byte(0x09); // 16.7Hz, 50Hz rejection -› 80db, Continuous mode
CS2_PORT |= cs2_adc;
CS2_PORT &= ~cs2_adc;
SPI_Wr_Byte(0x10); // Configuration register
SPI_Wr_Byte(0x10);
SPI_Wr_Byte(0x00); // Unipolar, 1x Gain, No Buffer, AIN1
CS2_PORT |= cs2_adc;
CS2_PORT &= ~cs2_adc;
SPI_Wr_Byte(0x5C);
}; |
|
|
|
|
28.10.2016, 21:33
|
|
Временная регистрация
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Работа с AD7799
-Alan-,
Спасибо большое за ответ!
Скажите пожалуйста, у Вас функция SPI_Wr_Byte() как реализована?
Примерно вот так:
Код:
|
void SPI_Wr_Byte(uint8_t data)
{
SPDR = data; // Передаем 8-bit
while(!(SPSR & (1‹‹ SPIF))); // Ждем окончание передачи
} |
Вы вначале в регистр SPDR записываете 8-bit, и ждете окончание передачи?
Спасибо!
|
|
|
|
28.10.2016, 21:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
|
Re: Работа с AD7799
Сообщение от Mr.Denis
|
Предполагаю что это делается как-то так:
|
Для доступа к 16-и битному регистру - правильно. Но надо учесть подробности обмена (команды, настройки и пр.) про что написал -Alan-.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
28.10.2016, 21:48
|
|
Временная регистрация
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Работа с AD7799
ForcePoint,
Сообщение от ForcePoint
|
Для доступа к 16-и битному регистру - правильно
|
Я как раз именно это и хотел уточнить!
Спасибо!
|
|
|
|
29.10.2016, 00:17
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Работа с AD7799
Сообщение от Mr.Denis
|
Пытаюсь разобраться как нужно работать с AD7799.
|
Вы к стати сказать к чему именно его подключаете? Контроллер то какой.
Кроме того обратите внимание, что сигнал выхода данных совмещен с сигналом окончания преобразования. Поэтому я бы советовал завести его на вх. прерывания и не использовать аппаратный SPI для него. По сигналу окончания в обработчике прерывания считывать результат и помещать его в кольцевой буфер для дальнейшей обработки.
|
|
|
|
29.10.2016, 01:37
|
|
Временная регистрация
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Работа с AD7799
AlexPi,
Вот как совпало), как раз зашел сюда что бы задать вопрос про RDY(окончание преобразования). Хотел спросить, стоит его на внешние прерывание вешать или нет. Зашел, а тут уже ответ готов. Спасибо!
Подскажите пожалуйста, почему не подходит аппаратный SPI?
P.S. С контроллером еще не определился, но думаю что-то типа atmega8,16,32.или 328.
|
|
|
|
29.10.2016, 08:38
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Работа с AD7799
тут есть AD7799 Generic Driver, надо заполнить функции SPI своим кодом:
https://wiki.analog.com/resources/to...renesas/ad7799
|
|
|
Сказали "Спасибо" oleg110592
|
|
|
29.10.2016, 10:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
|
Re: Работа с AD7799
Сообщение от AlexPi
|
Поэтому я бы советовал завести его на вх. прерывания и не использовать аппаратный SPI для него. По сигналу окончания в обработчике прерывания считывать результат и помещать его в кольцевой буфер для дальнейшей обработки.
|
А смысл не использовать SPI?
Если mega8/16/32 - завести сигнал и на SPI и на прерывание (если действительно нужно прерывание по готовности данных в АЦП). Если mega328 - там есть прерывание на каждом выводе (PCINT4 будет, если не путаю).
|
|
|
|
29.10.2016, 12:03
|
|
Временная регистрация
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Работа с AD7799
Здравствуйте!
Сообщение от ForcePoint
|
Если mega328 - там есть прерывание на каждом выводе (PCINT4 будет, если не путаю).
|
Не путаете.
To All,
Я тут сегодня с утра подумал подключить к МК помимо AD7799 еще и Wiznet W5500, вроде с ней работать не очень сложно.
Вот теперь думаю, смогут нормально существовать на одной SPI шине AD7799 и Wiznet W5500? Или лучше их разделить, AD7799 на программный, а Wiznet W5500 на аппаратный?
Спасибо!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:07.
|
|