Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PIC18F4620 пишет в EEPROM или нет, ??? 
:(
    Опции темы
iPlay
Дата 20.2.2011, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Есть схемка не большая которая с каждым тактом генерирует 8192 раза нолик или единичку, эта схемка подключена к микроконтроллеру PIC18F4620, задача на МК запомнить эти 8192 бита(ну и потом передать по сети, эту задачу еще не решал, может скорее всего перейду потом на PIC18 c Ethernet). Вообщем пишу программку под МК чтобы запомнить биты, которые приходят на ножку RA0.
Код

#include <htc.h>
#include "delay.c"
#define SIZE 8192

void main(void)
{
    int pMap[SIZE];
    //bdata int pMap[SIZE];
    TRISA = 0xff;
    TRISB = 0x00;
    
    for(int i=1;i<=SIZE;i++)
    {
        DelayMs(250);
        eeprom_write(i,RA0);
    }
    while(1)
    {
    }
}

Открываю в отладчике MPLAB чтобы посмотреть EEPROM, а там вот что!

Подумал что в EEPROM не произошла запись, написал код по проще:
Код

void main(void)
{
    TRISA = 0xff;
    TRISB = 0x00;

    eeprom_write(0x0A,3);

    if (eeprom_read (0x0A) == 3)
    { 
        RB0=0;
    }
    
    while(1)
    {
    }
}

Моделирую в Proteus, работает, на ножке RB0 появляется нолик, если указать нужный адрес и число. То есть в память пишет. Открываю отладчик EEPROM опять ничего  smile  smile 

Как быть? Я теперь просто не знаю пишет ли мой цикл, в коде выше, данные в eeprom или нет, думал вывести на LCD посмотреть, я еще пока с LCD не умею работать.

Это сообщение отредактировал(а) iPlay - 20.2.2011, 10:01
PM MAIL   Вверх
iPlay
Дата 20.2.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Может я не правильно EEPROM просматриваю в MPLAB???

Это сообщение отредактировал(а) iPlay - 20.2.2011, 11:42
PM MAIL   Вверх
iPlay
Дата 20.2.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Проблема оказывается в том что я не могу считать значение с ножки RA0. Скрин Прошлый пример проверил в память, в EEDATA регистр и EEADR пишется отлично, почему ничего нету в окне EEPROM не понятно, может не правильно схему собрал. Но всё таки я что не правильно считываю с RA0???

Это сообщение отредактировал(а) iPlay - 20.2.2011, 14:27
PM MAIL   Вверх
iPlay
Дата 20.2.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



И так всё по правил до вот такого вида
Код

#include <htc.h>
#include "delay.c"
#define SIZE 10

void init(void);

void main(void)
{
    init();

    for(int i=0;i<=9;i++)
    {
        DelayMs(200);
        eeprom_write(i,RB0);    
    }

    while(1)
    {
    }
}

void init(void)
{
    GIE=1; 
    IPEN=0;

    T1CON=0x81;        /* Timer 1 needs to be activated */
    TMR1IE=0;        /* No interrupts are associated with timer 1 */

    ADCON1=0x0F;    /* Set relevant port pins to digital mode, rather than analog */
    
    TRISA=0;        /* initially ports will be in output mode to display test pattern */
    TRISB=0xFF;        /* PORTB must be set as input so that the interrupts are possible */
}


В результате работы, все отлично заносится  в регистры EEDATA и EEADR, только во окно EEPROM в MPLAB до сих пор показывает что в eeprom ничего нет, может я чёто не так делаю?
PM MAIL   Вверх
UniBomb
Дата 21.2.2011, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



iPlay, по заданному вопросу я ответить увы не смогу, т.к. с пиками никогда не работал и этот ваш MPLAB в глаза не видел. Но пару замечаний есть:

1. EEPROM очень капризная штука, поэтому записывать в эту память надо как можно реже. А вот читать можно сколько угодно раз. Поэтому перед записью делайте проверку - если в нужной ячейке хранится тоже самое значение, что вы хотите записать, то можно не записывать.


Код

for(int i=0;i<=9;++i)
{
    DelayMs(200);
    if(eeprom_read (i) != RB0)
        eeprom_write(i,RB0);    
}


К тому же это позволит сэкономить чуток времени, т.к. операция записи в EEPROM длится довольно долго.

2. Если данные приходят извне и с ними надо работать оперативно, то незачем их сохранять в EEPROM. 

3. Если верить описанию на ваш мк, то EEPROM у него всего 1024 байта. Вы же хотите записать в него в восемь раз больше.

4. Освойте логические побитовые операции. Сейчас вы храните каждый бит в одном байте, что является крайне избыточным вариантом. Такой массив даже в RAM не поместиться. Зато эти данные можно уложить в 1024 байта, что уже более-менее приемлимо. 

Это сообщение отредактировал(а) UniBomb - 21.2.2011, 09:19
PM MAIL ICQ Skype   Вверх
UniBomb
Дата 21.2.2011, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Ещё пачка замечаний:

1. Вы как-то должны отлавливать момент начала генерирования этих самых 8192 ноликов и единичек, иначе вы рискуете считать мусор.

2. Непонятно также что такое "с каждым тактом генерирует 8192 раза нолик или единичку". Такт - это время между двумя импульсами генератора, соответственно за один такт максимум можно выдать только одно значение. Может быть имелось в виду за какое-то определённое время?

3. Также вызывает сомнение участок кода, когда происходит захват значения и запись его в EEPROM:

Код

    for(int i=1;i<=SIZE;i++)
    {
        DelayMs(250);
        eeprom_write(i,RA0);
    }


Получается, что вы захватываете значение с частотой 4 раза в секунду. Что ну никак не вяжется с "с каждым тактом генерирует 8192 раза"  smile К тому же следует помнить, что операция записи в EEPROM тоже занимает какое-то время, которое нужно учитывать в функции "DelayMs". Задержку в этой функции условно можно выразить как 250-время_выполнения(eeprom_write).
PM MAIL ICQ Skype   Вверх
xvr
Дата 21.2.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Есть у меня подозрение, что окошко, с содержимым EEPROM, которое вы смотрите, показывает содержимое EEPROM в вашей прошивке, а не в контролере  smile 
Хотя могу и ошибаться - последний раз в MPLab ходил несколько лет назад   smile 
PM MAIL   Вверх
UniBomb
Дата 21.2.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



xvr, было бы странно, если бы среда в режиме отладки не симулировала бы EEPROM в этом своём окошке  smile 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.