Прошу помогите с SPI из USI на tiny85

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

Всем привет...
решил создать WAV проигрыватель на ATtiny85. Сам wav файл закидываю во внешнею eeprom AT25P1024. Она работает по протоколу SPI, но так как мой МК не подерживает хардварно этот протокол, решил сделать его софтварно. Но тут и вся загвоздка...в инете ничего толкового не нашёл. Даже написал пару строк, вроде чтото отправляется, но как получать???

Если вам не трудно и есть какие-то соображения поделитесь очень прошу...уже неделю снятся кошмары про SPI :)) :)) :))

#include <avr/io.h>
#include "util/delay.h"

uint8_t recieve;



uint8_t spi_transfer(uint8_t data) {
USIDR = data;
USISR = _BV(USIOIF); // clear flag

while ( (USISR & _BV(USIOIF)) == 0 ) {
USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC);
}
return USIDR;
}


void port_init(void)
{
DDRB |= _BV(PB1); // as output (DO)
DDRB |= _BV(PB2); // as output (USISCK)
DDRB &= ~_BV(PB0); // as input (DI)
PORTB |= _BV(PB0); // pullup on (DI)
}

int main(void)
{
port_init();

while (1)
{
recieve = spi_transfer(0x03);

};

return 0;
}
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

Dimon49773 писал(а):вроде чтото отправляется, но как получать???
Послать любой байт и прочитать регистр USIDR.
Например:
1) Посылаем инструкцию 0х03 (чтение)
2) Посылаем адрес (3 байта)
3) Посылаем 0, после посылки в USIDR - байт, который находился по заданному адресу.
Что-то вроде:

Код: Выделить всё

spi_transfer(0x03)
spi_transfer(0x12)
spi_transfer(0x34)
spi_transfer(0x56)
recieve = spi_transfer(0) ;читаем байт по адресу 0x123456
Не забываем управлять линией CS
Реклама
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

спасибо большое...
но я не пойму откуда считывать принятые данные...куда они должны записываться???
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Прошу помогите с SPI из USI на tiny85

Сообщение hybroid »

Там в регистр ты сначала пишешь 8 бит. Когда их передашь - принятые 8 бит появятся в этом же регистре. У тебя spi_transfer их вроде как возвращает даже..
Реклама
Эиком - электронные компоненты и радиодетали
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу помогите с SPI из USI на tiny85

Сообщение phanis »

я пользуюсь этим сделал по даташиту

Код: Выделить всё

unsigned char resive_byte;

resive_byte =  _FF_spi(0xFF); //отправить 255 и считать в resive_byte

uchar _FF_spi(uchar mydata)
{
      
asm("OUT    0x0F,R16");          
asm("LDI    R16,0x11");
asm("LDI    R17,0x13");

asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");
asm("OUT    0x0D,R16");
asm("OUT    0x0D,R17");

 
return (USIDR);
}
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

phanis писал(а):я пользуюсь этим сделал по даташиту
Это вариант оптимизированный для скорости. Вариант топикстартера тоже рабочий, но чуть-чуть медленнее. Вопрос правда был не в этом :wink:
Реклама
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

а uchar это что за тип?
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Прошу помогите с SPI из USI на tiny85

Сообщение hybroid »

unsigned char
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу помогите с SPI из USI на tiny85

Сообщение phanis »

unsigned char, сокращенно написал
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

unsigned char, байт короче... Потому как размер буфера USI - 8-бит.
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

просимулировал в протеусе и всёравно не читает с епрома
Вложения
osc2.JPG
(74.56 КБ) 562 скачивания
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

Во-первых, ноги SI-SO не перепутаны местами?
Во-вторых, что там передается?
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

я подключил DO к SO и DI к SI
вот весь проект
Вложения
attiny85+eeprom.rar
(143.17 КБ) 181 скачивание
usi_as_spi.rar
(138.28 КБ) 196 скачиваний
Последний раз редактировалось Dimon49773 Ср янв 18, 2012 18:04:30, всего редактировалось 1 раз.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

serial out памяти к data out МК? Хорошо, что это в симуляторе... Надо крест-накрест.
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

я вложил в протеусе файл test.bin с hex числами
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу помогите с SPI из USI на tiny85

Сообщение phanis »

можно еще spi debuger подцепить в протеусе там же где и осциллограф.
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Dimon49773 »

я нифига не понимаю
Вложения
spi.JPG
(93.17 КБ) 566 скачиваний
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

Dimon49773 писал(а):я нифига не понимаю
Мастер постоянно шлет 0x22, слейв не отвечает, (линия в HI-Z состоянии)
Сделайте по человечески, как в даташите нарисовано:
В начале держите CS в "1". Перед передачей опустите в "0". Передайте 0x03, затем 3 байта адреса, затем еще один любой байт. Верните CS в "1". В дебаггере возможно не отобразится (если в памяти действительно одни 0xFF), но по осциллографу должно быть видно, что память ответила.
Последний раз редактировалось Engineer_Keen Ср янв 18, 2012 18:13:30, всего редактировалось 1 раз.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Мастер Ломастер »

извините, что встряваю с офтопиком: ну и убожище этот USI!!! просто невероятное убожище!
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помогите с SPI из USI на tiny85

Сообщение Engineer_Keen »

Да ладно, нормальный костыль. Все же лучше чем полностью софтовый SPI.
Собственно от полноценного SPI он только и отличается тем, что ему нужно клок руками дергать, а на это процессорное время расходуется.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»