Например TDA7294

Форум РадиоКот • Просмотр темы - Мега8 + 24с16
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 06:02:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вс дек 23, 2012 13:45:35 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Гы....
Только сейчас вспомнил, это я этот проект перевел на С, и не закончил на асме....
Если что, вот работа с 24C64 на С, если есть понимание языка С, можно легко на асме переписать...

Тут работа с 24C64
Спойлер
Код:
//#######################################################################################################################
//#
//#    ФУНКЦИИ РАБОТЫ С ПАМЯТЬЮ 24C64
//#
//#######################################################################################################################

//ФУНКЦИЯ АДРЕСАЦИИ ПАМЯТИ 24C64 (установка внутреннего указателя)
//АРГУМЕНТ - адрес в EEPROM
void IICMemAdr (int EEAdr)
{
    do {
        IICStart ();
    }
    while (IICByteWrite (0xA0));                //писать в EEPROM

    IICByteWrite ((uint8_t) (EEAdr >> 8));        //старший байт адреса блока данных
    IICByteWrite ((uint8_t) EEAdr);                //младший байт адреса блока данных
}


//ФУНКЦИЯ ЧТЕНИЯ БАЙТА ДАННЫХ ИЗ МС 24C64
//АРГУМЕНТ - адрес байта данных в EEPROM
//ЗНАЧЕНИЕ - байт данных
char IICMemReadByte (int EEAdrRead)
{
    IICMemAdr (EEAdrRead);
    IICStart ();
    IICByteWrite (0xA1);                        //читать из EEPROM
    char temp = IICByteRead (1);                //читаем данные (без подтверждения)    
    IICStop ();
    return temp;
}


//ФУНКЦИЯ ЗАПИСИ БАЙТА ДАННЫХ В МС 24C64
//АРГУМЕНТ_1 - адрес байта данных в EEPROM
//АРГУМЕНТ_2 - байт данных
void IICMemWriteByte (int EEAdrWrite, char byte)
{
    IICMemAdr (EEAdrWrite);
    IICByteWrite (byte);                        //пишем данные    
    IICStop ();
}
                        


//ФУНКЦИЯ ЧТЕНИЯ БЛОКА ДАННЫХ ИЗ МС 24C64
//АРГУМЕНТ_1 - указатель на адрес загрузки в SRAM
//АРГУМЕНТ_2 - адрес начала блока данных в EEPROM
//АРГУМЕНТ_3 - длина блока данных
void IICMemReadData (char* pAdrLoad, unsigned int EEAdrRead, unsigned int length)
{
    IICMemAdr (EEAdrRead);                        //установка внутреннего указателя

    IICStart ();
    IICByteWrite (0xA1);                        //читать EEPROM

    while (1){

        char temp;
        if (--length)
            temp = IICByteRead (0);                //читаем данные с подтверждением
        else
            temp 
= IICByteRead (1);                //читаем данные без подтверждения (последний байт)

        *pAdrLoad++ = temp;

        if (! length){
            IICStop ();
            return;
        }
    }
}


//ФУНКЦИЯ ЗАПИСИ БЛОКА ДАННЫХ В МС 24C64
//АРГУМЕНТ_1 - указатель на адрес чтения из SRAM
//АРГУМЕНТ_2 - адрес начала блока данных в EEPROM
//АРГУМЕНТ_3 - длина блока данных
void IICMemWriteData (char* pAdrSave, unsigned int EEAdrWrite, unsigned int length)
{
    while (1){
        IICMemAdr (EEAdrWrite);
        do{
            IICByteWrite (*pAdrSave ++);        //пишем данные в цикле
            EEAdrWrite ++;
            if (-- length == 0){                //если указанная длина блока исчерпана - выход
                IICStop ();
                return;    
            
}
        }
        while ((char) EEAdrWrite & 0x1f);        //проверка на выход из 32-х байтной страницы
        IICStop ();
    }
}
 

Тут процедуры IIC
Спойлер
Код:
//#######################################################################################################################
//#
//# ФУНКЦИИ ОБСЛУЖИВАНИЯ ИНТЕРФЕЙСА I2C (софтовый вариант)
//#
//#######################################################################################################################

//задержка 2 микросекунды для формированя временных задержек IIC
NOINLINE void Delay2Mks (void)
{
    _delay_us (2);
}


//ФУНКЦИЯ ФОРМИРОВАНИЯ СОСТОЯНИЯ START ПО ИНТЕРФЕЙСУ IIC
void IICStart (void)
{
    IICDDR &= ~(IICData | IICClc);
    Delay2Mks();

    IICDDR |= IICData;                            //подтяжка data к нулю
    Delay2Mks();

    IICDDR |= IICClc;                            //подтяжка clc к нулю
    Delay2Mks();            
}


//ФУНКЦИЯ ФОРМИРОВАНИЯ СОСТОЯНИЯ STOP ПО ИНТЕРФЕЙСУ IIC
void IICStop (void)
{
    IICDDR |= (IICData | IICClc);
    Delay2Mks();

    IICDDR &= ~IICClc;                            //подтяжка data к нулю
    Delay2Mks();

    IICDDR &= ~IICData;                            //подтяжка clc к нулю
    Delay2Mks();            
}


//ФУНКЦИЯ ЗАПИСИ БАЙТА ПО ИНТЕРФЕЙСУ IIC
//АРГУМЕНТ - байт данных для вывода по IIC
//ЗНАЧЕНИЕ - флаг подтверждения 0 (есть подтверждение) или 1 (нет подтверждения) 
char IICByteWrite (char byte)
{
    for (char i = 0; i<8; i++)
        byte = IICBit (byte);

    byte = 0x80;                                
    return IICBit 
(byte);                        //возвращаем бит подтверждения (0-есть бит подтверждения, 1-нет)
}


//ФУНКЦИЯ ЧТЕНИЯ БАЙТА ПО ИНТЕРФЕЙСУ IIC
//АРГУМЕНТ - значение бита подтверждения (0 - есть подтверждение, 1 - нет подтверждения)
//ЗНАЧЕНИЕ - принятый байт
char IICByteRead (char bit)
{
    char byte = 0xFF;
    for (char i = 0; i<8; i++)
        byte = IICBit (byte);

    bit <<= 7;
    IICBit (bit);                                //передать значение бита подтверждения
    return byte;                                //возвращаем принятый байт
}


//ФУНКЦИЯ ЗАПИСИ\ЧТЕНИЯ БИТА ПО ИНТЕРФЕЙСУ IIC
//выводится значение старшего бита аргумента
//принятый бит возвращается в младшем бите предварительно сдвинутого влево аргумента
char IICBit (char byte)                        
{
    if (byte & 0x80)                        //выводимый бит
        IICDDR &= ~IICData;                 //вывод 1 на линию данных
    else 
        IICDDR 
|= IICData;                    //вывод 0 на линию данных
    Delay2Mks();

    IICDDR &= ~IICClc;                        //старт строб импульса
    while (! (IICPIN & IICClc)){}            //ожидание формирования строба
    Delay2Mks();

    char temp;    
    if 
(IICPIN & IICData)                    //принимаем бит
        temp = 1;
    else
        temp 
= 0;
    IICDDR |= IICClc;                        //завершить строб

    byte <<= 1;
    byte |= temp;
    return byte;
}
 


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вс дек 23, 2012 16:27:34 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
спасибо конечно!!!
но я на асме... :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вс дек 23, 2012 17:46:03 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Кстати..... а чего не пользуешся внутренней EEPROM ???.....
Размер больше нужен?....

Дык я не понял.. у тебя все проблемы решились с записью в 24C16 ?....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вс дек 23, 2012 23:03:41 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
shads писал(а):
Кстати..... а чего не пользуешся внутренней EEPROM ???.....
Размер больше нужен?....

не там готовое устройство с 24с16...
shads писал(а):
Дык я не понял.. у тебя все проблемы решились с записью в 24C16 ?....

3 дня мозг выносило.. :).. конечно заработало!!! :)


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Чт янв 10, 2013 21:29:34 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
ПРИВЕТ ВСЕМ!
есть ещё одна проблема :(
есть последовательность из 16ти тайт
вот примеры

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 = F0

35 77 E0 45 00 00 00 00 35 77 E0 45 00 00 00 00 = F0

08 00 5F AA 00 00 03 00 12 00 AB 96 00 00 2A 03 = 08

13 00 00 88 00 00 00 00 00 00 00 00 00 00 00 00 = 6B

не могу понять алгоритм подсчёта контрольной суммы! какой полином????


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Пт янв 11, 2013 11:26:04 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
Barisych писал(а):
ПРИВЕТ ВСЕМ!
есть ещё одна проблема :(
есть последовательность из 16ти тайт
вот примеры

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 = F0

35 77 E0 45 00 00 00 00 35 77 E0 45 00 00 00 00 = F0

08 00 5F AA 00 00 03 00 12 00 AB 96 00 00 2A 03 = 08

13 00 00 88 00 00 00 00 00 00 00 00 00 00 00 00 = 6B

не могу понять алгоритм подсчёта контрольной суммы! какой полином????

задача упростилась!
выяснилось что не все байты участвуют в контрольной сумме :)

00 00 00 00 00 00 00 00 = F0

35 77 E0 45 35 77 E0 45 = F0

08 00 5F AA 12 00 AB 96 = 08

13 00 00 88 00 00 00 00 = 6B


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Пт янв 11, 2013 12:18:11 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Тебе бы создать новую темку, типа: "алгоритм подсчёта контрольной суммы" ну или поискать подобную уже начатую, ато в этой помоему не совсем в тему.....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вс янв 13, 2013 14:32:59 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
Barisych писал(а):
задача упростилась!
выяснилось что не все байты участвуют в контрольной сумме :)

00 00 00 00 00 00 00 00 = F0

35 77 E0 45 35 77 E0 45 = F0

08 00 5F AA 12 00 AB 96 = 08

13 00 00 88 00 00 00 00 = 6B

кину 1000р на телефон тому кто разберётся :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Мега8 + 24с16
СообщениеДобавлено: Вт янв 22, 2013 22:12:12 
Открыл глаза

Зарегистрирован: Сб дек 17, 2011 11:02:00
Сообщений: 46
Рейтинг сообщения: 0
Barisych писал(а):
кину 1000р на телефон тому кто разберётся :)

1000р ушла AdEpT -у!!! спасибо за помощь

по 24с16 .. кому интересно спрашивайте..
пушу на асм!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y