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

 
 
> SPI и Atmega128A
ADEPTPS
сообщение Dec 14 2011, 08:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683



Проблема:
не получается принять данные.

В даташите есть функция настройки SPI на мастер: // в ней есль только отправка данных, пытаюсь принимать данные с SPDR, но считываю лишь то что отсылаю!

Код
void SPI_MasterInit()
{
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);//настраиваем на выход
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//вкл SPI, ведущий, частота fck/16
}
//функция передачи байта
void SPI_MasterTransmit(char cData)
{
SPDR = cData;//начинаем передачу
while(!(SPSR & (1<<SPIF)));//ждем пока передача завершится
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ADEPTPS
сообщение Dec 23 2011, 10:45
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683



Посмотрите кто-нибудь мой код, если не трудно, на мой взгляд проблема в настройке SPI:
это подпрограмма для инициализации и считывания данных с АЦП AD7792.
Помогите пожалуйста!

CODE
#include <avr/io.h>
#include <avr/delay.h>
#include <string.h>
#include <avr/sfr_defs.h>
void spi_in(void)
{
#define DDR_SPI DDRB
#define DD_SS 0
#define DD_MOSI 2
#define DD_MISO 3
#define DD_SCK 1
#define SPE 6
#define MSTR 4
#define SPR0 0
#define SPIF 7
PORTB |= (1<<DD_SCK)|(1<<DD_MOSI)|(1<<DD_MISO);
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_MISO);
DDR_SPI &= ~(1<<DD_MISO);
//SPSR |= (1<<SPI2X);
SPCR |= (1<<SPE)|(1<<MSTR);
}

uint8_t spi_rw(uint8_t Data)
{
SPDR = Data;//начинаем передачу
while((SPSR & (1<<SPIF)) == 0);//ждем пока передача завершится
Data = SPDR;
return Data;
}

//Инициализация АЦП
void ad7793_init(void)
{
int8_t i;
spi_in();
for (i = 0; i < 4;i++) spi_rw(0xFF);
/* настройка АЦП */
spi_rw(0b00010000);
spi_rw(0b00010000);
spi_rw(0b00000000);
spi_rw(0b00101000);
spi_rw(0b00000000);
/* Калибровка */
spi_rw(0b00001000);
spi_rw(0b11000000);
spi_rw(0b10000001);
_delay_ms(10);
loop_until_bit_is_clear(PORTB,DD_MISO);
spi_rw(0b00001000);
spi_rw(0b10100000);
spi_rw(0b10000001);
_delay_ms(10);
loop_until_bit_is_clear(PORTB,DD_MISO);
}

//Установка режима работы
void ad7793_mode_set(unsigned char mode)
{
spi_rw(0b00001000);
if (mode == 0)
{
spi_rw(0b00000000);
}
else spi_rw(0b00100000);
spi_rw(0b10000001);
}

uint16_t ad7793_data_get(void)
{
uint16_t t = 0;
loop_until_bit_is_clear(PORTB,DD_MISO);
spi_rw(0x58);
*((uint8_t *)(&t) + 1) = spi_rw(0xFF);
*((uint8_t *)(&t)) = spi_rw(0xFF);
return t;
}


Цитата(usav @ Dec 16 2011, 16:21) *
А вообще, прежде чем писать (и прогу и сюда) надо хотя бы картинки в DS посмотреть!


Их я уже насмотрелся....

Сообщение отредактировал ADEPTPS - Dec 23 2011, 09:51
Go to the top of the page
 
+Quote Post
Tolyaha
сообщение Dec 23 2011, 10:55
Сообщение #3


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

Группа: Свой
Сообщений: 116
Регистрация: 2-03-07
Из: Украина
Пользователь №: 25 826



Цитата(ADEPTPS @ Dec 23 2011, 11:50) *
Посмотрите кто-нибудь мой код

То что я увидел - нужно обратить внимание на сигнал SS (слейв селект PB4) он переключает режим из мастера в слейв низким уровнем на пине, если настроен как вход, если не собираетесь переключаться, то он не должен быть входом (ниже я настроил его выходом), и для этого АЦП, если вы подключаете SCK без инвертирования я поменял фазу и полярность. Попробуйте скорректированное мной (правда смотрел по быстрому, мог ошибиться проверте по даташиту:
CODE

void spi_in(void)
{
#define DDR_SPI DDRB
#define DD_SS 0
#define DD_MOSI 2
#define DD_MISO 3
#define DD_SCK 1
#define CPOL 3
#define CPHA 2
#define SPE 6
#define MSTR 4
#define SPR0 0
#define SPIF 7
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);
}





