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

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

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

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

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

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

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

 
Опции темы
Непрочитано 31.10.2016, 18:04  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от AlexPi Посмотреть сообщение
Так вот и я о том же. А делать это придется для достижения максимального разрешения АЦП. В задаче ТС на сколько я понял важно именно разрешение и точность.
Эм-м-м... Скажите, бога ради, почему разрешение и точность должно зависеть от способа определения готовности данных ПОСЛЕ ПРЕОБРАЗОВАНИЯ. Как я уже писал, единственный случай, когда нужен аппаратный ~RDY - это режимы наивысших скоростей преобразования, дабы по прерыванию (а часто и с помощью DMA) автоматически заполнять буфер измерений, не отвлекая процессор. А разрешение и точность зависят прежде всего от установленной скорости преобразования и коэффициента усиления PGA, при этом безразлично, каким способом опрашивается АЦП.

Даташит в помощь:
Нажмите на изображение для увеличения
Название: 2016-10-31_17-02-57.png
Просмотров: 0
Размер:	130.8 Кб
ID:	104172

To TC: всегда лучше использовать аппаратный узел (SPI, I2C, UART), если они есть, конечно.
Реклама:

Последний раз редактировалось varostov; 31.10.2016 в 18:08.
varostov вне форума  
Сказали "Спасибо" varostov
ForcePoint (31.10.2016)
Непрочитано 31.10.2016, 18:55  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от varostov Посмотреть сообщение
To TC: всегда лучше использовать аппаратный узел (SPI, I2C, UART), если они есть, конечно.
Спасибо за совет, безусловно аппаратный, есть аппаратный! Но решил попробовать разобраться с программным SPI.

Godzilla82,
Спасибо!

Посмотрите пожалуйста, код в котором вроде как учтены временные рамки рекомендованные в даташите и режим работы SPI:

Код:
void spi_putchar(unsigned char c)
{
unsigned char i;

delay_us(10);  
PORTB &= ~(1 ‹‹ SPI_CS);

for(i=8; i; i--)
  {

 PORTB &= ~(1 ‹‹ SPI_SCLK);
  delay_us(100);

  if(c & 0x80)    PORTB |=  (1 ‹‹ SPI_DOUT);
  else            PORTB &= ~(1 ‹‹ SPI_DOUT);
  
  PORTB |= (1 ‹‹ SPI_SCLK);
  delay_us(100);
  c ‹‹= 1;
  
   }
PORTB |= (1 ‹‹ SPI_CS);
}
Спасибо!
Mr.Denis вне форума  
Непрочитано 31.10.2016, 21:21  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Изменил код, посмотрите пожалуйста, может вот так правильнее?
Код:
void spi_putchar(unsigned char c)
{
  unsigned char i;

  delay_us(10);  
  PORTB &= ~(1 ‹‹ SPI_CS);

  for(i=8; i; i--)
  {

  PORTB &= ~(1 ‹‹ SPI_SCLK);

  if(c & 0x80)    PORTB |=  (1 ‹‹ SPI_DOUT);
  else            PORTB &= ~(1 ‹‹ SPI_DOUT);

  delay_us(100);

  PORTB |= (1 ‹‹ SPI_SCLK);


  delay_us(100); 


  c ‹‹= 1;
  }
PORTB |= (1 ‹‹ SPI_CS);
}
Спасибо!

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

Обычно по фронту CLK происходит считывание данных (кстати, по какому?). То есть, менять состояние CLK надо после установки данных.

Задержка после спада CS не нужна.

В вашем варианте без передачи данных линия CLK находится в 1. Это правильно?

В даташите максимальная частота SPI 5 Мгц. При задержках 100 мкс частота получается 5 кГц.

Последний раз редактировалось Godzilla82; 31.10.2016 в 21:49.
Godzilla82 вне форума  
Непрочитано 31.10.2016, 21:53  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от Godzilla82 Посмотреть сообщение
Обычно по фронту CLK происходит считывание данных (кстати, по какому?)
Вот что нашел на просторах интернета (Не реклама!): http://avr.ru/ready/signal/dacnadc/ad7799

Сообщение от Godzilla82 Посмотреть сообщение
При задержках 100 мкс частота получается 5 кГц.
100 мкс, тоже взял из даташита. Если я правильно понял, то 100 это минимальная ширина импульса который должен быть. Это написано на 6 странице.

Сообщение от Godzilla82 Посмотреть сообщение
В вашем варианте без передачи данных линия CLK находится в 1. Это правильно?
Если режим работы SPI MODE 3, то теоретически правильно.

З.Ы. Сталкиваюсь с SPI, и тем более программным в первые.

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

Сообщение от Mr.Denis Посмотреть сообщение
Вот что нашел на просторах интернета
Ну это только самому проверять.

Сообщение от Mr.Denis Посмотреть сообщение
100 это минимальная ширина импульса
Между мкс и нс - разница три порядка.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Mr.Denis (01.11.2016)
Непрочитано 01.11.2016, 00:40  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Сообщение от Godzilla82 Посмотреть сообщение
В даташите максимальная частота SPI 5 Мгц. При задержках 100 мкс частота получается 5 кГц.
Вы этот вывод сделали из значения минимальной ширины импульса равной в 100 нс, или нашли где написанно?

Сообщение от Godzilla82 Посмотреть сообщение
Ну это только самому проверять.
Буду пробывать, железа пока нет, но думаю в ближайшее время появится, а пока буду пробывать теорию понять.

Сообщение от Godzilla82 Посмотреть сообщение
Между мкс и нс - разница три порядка.
Вот это я и проморгал, спасибо огромное за то, что открыли глаза!)

Завтра попробую написать функцию приема данных.

Спасибо!
Mr.Denis вне форума  
Непрочитано 01.11.2016, 16:59  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

Здравствуйте!
Написал функцию приема данных. Посмотрите пожалуйста:
Код:
unsigned char spi_read(void)
{
unsigned char i, data=0;
for(i=0; i‹8; i++)
   {
   data ‹‹= 1; 
   PORTB &= ~(1 ‹‹ SPI_SCLK);
   if (PINB4 == 1) { data |= 0x01;}
   delayMicroseconds(10);
   PORTB |= (1 ‹‹ SPI_SCLK);
   delayMicroseconds(10);
   }
   return data;
}
Это похоже на правду?

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

Сообщение от Mr.Denis Посмотреть сообщение
Это похоже на правду?
Не совсем.
Код:
unsigned char spi_read(void)
{
unsigned char i, data=0;
for(i=0; i‹8; i++)
   {
   data ‹‹= 1; 
   PORTB &= ~(1 ‹‹ SPI_SCLK);
   if (PINB4 == 1) { data |= 0x01;} // Перенести собственно чтение отсюда...
   delayMicroseconds(10);
   PORTB |= (1 ‹‹ SPI_SCLK);
   if (PINB4 == 1) { data |= 0x01;} // ... вот сюда.
   delayMicroseconds(10); // Ну и обе задержки - совершенно конские
   }
   return data;
}
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
Mr.Denis (01.11.2016)
Непрочитано 01.11.2016, 17:54  
Mr.Denis
Временная регистрация
 
Регистрация: 24.08.2010
Сообщений: 74
Сказал спасибо: 41
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Mr.Denis на пути к лучшему
По умолчанию Re: Работа с AD7799

ForcePoint,
Спасибо!

To ALL,

Получается 2 функции:
Запись
Код:
void spi_write(unsigned char c)
{
unsigned char i;
for(i=8; i; i--)
  {
  PORTB &= ~(1 ‹‹ SPI_SCLK);
  delayMicroseconds(2);
  if(c & 0x80)    PORTB |=  (1 ‹‹ SPI_DOUT);
  else            PORTB &= ~(1 ‹‹ SPI_DOUT);
  PORTB |= (1 ‹‹ SPI_SCLK);
  delayMicroseconds(2); 
  c ‹‹= 1;
  }
}
Чтение
Код:
unsigned char spi_read(void)
{
unsigned char i, data=0;
for(i=0; i‹8; i++)
   {
   data ‹‹= 1; 
   PORTB &= ~(1 ‹‹ SPI_SCLK);
   delayMicroseconds(2);
   PORTB |= (1 ‹‹ SPI_SCLK);
   if (PINB4 == 1) { data |= 0x01;}
   delayMicroseconds(2);
   }
   return data;
}
И работаю я сними так:
Код:
// Передать 8-bit
PORTB &= ~(1 ‹‹ SPI_CS);
spi_write(0x80);
PORTB |= (1 ‹‹ SPI_CS);

// Передать 16-bit
PORTB &= ~(1 ‹‹ SPI_CS);
spi_write(0x80);
spi_write(0x80);
PORTB |= (1 ‹‹ SPI_CS);

//Читать 8-bit в переменную data
PORTB &= ~(1 ‹‹ SPI_CS);
unsigned char data; 
data = spi_read();
PORTB |= (1 ‹‹ SPI_CS);

//Читать 16-bit в переменную data
PORTB &= ~(1 ‹‹ SPI_CS);
unsigned short int data;
unsigned char lowbyte, highbyte; 

lowbyte = spi_read();
highbyte = spi_read();
data = lowbyte + highbyte;
PORTB |= (1 ‹‹ SPI_CS);
Подскажите пожалуйста правильно я понимаю?
P/S. Проверить не могу, железа нет пока еще.
Спасибо!
Mr.Denis вне форума  
 

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

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

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

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

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


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


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