Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 04.11.2016, 10:43  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от Mr.Denis Посмотреть сообщение
Вы предполагаете что после каждого сброса CS все настройки АЦП обнуляются?
Документацию на АЦП я только просматривал, а не читал. Для первого раза - надо будет все команды произвести в одном цикле CS. Потом - достаточно опрашивать статус и читать данные. Содержимое всех управляющих регистров должно сохраняться, иначе - глупость получается.

Сообщение от Mr.Denis Посмотреть сообщение
Вы могли бы мне рассказать почему именно data = lowbyte + (highbyte ‹‹ 8 )?
Если я правильно понимаю, то операция highbyte ‹‹ 8 приведет к тому что highbyte=0?
Это сдвиг содержимого highbyte на 8 разрядов влево (или - умножение на 256). Таким образом значение highbyte попадёт в старшие биты data.
Реклама:
ForcePoint вне форума  
Непрочитано 04.11.2016, 11:29  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,440
Сказал спасибо: 97
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Работа с AD7799

Сообщение от ForcePoint Посмотреть сообщение
Для первого раза - надо будет все команды произвести в одном цикле CS.
Все команды, относящиеся к одной элементарной операции (кроме режима непрерывного чтения):
1. CS = 0
2. запись регистра коммуникации
3. запись (чтение) выбранного регистра.
4. CS = 1

Сообщение от ForcePoint Посмотреть сообщение
Это сдвиг содержимого highbyte на 8 разрядов влево (или - умножение на 256). Таким образом значение highbyte попадёт в старшие биты data.
Ага, и результат нулем будет.

PHP код:
WORD  = ((unsigned int)HIGH ‹‹ 8) + LOW
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Mr.Denis (07.11.2016)
Непрочитано 04.11.2016, 11:42  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,425
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Работа с AD7799

При этой операции значение highbyte не изменяется. Просто оно сдвигается на 8 разрядов влево и записывается в старший байт 16 разрядного регистра.

Последний раз редактировалось baiderin; 16.11.2016 в 20:57. Причина: ошибка в тексте
baiderin вне форума  
Непрочитано 04.11.2016, 13:00  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,440
Сказал спасибо: 97
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Работа с AD7799

Сообщение от baiderin Посмотреть сообщение
оно сдвигается на 8 разрядов вправо и записывается в старший байт 16 разрядного регистра.
Оно сдвинется и станет 0. А потом уже запишется в старший байт.
Godzilla82 вне форума  
Непрочитано 04.11.2016, 13:40  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,879
Сказал спасибо: 2,539
Сказали Спасибо 11,808 раз(а) в 5,918 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от baiderin Посмотреть сообщение
При этой операции значение highbyte неизменяется. Прсто оно сдвигается на 8 разрядов
Какая разрядность переменной? 8 бит? Если содержимое сдвинуть на 8 В ЛЮБУЮ сторону, что останется? Вам не кажется, что перед сдвигом надо добавить разрядов?
Вот только про дефолты не надо. У кого они работают, а у кого и нет. У одного так, у другого иначе. Работу с переменными надо проводить явно, без надежды на добрый компилятор.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 04.11.2016 в 13:43.
akegor вне форума  
Сказали "Спасибо" akegor
Mr.Denis (07.11.2016)
Непрочитано 07.11.2016, 15:09  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Здравствуйте!

Вот до сих пор думаю, как лучше проверять готовность данных, считывать в регистре состояния бит RDY или же ногу DOUT/RDY параллельно завести на внешние прерывание? Вроде как с ногой DOUT/RDY более правильный вариант, но смущает что это одна нога, и как я понял CS всегда должен быть опущен. Хотя с другой стороны нет проблем опустить CS и ждать прерывания, так как у меня кроме AD7799 больше нету устройств на SPI.

Еще нашел немного информации о том, что обязательно нужно делать программную фильтрацию. Вроде как рекомендуют фильтр скользящего среднего. Вот возник вопрос, если я без фильтра хочу выводить результаты АЦП 4 раза в 1 секунду, то я должен выбрать скорость измерения 4,17 Гц? Если я хочу такую же скорость с фильтром, то тогда получается что нужно чаще производить измерения?