P.S. А вобще в аврстудии есть инклюдник, описывающий все биты (m8535def.inc) или еще где можно найти и h файл с дефайнами (я думаю обязательно есть в для любой среды программирования)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ADEPTPS   SPI и Atmega128A   Dec 14 2011, 08:03
- - hd44780   SPI отсылает и принимает ОДНОВРЕМЕННО. Т.е. чтобы ...   Dec 14 2011, 08:13
- - arttab   есть такое. причем когда мастер только передает и ...   Dec 15 2011, 01:27
|- - Сергей Борщ   QUOTE (arttab @ Dec 15 2011, 03:27) есть ...   Dec 15 2011, 07:43
- - ADEPTPS   А как мне быть если ответом будет слово?   Dec 15 2011, 07:29
- - ADEPTPS   судя по последней конструкции, один байт отдали - ...   Dec 15 2011, 07:52
- - hd44780   SPI всегда и везде принимает только байты. По край...   Dec 15 2011, 09:09
- - usav   а у меня один байт отдали - слово приняли -------...   Dec 16 2011, 12:21
- - ADEPTPS   Спасибо, сейчас попробую! SPI завелся вроде, ...   Dec 23 2011, 11:04
|- - Tolyaha   Цитата(ADEPTPS @ Dec 23 2011, 13:04) Спас...   Dec 23 2011, 11:16
- - ADEPTPS   читается какая-то константа.... 12336 которая не з...   Dec 23 2011, 11:48
- - Tolyaha   Давай попорядку, проверим связь и прочитаем статус...   Dec 23 2011, 11:59
- - ADEPTPS   у меня это получается _delay_ms(5000); = 500 мс е...   Dec 23 2011, 12:09
- - Tolyaha   Попрежнему хочу проверки связи, чтением статус рег...   Dec 23 2011, 12:23
- - ADEPTPS   FF читает... значит связи нет(   Dec 23 2011, 12:35
|- - Tolyaha   Цитата(ADEPTPS @ Dec 23 2011, 14:35) FF ч...   Dec 23 2011, 12:45
- - ADEPTPS   рабочий день заканчивается, буду завтра уже дальше...   Dec 23 2011, 12:45
- - ADEPTPS   И я снова здесь! Перекорачиваю MISO на общий, ...   Dec 26 2011, 07:54
|- - Палыч   АЦП имеет ногу Chip Select (CS), которой нужно ...   Dec 26 2011, 08:09
|- - hd44780   Цитата(ADEPTPS @ Dec 26 2011, 09:54) НА M...   Dec 26 2011, 08:30
|- - Tolyaha   А как же это? Цитата(ADEPTPS @ Dec 26 2011, ...   Dec 26 2011, 11:53
|- - ADEPTPS   Цитата(Tolyaha @ Dec 26 2011, 15:53) А ка...   Dec 28 2011, 09:00
|- - Tolyaha   Цитата(ADEPTPS @ Dec 28 2011, 11:00) Но с...   Dec 28 2011, 13:31
- - ADEPTPS   да, Вы правы, а когда нужно "дрыгать"?   Dec 26 2011, 08:20
|- - Палыч   Цитата(ADEPTPS @ Dec 26 2011, 12:20) когд...   Dec 26 2011, 08:46
- - ADEPTPS   Спасибо, сейчас попробую!   Dec 26 2011, 08:49
- - Tolyaha   Ноль на CS обязательно, если АЦП рабочий, то на вы...   Dec 26 2011, 09:35
- - ADEPTPS   SPI все же не работает, поскольку на CLK весит 5В ...   Dec 26 2011, 11:38
- - ADEPTPS   CLK поймал: 1. я снимал показания раз в секунду 2....   Dec 29 2011, 08:23
|- - Tolyaha   Стоп машина, а PB1 (SCK) МК куда у Вас подключен??...   Dec 29 2011, 12:58
- - ADEPTPS   Подсоединено все правильно, так как использую отла...   Dec 29 2011, 14:14
|- - Tolyaha   Цитата(ADEPTPS @ Dec 29 2011, 16:14) ////...   Dec 30 2011, 06:41
- - ADEPTPS   Настроил внутренний источник 64кГЦ, эффект тот же,...   Dec 30 2011, 06:15
- - ADEPTPS   ЦАП и FLASH - опционально устанавливаются - ИХ НЕТ...   Dec 30 2011, 06:42
|- - Tolyaha   Тогда проверяем связь.CODE PORTB = 0xff; ...   Dec 30 2011, 07:03
- - ADEPTPS   выдает 0... АЦП что-ли накирнулось...   Dec 30 2011, 07:37
|- - Tolyaha   Цитата(ADEPTPS @ Dec 30 2011, 09:37) выда...   Dec 30 2011, 07:47
- - ADEPTPS   3 пин -0; - есть!!! 1,16 пин -1; - ест...   Jan 10 2012, 05:00
|- - Tolyaha   Цитата(ADEPTPS @ Jan 10 2012, 07:00) 15 п...   Jan 10 2012, 07:46
- - ADEPTPS   тогда придется перепаивать...   Jan 10 2012, 08:34
- - yanvasiij   Люди, если все получилось поделитесь исходниками д...   Sep 25 2013, 10:16


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:05
Рейтинг@Mail.ru


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