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

 
 
 
Reply to this topicStart new topic
> SPI Eeprom M95080+mega64
ipkin
сообщение Jun 11 2008, 19:47
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 10-07-07
Из: Магнитогорск
Пользователь №: 29 046



подскажите что не так в проге
еепром полностью записываться не хочет максимум 159байт может и меньше
вот код:
#include <mega64.h>
#include <stdlib.h>
#include <delay.h>

//Настройка регистров Mega64
void Init()
{
MCUCR=0xC0;
XMCRA=0x02;
TIMSK=0x00;
ACSR=0x80;
}

void Load()
{
static unsigned long int j;
PORTB= 0x0D;
DDRB = 0x07; // Настройка выводов порта PortB
SPCR = 0x5D; // Конфигурация SPI

for (j=0;j<1024;j++)
{
PORTB.0=0; // enable eeprom 95080
delay_ms(20);

SPDR=0x06; //Передача команды WREN (Set Write Enable Latch)
while (!(SPSR & 0x80));
PORTB.0=1;
delay_ms(20);
PORTB.0=0;

//Передача команды WRITE (Write Data to Memory Arry)
SPDR=0x02;
while (!(SPSR & 0x80));

//Передача адреса куда будем записывать (2 байта 0000h)
SPDR=0x00;
while (!(SPSR & 0x80));

SPDR=0x00+j;
while (!(SPSR & 0x80));

//Передача данных

SPDR=0x11;
while (!(SPSR & 0x80));

PORTB.0=1;
delay_ms(20);
}
}
void main(void)
{
Init();
Load();
loop:
goto loop;
}
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 11 2008, 20:23
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ipkin @ Jun 12 2008, 01:47) *
Код
    static unsigned long int j;


Если адрес - 2 байта, то достаточно unsigned int.

Цитата
Код
    //Передача адреса куда будем записывать (2 байта 0000h)
    SPDR=0x00;
    while (!(SPSR & 0x80));
    
    SPDR=0x00+j;
    while (!(SPSR & 0x80));


Вот здесь ошибка. Старший байт адреса передаётся всё время нулевой.
надо примерно так:
Код
    SPDR=j>>8;
    while (!(SPSR & 0x80));
    
    SPDR=j;
    while (!(SPSR & 0x80));


Ну и 20 миллисекунд задержки на байт данных это явно переборsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 11 2008, 20:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может я чего-то не понимаю, потому что программа не полная? Но где у вас проверка готовности EEPROM для чтения/записи после записи? Где выравнивание на границу страницы/буфера?
Go to the top of the page
 
+Quote Post
ipkin
сообщение Jun 13 2008, 06:46
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 10-07-07
Из: Магнитогорск
Пользователь №: 29 046



Цитата(AHTOXA @ Jun 11 2008, 23:23) *
Если адрес - 2 байта, то достаточно unsigned int.
Вот здесь ошибка. Старший байт адреса передаётся всё время нулевой.
надо примерно так:
Код
    SPDR=j>>8;
    while (!(SPSR & 0x80));
    
    SPDR=j;
    while (!(SPSR & 0x80));


Ну и 20 миллисекунд задержки на байт данных это явно переборsmile.gif

АНТОХА большое спасибо действительно поправил как ты сказал всё завелось.
я только начинаю на Си подумал что автоматом старший байт будет инкрементироваться учусь
ещё раз спасибо за подсказку.
Go to the top of the page
 
+Quote Post

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

 


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


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