P.S. Жалко что железа пока нет, поэкспериментировать не на чем...(

Спасибо!
Mr.Denis вне форума  
Непрочитано 07.11.2016, 16:02  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,440
Сказал спасибо: 97
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Работа с AD7799

Сообщение от Mr.Denis Посмотреть сообщение
Вот до сих пор думаю, как лучше проверять готовность данных
Да хоть опросом соответствующего регистра. При частоте SPI 250 кГц время опроса составит около 64 мкс.
Зато получите чистый SPI, без сюрпризов.

Можно и просто состояние ноги опрашивать. Прерывание я бы не стал делать. Лишнее усложнение программы.

Сообщение от Mr.Denis Посмотреть сообщение
если я без фильтра хочу выводить результаты АЦП 4 раза в 1 секунду, то я должен выбрать скорость измерения 4,17 Гц?
Для лучшей точности - да, 4,17 Гц. А так, опрашивать можно хоть с частотой 470 Гц.

Сообщение от Mr.Denis Посмотреть сообщение
Если я хочу такую же скорость с фильтром, то тогда получается что нужно чаще производить измерения?
Нет. Просто у вас в отдельной переменной будет храниться среднее от последних 4 измерений. Вы его можете опрашивать хоть с частотой 1000 Гц, меняться оно будет всё равно с частотой 4,17 Гц.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Mr.Denis (07.11.2016)
Непрочитано 07.11.2016, 16:32  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от Mr.Denis Посмотреть сообщение
Хотя с другой стороны нет проблем опустить CS и ждать прерывания, так как у меня кроме AD7799 больше нету устройств на SPI.
Уже-ж писали, что для контроля RDY надо держать CS в нуле. Так-что - что в лоб, что по лбу.
ForcePoint вне форума  
Непрочитано 14.11.2016, 21:49  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Здравствуйте!
Купил железо, собрал плату.)
Через аппаратный SPI пытаюсь считать регистр идентификатора.

Код:
    PORTB &= ~(1 ‹‹ SPI_CS);
    spi_write(0x60);
    Serial.println(spi_read()); // Serial.println(), функция Arduino Вывода в UART.
    PORTB |= (1 ‹‹ SPI_CS);
В общем выводит он мне по очереди 0x49 0x00 0x49 0x00 0x49 0x00 0x49 0x00 .... Подскажите пожалуйста какой он мне должен возвращать идентификатор? Если я правильно понял, то для AD7799 это 0xX9, но не совсем понятно что такое X, может быть это любое число?
Спасибо!
Mr.Denis вне форума  
Непрочитано 16.11.2016, 17:08  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Здравствуйте!
Помогите пожалуйста разобраться с чтением и данных, делаю вот так:
PHP код:
void main(void){

// Сбрасываю SPI AD7799 
  
PORTB &= ~(1‹‹SPI_CS);
  
SPI_WriteByte(0xff);
  
SPI_WriteByte(0xff);
  
SPI_WriteByte(0xff);
  
SPI_WriteByte(0xff);
  
PORTB |= (1‹‹SPI_CS); 

//Настраиваю регистр MOD
  
PORTB &= ~(1‹‹SPI_CS);
  
SPI_WriteByte(0x08); // Выбираю запись в регистр MOD
  
SPI_WriteByte(0x00); // Выбираю "Режим непрерывного преобразования" 
  
SPI_WriteByte(0x01); // Частота обновления 4,7Гц.
  
PORTB |= (1‹‹SPI_CS);

//Настраиваю регистр конфигурации
  
PORTB &= ~(1‹‹SPI_CS);
  
SPI_WriteByte(0x10); // Выбираю запись в регистр конфигурации
  
SPI_WriteByte(0x07); // Выбираю гейн 128, 
  
SPI_WriteByte(0x01); // Выбираю 2 канал для отслеживания
  
PORTB |= (1‹‹SPI_CS);

while(
1){

// Переменная для 24-bit значения
unsigned long result =0

  
PORTB &= ~(1‹‹SPI_CS);

 
// Считываем регистр состояния
  
SPI_WriteByte(0x40);

 
// Проверяем бит RDY готовности данных
  
if(!(SPI_Read() & 0x80)){

 
// Читаем регистр дата
  
SPI_WriteByte(0x58);

 
// Считываем первые 8 бит и записываем в переменную
  
unsigned char a SPI_Read();

 
// Считываем вторые 8 бит и записываем в переменную
  
SPI_WriteByte(0x00);
  
unsigned char b SPI_Read();

 
// Считываем третие 8 бит и записываем в переменную
  
SPI_WriteByte(0x00);
  
unsigned char c SPI_Read();

 
// Собираем все в одну переменную
   
result = ((unsigned long‹‹ 16) + ((unsigned int‹‹ 8) + c;
  }
  
PORTB |= (1‹‹SPI_CS);


Подскажите пожалуйста, правильно я делаю или нет?
Выводит непонятные данные(((

Спасибо!
Mr.Denis вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу гуру STM32 (работа за деньги!) xakez ARM 1 07.07.2016 13:44
Напряжённая работа Roshens Отвлекитесь, эмбеддеры! 8 01.09.2010 23:08


Часовой пояс GMT +4, время: 14:59.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot