Страница 249 из 421

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 07:24:26
pyzhman
Дайте вашу программу.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 08:21:28
pokk
Как увеличить дальность действия команды Rcall ? если тот кусок кода из за которого она не достаёт (в основном это одни функции) запихать в библиотеку это может помочь?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 08:46:15
pyzhman
rcall? CodeVision?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 08:49:41
pokk
Да
Спойлер
pokk писал(а):Начал СV ругаться на команду RCALL в ассемблере.
"Error: E:\Documents and Settings\Максим\Мои документы\Dropbox\Public\sintezator\menu\MENU+BUTT\List\ADC.asm(1815): Relative branch out of reach"

Примерно понял почему ошибка выскакивает. Команд RCALL не сильно далеко может переходить видимо сильно много кода она не достаёт.Так ? Только как от этого избавится :dont_know:
Это стало появляться после того как внёс одну функцию(свою) в главный цикл.
7. Вопрос:
Не могу понять почему появляется ошибка: "Relative branch out of reach". Компилятор начал ругаться когда я добавил в программе несколько подпрограмм
(даже если они пустые) на brne, breq?
Ответ:
Команды условных переходов brne и breq имеют "дальность работы" от -64 до +63. У Вас расстояние до метки больше, поэтому ассемблер и выдает ошибку.
Используйте RCALL и RJMP, у которых дальность действия составляет от -2047 до +2047. И не строк, а команд (слов по 2 байта).
Ошибку понял правильно только как быть. Он ругается на 4 СALL которые находятся в прерывании по AЦП а этот кусок кода находится далековато от главного цикла. их разделяют функции.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 08:58:44
pyzhman
А чем не устраивает CALL?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 09:03:08
pokk
Может и устраивает Rcall CodeVision сам наставил =))
Как ему задать что бы он CAll использовал ?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 11:17:23
Amstron
Кто нибудь объявлял переменные в еепром таким образом, как в инструкции к компилятору?
У меня не получается, говорит надо поставит точку сзапятой (;) в строке eeprom struct eeprom_structure {
Спойлер/* Global structure located in EEPROM */
eeprom struct eeprom_structure {
char a;
int b;
char c[15];
} se;
Еще раз задам вопрос: как объявлять переменные в еепром?
У меня версия компиля 2,05

Может быть последняя крякнутая версия поможет? Скажите какая есть крякнутая.
Если можно то ссылку или в личку.
Очень хочу разобраться, если получится, то обязательно здесь отпишусь!!!

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 11:46:44
pokk

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

eeprom typedef struct 
{   
     
    unsigned char   N;      
    float           CKZ;    // расчётное среднеквадратическое значение 
    unsigned char   Ky;     // коэффициент усиления
    float           CKZ_MS; // с микросхемы  среднеквадратическое значение
    char            read;   
}MYstructur;
У меня вот так вот всё нормально работает. Я так и не понял зачем там имя структуры писать.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 11:54:54
Amstron
pokk писал(а):

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

eeprom typedef struct 
{   
     
    unsigned char   N;      
    float           CKZ;    // расчётное среднеквадратическое значение 
    unsigned char   Ky;     // коэффициент усиления
    float           CKZ_MS; // с микросхемы  среднеквадратическое значение
    char            read;   
}MYstructur;
У меня вот так вот всё нормально работает. Я так и не понял зачем там имя структуры писать.
Не проканало.
Такаяже ошибка, надо точку с затятой поставит в том же месте.
К стати, компиль узнает словосочетание typedef struct - выделяет его...

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 12:29:04
pokk
Может у вас её выше не хватает?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 14:41:37
unalex

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

typedef struct
{   
	
    unsigned char   N;     
    float           CKZ;    // расчётное среднеквадратическое значение
    unsigned char   Ky;     // коэффициент усиления
    float           CKZ_MS; // с микросхемы  среднеквадратическое значение
    char            read;   
}MyStructur;

MyStructur eeprom MyEEStructur;

MyEEStructur.N = стопиццот;
MyEEStructur.CKZ = тыщатыщ;
...

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 16:11:21
Amstron
Вопщем проблема была в следующем, я сделал не совсем как в примере по руководству компиля
Спойлер/* Global structure located in EEPROM */
eeprom struct eeprom_structure {
char a;
int b;
char c[15];
} se;


я делал так, а так не работает, пишет что точку с затятой поставить надо!!!:
Спойлер/* Global structure located in EEPROM */
eeprom struct eeprom_structure {
char a = 0;
int b = 1;
char c[15];
} se;

Сейчас другая проблема:
в программе где встречаются переменные, которые я сохранил в ЕЕПРОМ, идет ругань типо эта переменная не была объявленна

Делал как в примере выше, результат такойже (undefined symbol)

Вопрос: как делать записть в переменную или массив:
У меня так:

Спойлерa = 5;
i = 5;
c = 0;

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 20:42:49
Amstron
Жаль, что из форума ни кто помочь не смог!

Проблема была решина с помощью Brown-out детектора, настроенного на 4,3 вольта.

Я сам не верил в это, что это поможет (когда мне знакомый подсказал), но помогло.

Раньше проблема выскакивала (как я уже писал) при проппажи питания на МК и следующим пуском. Я уже 50 раз выкл/вкл - РБОТАЕТ!!!

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 20:48:00
Apparatchik
А чего так кричать, ведь и так понятно что если снизить питание ниже допустимого уровня, то мк будет "творить" все что угодно, для этого и существуют даташиты, где указан диапазон питающего напряжения, ну и "детекторы".

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 27, 2013 23:02:21
ELcat
Amstron, проблема скорее всего не в детекторе провалов питания. У меня, например, МК без проблем пишут в EEPROM и при напряжении 2,8В, и даже ниже. Структурами не пользовался. Переменные обозначал как:
eeprom unsigned char/int/long/float ...;
Если присваивать им какие-то конкретные значения в самой программе, то необходимо кроме *.hex файла также прошивать и файл *.eep, который в этом случае генерируется средой.
Вам так же правильно писали и по поводу ресурса данной памяти - 100 тыс. Как-то в одном своём раннем проекте часов я заставил МК каждую минуту сохранять значение времени. Приблизительно через полгода МК начал читать из ячеек "хрень", что соответствовало наработке примерно 150 тыс. циклов.
В CV AVR версий 1.25.5 и 2.05.0 различий в этом вопросе нет.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 28, 2013 00:27:50
Amstron
Apparatchik писал(а):А чего так кричать, ведь и так понятно что если снизить питание ниже допустимого уровня, то мк будет "творить" все что угодно, для этого и существуют даташиты, где указан диапазон питающего напряжения, ну и "детекторы".
У меня в память еепром, сохраняется по нажатию кнопки. Так, что часто туда не записывается.

А глюк был , при выключении питания. Когда пропадало питание на МК, то почемуто еепром перезаписывалось чемто другим...

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 28, 2013 00:40:54
Apparatchik
Amstron писал(а):Когда пропадало питание на МК, то почемуто еепром перезаписывалось чемто другим...
Например для ATmega8A на странице 22 даташита есть рекомендации по предотвращению повреждения EEPROM
Preventing EEPROM Corruption
During periods of low VCC, the EEPROM data can be corrupted because the supply voltage is
too low for the CPU and the EEPROM to operate properly. These issues are the same as for
board level systems using EEPROM, and the same design solutions should be applied.
An EEPROM data corruption can be caused by two situations when the voltage is too low. First,
a regular write sequence to the EEPROM requires a minimum voltage to operate correctly. Second,
the CPU itself can execute instructions incorrectly, if the supply voltage is too low.
EEPROM data corruption can easily be avoided by following this design recommendation:

Keep the AVR RESET active (low) during periods of insufficient power supply voltage. This
can be done by enabling the internal Brown-out Detector (BOD). If the detection level of the
internal BOD does not match the needed detection level, an external low VCC Reset Protection
circuit can be used. If a reset occurs while a write operation is in progress, the write
operation will be completed provided that the power supply voltage is sufficient.
При работе с EEPROM нужно обязательно ставить детектор напряжения чтоб мк незаписал туда гадости когда напряжение питания станет критически низким для него (конденсаторы разряжаются медленно).

P.S. я понимаю что на английском и все такое, но можно было в даташите поискать по слову EEPROM и хотябы просмотреть с помощью переводчика.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 28, 2013 00:57:40
Amstron
ELcat писал(а):Amstron,
Если присваивать им какие-то конкретные значения в самой программе, то необходимо кроме *.hex файла также прошивать и файл *.eep, который в этом случае генерируется средой.
Я програмирую програматором, тоторый может отдельно програмировать и считывать по отдельности Main и EEPROM.
Когда я отдельно считываю EEPROM, то у меня сохраняется файл с расширением *.hex.

Зашол в папку компилятора, там есть три типа файла :

*.hex
*.eep
*.rom

Вопрос, как записать отдельно файл *.eep, если у меня програматору надо только *.hex ?
Програматор СТЕРХ 007. Очень хороший программатор.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 28, 2013 01:05:55
Apparatchik
Раз он очень хороший, то должен уметь заливать еепром. Если по какой-то причине вы не можите этого сделать, можно написать програмку, которая запишет вам нужные данные в еепром, и потом запрограмировать фьюз EESAVE, он защитит еепром при стирании мк.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 28, 2013 01:09:03
Amstron
Apparatchik писал(а):Раз он очень хороший, то должен уметь заливать еепром. Если по какой-то причине вы не можите этого сделать, можно написать програмку, которая запишет вам нужные данные в еепром, и потом запрограмировать фьюз EESAVE, он не даст стереть еепром при стирании мк.
фьюз EESAVE у меня запрограмирован. Удобно. Спрошу у разработчика по еер... Спасибо!