реклама на сайте
подробности

 
 
> ATmega8 SPI ADS1242, Работа с SPI
URANst
сообщение Jan 21 2008, 13:04
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 83
Регистрация: 2-02-06
Пользователь №: 13 912



Пытаюсь наладить связь ATmega8 (7.3728 MHz) с ADS1242 (2.4576 MHz) по SPI (WinAVR).
Вопрос : как узнать что пришли данные от ADS1242.
Инициализирую SPI ATmega8 как мастер:
void SPI_MasterInit(void) {
// MOSI,SCK,SS на выход, MISO на вход
DDRB=0x2E;
// Включение SPI, мастер, частота /32
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1);
SPSR = (1<<SPI2X);
PORTB|=(1<<2);
void SPI_Transmit(unsigned char cData) {
/* Запуск передачи данных */
SPDR = cData;
/* Ожидание завершения передачи данных */
while(!(SPSR & (1<<SPIF)));

В документации на ADS1242 написано, что для чтения данных из регистра нужно послать команду
Encoding: 0001 rrrr xxxx nnnn (rrrr - номер первого регистра для чтения, nnnn читать колличество регистров после первого )

Читаю так:
PORTB&=(~(1<<2));//выбор чипа SS=0;
SPI_Transmit(0x10);//читать регистр с номером 0x00
SPI_Transmit(0x01);// читать 2 регистра начиная с первого
_delay_us (25);// задержка по даташиту мин. 50 Tosc(2.4576)
USART_Transmit(SPDR);//пытаюсь прочитать присланные данные
PORTB|=(1<<2);//SS выставляю в 1 для сброса
читаються то 0x00 то 0xFF
Как понять что данные о первом регистре уже пришли их нада прочитать, ну а затем соответственно и данные от второго регистра
Подскажите что не так

Сообщение отредактировал URANst - Jan 21 2008, 13:22
Прикрепленные файлы
Прикрепленный файл  ADS1242.pdf ( 404.04 килобайт ) Кол-во скачиваний: 174
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
URANst
сообщение Jan 22 2008, 08:36
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 83
Регистрация: 2-02-06
Пользователь №: 13 912



Люди подскажите что за ерунда !
#define SPI_PORT PORTB
#define SPI_DDR DDRB

#define MOSI_P PB3
#define MISO_P PB4
#define SCK_P PB5
#define SS_P PB2

#define SELECT() SPI_PORT &= ~(1 << SS_P)
#define DESELECT() SPI_PORT |= (1 << SS_P)

void SPI_init(void) {

SPI_DDR = (1 << MOSI_P)|(1 << SCK_P)|(1 << SS_P);
SPI_PORT = (1 << SS_P); // Чипселект в еденице
SPCR = (1 << SPE)|(1 << MSTR)|(1 << SPR1)|(1 << SPR0);// делим 7.3728/128
}

void RREG (void) {
if (SPDR) {};//на всякий случай сбрасываем SPIF
SELECT();// выбор чипа
SPDR = 0x1B;//команда для чтения регистра 0x0B
while(!(SPSR & (1 << SPIF)));
SPDR = 0x00;// читаем колличество регистров 1 + 0x00
while(!(SPSR & (1 << SPIF)));
_delay_us(50);// задержка по даташиту 50 Tosc (2.4576)
SPDR = 0xAA;//записываем что бы прочитать
while(!(SPSR & (1 << SPIF)));
SPI_buf = SPDR;// читаем содержимое регистра 0x0B
USART_Transmit(SPI_buf); посылаем значение по RS 232
DESELECT(); //выключаем чим ведомый
}

После этого принимаю постоянно разные значения
UART налажен нармально - до этого тестился.
CPU_cloc 7.3728
baund rate 9600
UBBR 47

Посоветуйте что нить, а то уже сил нет !
Go to the top of the page
 
+Quote Post
Master
сообщение Jan 22 2008, 11:16
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(URANst @ Jan 22 2008, 11:36) *
...
После этого принимаю постоянно разные значения
UART налажен нармально - до этого тестился.
CPU_cloc 7.3728
baund rate 9600
UBBR 47

Посоветуйте что нить, а то уже сил нет !
Во-первых, научитесь при создании сообщения вставлять исходный текст с помощью соответствующей кнопки (#) - она ведь для этого и создана.
Во-вторых, приведите полный исходник. В данном случае не понятно, что делается в main().
В-третьих, убедитесь сами (а не предлагайте другим считать делители) раз и навсегда, что данные по UART'у передаются корректно: киньте посылку из разных байт и проверьте её приём на другом конце (можете дополнительно сделать это в цикле).
Ну и в-четвёртых, а какие собственно разные данные приходят от ADS1242?

P.S. Для корректности ставьте DESELECT по окончании работы с SPI.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- URANst   ATmega8 SPI ADS1242   Jan 21 2008, 13:04
- - Master   Цитата(URANst @ Jan 21 2008, 16:04) ... P...   Jan 21 2008, 15:31
- - URANst   ЦитатаSPI_Transmit(0xAA); //На самом деле, неважно...   Jan 21 2008, 17:29
- - Aesthete Animus   2URANst Я полагаю, что должно быть так: Код#incl...   Jan 21 2008, 18:27
- - URANst   До чтения данных оцифровки я еще не дошел (комманд...   Jan 21 2008, 19:17
- - Aesthete Animus   2URANst Вот я попытался изобразить функции чтения/...   Jan 21 2008, 20:11
- - URANst   Выкладываю полный текст программы. После прихода к...   Jan 22 2008, 13:28
- - Aesthete Animus   Цитата(URANst @ Jan 22 2008, 16:28) Выкла...   Jan 22 2008, 15:03
|- - aesok   Цитата(Aesthete Animus @ Jan 22 2008, 18...   Jan 22 2008, 15:30
- - proba   исползую ADS1243 ( 2,43MHz) с Mega16 ( 4,0MHz ). ...   Jan 22 2008, 16:49
- - URANst   Уважаемый proba, что вы имели ввиду под Кодdelay ...   Jan 22 2008, 19:06
|- - aesok   Код#include <avr/delay.h> или #include ...   Jan 22 2008, 19:19
|- - Aesthete Animus   Отвечу выборочно: Цитата(URANst @ Jan 22 200...   Jan 22 2008, 19:30
- - proba   переписал в более пoнятныи формат. в даташите там...   Jan 22 2008, 19:19
|- - aesok   Цитата(proba @ Jan 22 2008, 22:19) { unsi...   Jan 22 2008, 19:23
- - proba   Цитата(aesok @ Jan 22 2008, 23:23) Этот к...   Jan 23 2008, 08:48
- - URANst   КодНаписал вот такой код: #include <avr/io...   Jan 23 2008, 09:18
|- - Aesthete Animus   Цитата(URANst @ Jan 23 2008, 12:18) Кодun...   Jan 23 2008, 09:34
- - URANst   Извините не удалил это функции. Я их пока не испол...   Jan 23 2008, 10:15
- - proba   Цитата(URANst @ Jan 23 2008, 13:18) Задер...   Jan 23 2008, 10:33
- - URANst   ВЫ имеете ввиду DRDY ? Поправте меня если я не пра...   Jan 23 2008, 11:35
- - mdmitry   Иногда проблемы возникают из-за инициализации SPI ...   Jan 23 2008, 20:50
- - URANst   УРААААААААА !!!!! Да действите...   Jan 24 2008, 07:13
- - URANst   Возникло еще парочку вопросов. Когда выставляю оци...   Jan 31 2008, 10:02
- - kostik2   пытаюсь работать с ads1243ipwt квару ads 4.9152, к...   Apr 19 2009, 07:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016