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

 
 
> SPI из USI на tiny85
Dimon49773
сообщение Jan 18 2012, 16:34
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 18-01-12
Пользователь №: 69 721



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

Если вам не трудно и есть какие-то соображения поделитесь очень прошу...уже неделю снятся кошмары про SPI
CODE
#include <avr/io.h>
#include "util/delay.h"

unsigned char _FF_spi(unsigned char mydata);

unsigned char _FF_spi(unsigned char mydata)
{
unsigned char temp;

USIDR = mydata;
mydata = 0x11;
temp = 0x13;

USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;

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

int main(void)
{unsigned char resive_byte;

port_init();

while(1){
_delay_ms(100);
PORTB &= 0xFF- _BV(PB3);
resive_byte = _FF_spi(0x03);
PORTB |= _BV(PB3);
}

return 0;
}


Сообщение отредактировал IgorKossak - Jan 18 2012, 21:00
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dimon49773
сообщение Jan 21 2012, 11:58
Сообщение #2





Группа: Участник
Сообщений: 12
Регистрация: 18-01-12
Пользователь №: 69 721



Добрый всем день...
вроде с спи разобрался, за что огромно благодарен... а вот с воспроизведением то звука как быть???вроде бы делаю пвм а не поёт....
может посмотрите и направите на правильный путь???
CODE
#include <avr/io.h>
#include "util/delay.h"
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/wdt.h>


unsigned int MODE = 0;

unsigned char _FF_spi(unsigned char mydata);

unsigned char _FF_spi(unsigned char mydata)
{
unsigned char temp;

USIDR = mydata;
mydata = 0x11;
temp = 0x13;

USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;

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

MCUSR = 0;
WDTCR = _BV(WDE) | 0b110;
}

void timer_init(void)
{
PLLCSR = 0b00000110; /* Select PLL clock for TC1.ck */
GTCCR = 0b01100000; /* Enable TC1.OCB as PWM out (L-ch) */
TCCR1 = MODE ? 0b01100001 : 0b00000001; /* Start TC1 with TC1.OCA is enabled as PWM out (R-ch) */
TCCR0A = 0b00000010; /* Enable TC0.ck = 2MHz as interval timer */
TCCR0B = 0b00000010;
TIMSK = _BV(OCIE0A);

}


int main(void)
{unsigned char resive_byte,count;

port_init();

while(1){
count=128;
_delay_ms(1);
PORTB &= 0xFF- _BV(PB3);
_FF_spi(0x3);
_FF_spi(0x0);
_FF_spi(0x0);
_FF_spi(0x0);
while(count--) OCR1B = _FF_spi(0xFF);
PORTB |= _BV(PB3);
}

return 0;
}


Сообщение отредактировал IgorKossak - Jan 21 2012, 19:33
Причина редактирования: [codebox]

Прикрепленные файлы
Прикрепленный файл  attiny85_eeprom_wav.rar ( 63.39 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st September 2025 - 03:44
Рейтинг@Mail.ru


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