Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
ilja123
43 / 43 / 6
Регистрация: 24.12.2009
Сообщений: 443
1

SPI в Atmega328

29.07.2018, 09:10. Просмотров 233. Ответов 2
Метки нет (Все метки)

Помогите разобраться с SPI! Схему собрал и проверил загрузив Ардуиновский код - все работает. А вот без библ. Ардуины не получается.

Делал, как везде пишут:

Настройка:

C
1
2
3
4
5
6
7
void SPI_Init(void){
    
    DDRB |= (1<<PB2) | (1<<PB3) | (1<<PB5);// MOSI, SCK, SS as out
    PORTB |= (1<<PB2);// set SS to 1
    
    SPCR |= (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0);
}
Передача байта:

C
1
2
3
4
5
6
7
8
9
void SPI_Send_byte(char data){
    
    PORTB &= ~(1<<PB2);// set SS to 0
    
    SPDR = data;// record data to SPDR
    while(!(SPSR & (1<<SPIF)));// wait SPIF
    
    PORTB |= (1<<PB2);// set SS to 1
}
Смотрел в отладчике SPDR = data почему-то SPDR значение показывает 0. Так и должно быть?
В общем не работает. Как исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2018, 09:10
Ответы с готовыми решениями:

Фьюзы atmega328
Долгое время игрался с ардуино(otmyko328). Сейчас решил углубиться в изучение...

Atmega328-PU прошить
Собрал намедни ардуино совместимую плату с Atmego328-PU. При прошивке его...

ATmega328 и proteus
Привет, только начал осваивать proteus, сделал схему ATmega328 + LED. void...

UART (ATMega328)
Добрый день всем. Я не могу добиться нормальной работы UART Atmega 328p. (Для...

Начало работы с atmega328
Здравствуйте, помогите подобрать программатор для прошивки otmyko328P....

2
ilja123
43 / 43 / 6
Регистрация: 24.12.2009
Сообщений: 443
30.07.2018, 05:30  [ТС] 2
Заработало! Оказывается, зачем-то, нужно было обязательно вставить команду return SPDR в ф-ию SPI_Send_byte. А без этого никак... Во как
0
COKPOWEHEU
1206 / 861 / 201
Регистрация: 09.09.2017
Сообщений: 3,698
30.07.2018, 10:17 3
Цитата Сообщение от ilja123 Посмотреть сообщение
А без этого никак... Во как
Полагаю что не так. Чтение SPDR (не обязательно в return - можно просто в локальную переменную) сбрасывает флаг SPIF. Но подобные флаги обычно можно сбросить вручную записав туда лог.1.
Мне сейчас проверять не очень удобно, если вам не лень проверьте такие варианты
C
1
2
3
4
5
6
7
void SPI_Send_byte(char data){
    PORTB &= ~(1<<PB2);// set SS to 0
    SPDR = data;// record data to SPDR
    while(!(SPSR & (1<<SPIF)));// wait SPIF
    PORTB |= (1<<PB2);// set SS to 1
    char temp = SPDR; // <-----------------------------------
}
C
1
2
3
4
5
6
7
void SPI_Send_byte(char data){
    PORTB &= ~(1<<PB2);// set SS to 0
    SPDR = data;// record data to SPDR
    while(!(SPSR & (1<<SPIF)));// wait SPIF
    PORTB |= (1<<PB2);// set SS to 1
    SPSR |= (1<<SPIF); // <---------------------------------
}
Ну и посоветую использовать макроконстанты для выводов. Для себя я уже давно написал макросы для вот такого объявления (если хотите, скину соответствующую библиотеку, но там куча макросов, с непривычки напугает):
C
1
2
3
4
#define SPI_MISO B, 4
#define SPI_MOSI B, 3
#define SPI_SCK  B, 5
#define SPI_CS   B, 2
Для простых случаев можно обойтись таким:
C
1
2
3
4
5
6
7
8
9
10
#define CS_ON() do{ PORTB &=~(1<<PB2);}while(0)
#define CS_OFF() do{ PORTB |= (1<<PB2);}while(0)
...
char SPI_Send_byte(char data){
    CS_ON();
    SPDR = data;// record data to SPDR
    while(!(SPSR & (1<<SPIF)));// wait SPIF
    CS_OFF();
    return SPDR;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2018, 10:17

Работа с UART (ATMega328)
Всем привет. Сижу мучаю атмегу и понять не могу что не так. Мне надо сделать...

Atmega328, проблемы с АЦП
Здравствуйте, народ. Какие могут быть идеи по следующим симптомам: - всегда...

V-USB, Atmega328 и 16MHz
Здравия желаю, Имеем: Arduino pro mini 16MHz/5V Схема подключения:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru