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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

ELcat писал(а):... Это чтобы человек умел выстраивать свои мысли в виде связанных и понятных окружающим логических цепочек вместо непонятной "каши в голове".

Тут, к сожалению (или к счастью) ромбики не помогут. Этим ведают интеллект&&образование.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Извините,но все таки я не отступлюсь. Может так наглядней будет? См. архив.
Вложения
МАССИВ,ЕЕПРОМ.rar
(33.7 КБ) 164 скачивания
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Ну так идти по массиву и сравнивать с переменной, если совпало - начинать перечисления. Или я чего-то недогоняю?
«И всё-таки она вертится!»
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Дело втом,что я не знаю как это написать на си. Пробовал несколько раз,находил нужный элемент,а дальше него массив перечисляться не хотел.
Я ж всетаки начинающий. Ни бум бум ваще. Я только знаю циклы if-else,while и как функцию вызвать. Поэтому и спрашиваю вас как спецов,а вы блин чуть ли не в душу г...ть... Да и в книжках не совсем понятно написано,уж извините,институтов не заканчивал.
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение Marchello »

Ох как мне знакома сия ситуация, когда обращаешься к спецам за помощью, за подсказкой, а тебя как щенка за шкиряк и за учебники сажают! Хотя достаточно просто на пальцах рассказать или привести пример!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Marchello, дак приведите, в чём проблема ?
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение Marchello »

)))))) С огромным удовольствием помог, только я сам в этом деле новичек! Всего две недели как в процессе изучения! Сижу вот самоучители штудирую! Но над вашей проблемкой подумаю!
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Извините за некорректные вопросы.
Последний раз редактировалось eduardo Ср фев 06, 2013 20:50:43, всего редактировалось 1 раз.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

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

P.S.
eduardo писал(а):Дело втом,что я не знаю как это написать на си

CVAVR это пародия на Си.
«И всё-таки она вертится!»
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

И не делайте вот так:

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

if(PIND.1==1)      // если нажать кнопку PIND.1 состояние PORTB присваивается переменной
{b=PORTB;}         // b,объявленной в еепром
Иначе ваш еепром будет дохнуть быстрее, чем вы будете догадываться об этом :))
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Аlex писал(а):Иначе ваш еепром будет дохнуть быстрее, чем вы будете догадываться об этом :))
Это точно :beer: , нужно, хотябы, проверять значение, и если оно другое, тогда писать.
«И всё-таки она вертится!»
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Не совсем понятно изложен вопрос, столько человек прочитало и не поняли.
Вам нужно определить номер элемента, в котором находится нужное вам число b?
Тогда в начале программы выполняем подпрограмму как вам указывали ранее
Вот применительно к вашей ситуации.

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

char number_of_element(unsigned char etalon,unsigned char arraysize,unsigned char *arr){
char i ;
    for(i=0;i<arraysize;i++)
    {
        if(arr[i] == etalon)return i;
    }
    return -1;
}

//применение 
Required_num =number_of_element(0x01,11,a) ;//Тут вернет -1(255 в системе unsigned char)
Required_num =number_of_element(0x4F,11,a) ;//Тут вернет 4 так как это четвертый элемент списка
 

Вообще я так и не понял зачем вам сохранять PORTB в EEPROM какой в этом логический смысл?
Не проще запоминать номер элемента, а постом по этому номеру искать сам элемент? Тем более элементы это числа от 0 до 9
Вот так

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

interrupt [TIM0_OVF]void timer0_ovf_isr(void)
{
c++;
if(
c>=255)
{
f=1;
if(
d>=11)d=0;
mig=~mig;
}}

if(
PIND.0==1)&&(f==1)      //если кнопка PIND.0 нажата,начинается перечисление массива
{f==0;PORTB=a[d++];}      //после отпускания кнопкиPIND.0 состояние PORTB остается таким,каким было на момент отпускания

if(PIND.1==1)      // если нажать кнопку PIND.1 состояние PORTB присваивается переменной
{b=d;}         // b,объявленной в еепром
 


Вообще решение задачи в коллективе приходит быстрее, если условия знают несколько человек, а не только Вы.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Хотелось,чтобы данные сохранялись после отключения питания. Ведь еер выдерживает
10000 циклов записи/стирания вроде как?
А в строке
{f==0;PORTB=a[d++];}
компилятор выдает ошибку––illegal address.
А если условие записать вот так:
if(PIND.0==1&f==1) ошибка пропадает.
А переменную f можно обявить как bit? Она ведь только два значения содержит...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

eduardo писал(а):компилятор выдает ошибку––illegal address.

:facepalm: блин забыл общие скобки в условии

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

if((PIND.0==1)&&(f==1)){      //если кнопка PIND.0 нажата,начинается перечисление массива
//Вообще можно и так : if(PIND.0&f){} смысл тот же,только короче
    
f=0;//очищаем флаг 
    
PORTB=a[d++];//после отпускания кнопки PIND.0 состояние PORTB остается таким,каким было на момент отпускания
    
if(d>=11)d=0;} //Это из прерывания таймера можно убрать   

Если хочется ловить пропажу питания , это можно делать тремя способами-
первый по снижению напряжения по BOD
второй просто поставить компаратор на входе питания и отлавливать по прерыванию компаратора
третий поставить транзистор+стабилитрон на нужное напряжение на любом из входов и ждать единицы,
Изображение
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

eduardo писал(а):Хотелось,чтобы данные сохранялись после отключения питания. Ведь еер выдерживает 10000 циклов записи/стирания вроде как?.
Во первых это 100 000 циклов. Но даже такого количества, если их дёргать 1 раз в минуту, хватит лишь на полгода (лично проверено!).

Во вторых:
eeprom unsigned char b; // при прошивке МК в переменную изначально записано 0х00

После стирания хоть Flash, хоть EEPROM, в стёртых ячейках всегда 0xFF - это особенность тех структур, на которых сделана память. Ровно так же и Fuse-биты 1-не запрограммировано, 0-запрограммировано.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Но я вовсе не собираюсь каждую минуту записывать/стирать еер. Один раз записал,а потом только чтение. Перезапись делать только по мере надобности. Или читать еер каждую минуту тоже не рекомендуется?
Последний раз редактировалось eduardo Чт фев 07, 2013 10:56:20, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Или так тоже нельзя?
Так нужно делать(!) - запись делать только по мере необходимости.
Можно после записи проверять записанную информацию чтением. Если прочиталось неправильно - меняем ячейки (адреса еепрома) и работаем дальше с ними.
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Чтение - неограниченное количество циклов. Просто при перезаписи на стираемые ячейки подаётся очень высокое напряжение порядка 24-28В, которое "сгоняет" электроны с "ловушек" затворов МНОП структур. Понятное дело, что электроны ускоряются до приличных скоростей в микроскопических объёмах, греют изоляционный слой и вызывают его деградацию.
Я, когда ещё только начинал осваиваться с АВР, сделал часы-будильник на Тини2313. И очень уж мне хотелось, чтобы при случайном пропадании питания не сбивалось время. Вот и дописал в код, чтобы при каждой смене минут значения часов и минут заносились в EEPROM. Посмотрел в даташит - 100тыс. циклов, ну, подумал, это как на наши изделия - гарантируют не менее, а в реальности на 1-2 порядка больше. Через примерно полгода часы начали "вспоминать" полную хрень - получился такой себе генератор случайных чисел или "аппаратный рандомайзер". Таким образом наработка составила около 250-300тыс. циклов.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Apparatchik писал(а):CVAVR это пародия на Си.


Не могли бы в двух словах обозначить,отсутствие каких функций или типов данных Вас расстраивает CVAVR?
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

Да человек сам не понимает о чем говорит.
Apparatchik писал(а):Вот только что проверил CVAVR 1.25.9 если объявить переменную не в начале функции, а непосредственно перед циклом, компилятор дает ошибку must declare first in block. В GCC конечно таких проблем нету.
и продолжение...
Apparatchik писал(а):Я понял, но в Eclipse я могу её объявить где захочу.
Ответить

Вернуться в «AVR»