Тут, к сожалению (или к счастью) ромбики не помогут. Этим ведают интеллект&&образование.ELcat писал(а):... Это чтобы человек умел выстраивать свои мысли в виде связанных и понятных окружающим логических цепочек вместо непонятной "каши в голове".
CodeVision AVR в вопросах и ответах
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: CodeVision AVR в вопросах и ответах
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Реклама
Re: CodeVision AVR в вопросах и ответах
Извините,но все таки я не отступлюсь. Может так наглядней будет? См. архив.
- Вложения
-
- МАССИВ,ЕЕПРОМ.rar
- (33.7 КБ) 164 скачивания
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
Ну так идти по массиву и сравнивать с переменной, если совпало - начинать перечисления. Или я чего-то недогоняю?
«И всё-таки она вертится!»
Re: CodeVision AVR в вопросах и ответах
Дело втом,что я не знаю как это написать на си. Пробовал несколько раз,находил нужный элемент,а дальше него массив перечисляться не хотел.
Я ж всетаки начинающий. Ни бум бум ваще. Я только знаю циклы if-else,while и как функцию вызвать. Поэтому и спрашиваю вас как спецов,а вы блин чуть ли не в душу г...ть... Да и в книжках не совсем понятно написано,уж извините,институтов не заканчивал.
Я ж всетаки начинающий. Ни бум бум ваще. Я только знаю циклы if-else,while и как функцию вызвать. Поэтому и спрашиваю вас как спецов,а вы блин чуть ли не в душу г...ть... Да и в книжках не совсем понятно написано,уж извините,институтов не заканчивал.
Re: CodeVision AVR в вопросах и ответах
Ох как мне знакома сия ситуация, когда обращаешься к спецам за помощью, за подсказкой, а тебя как щенка за шкиряк и за учебники сажают! Хотя достаточно просто на пальцах рассказать или привести пример!
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Marchello, дак приведите, в чём проблема ?
Re: CodeVision AVR в вопросах и ответах
)))))) С огромным удовольствием помог, только я сам в этом деле новичек! Всего две недели как в процессе изучения! Сижу вот самоучители штудирую! Но над вашей проблемкой подумаю!
Re: CodeVision AVR в вопросах и ответах
Извините за некорректные вопросы.
Последний раз редактировалось eduardo Ср фев 06, 2013 20:50:43, всего редактировалось 1 раз.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
При нажатии кнопки считайте из еепром в переменную, в цикле идите по массиву и сравнивайте значения с переменной, если значения совпадут сразу выходите из цикла с запоминанием индекса и вот с этого индекса и начинайте перечисление.
P.S.
P.S.
CVAVR это пародия на Си.eduardo писал(а):Дело втом,что я не знаю как это написать на си
«И всё-таки она вертится!»
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
И не делайте вот так:Иначе ваш еепром будет дохнуть быстрее, чем вы будете догадываться об этом 
Код: Выделить всё
if(PIND.1==1) // если нажать кнопку PIND.1 состояние PORTB присваивается переменной
{b=PORTB;} // b,объявленной в еепром- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
Это точноАlex писал(а):Иначе ваш еепром будет дохнуть быстрее, чем вы будете догадываться об этом
«И всё-таки она вертится!»
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Не совсем понятно изложен вопрос, столько человек прочитало и не поняли.
Вам нужно определить номер элемента, в котором находится нужное вам число b?
Тогда в начале программы выполняем подпрограмму как вам указывали ранее
Вот применительно к вашей ситуации.
Вообще я так и не понял зачем вам сохранять PORTB в EEPROM какой в этом логический смысл?
Не проще запоминать номер элемента, а постом по этому номеру искать сам элемент? Тем более элементы это числа от 0 до 9
Вот так
Вообще решение задачи в коллективе приходит быстрее, если условия знают несколько человек, а не только Вы.
Вам нужно определить номер элемента, в котором находится нужное вам число 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 так как это четвертый элемент списка
Не проще запоминать номер элемента, а постом по этому номеру искать сам элемент? Тем более элементы это числа от 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,объявленной в еепром
Re: CodeVision AVR в вопросах и ответах
Хотелось,чтобы данные сохранялись после отключения питания. Ведь еер выдерживает
10000 циклов записи/стирания вроде как?
А в строке
{f==0;PORTB=a[d++];}
компилятор выдает ошибку––illegal address.
А если условие записать вот так:
if(PIND.0==1&f==1) ошибка пропадает.
А переменную f можно обявить как bit? Она ведь только два значения содержит...
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 в вопросах и ответах
eduardo писал(а):компилятор выдает ошибку––illegal address.
Код: Выделить всё
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
второй просто поставить компаратор на входе питания и отлавливать по прерыванию компаратора
третий поставить транзистор+стабилитрон на нужное напряжение на любом из входов и ждать единицы,

Re: CodeVision AVR в вопросах и ответах
Во первых это 100 000 циклов. Но даже такого количества, если их дёргать 1 раз в минуту, хватит лишь на полгода (лично проверено!).eduardo писал(а):Хотелось,чтобы данные сохранялись после отключения питания. Ведь еер выдерживает 10000 циклов записи/стирания вроде как?.
Во вторых:
После стирания хоть Flash, хоть EEPROM, в стёртых ячейках всегда 0xFF - это особенность тех структур, на которых сделана память. Ровно так же и Fuse-биты 1-не запрограммировано, 0-запрограммировано.eeprom unsigned char b; // при прошивке МК в переменную изначально записано 0х00
Re: CodeVision AVR в вопросах и ответах
Но я вовсе не собираюсь каждую минуту записывать/стирать еер. Один раз записал,а потом только чтение. Перезапись делать только по мере надобности. Или читать еер каждую минуту тоже не рекомендуется?
Последний раз редактировалось eduardo Чт фев 07, 2013 10:56:20, всего редактировалось 1 раз.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Так нужно делать(!) - запись делать только по мере необходимости.Или так тоже нельзя?
Можно после записи проверять записанную информацию чтением. Если прочиталось неправильно - меняем ячейки (адреса еепрома) и работаем дальше с ними.
Re: CodeVision AVR в вопросах и ответах
Чтение - неограниченное количество циклов. Просто при перезаписи на стираемые ячейки подаётся очень высокое напряжение порядка 24-28В, которое "сгоняет" электроны с "ловушек" затворов МНОП структур. Понятное дело, что электроны ускоряются до приличных скоростей в микроскопических объёмах, греют изоляционный слой и вызывают его деградацию.
Я, когда ещё только начинал осваиваться с АВР, сделал часы-будильник на Тини2313. И очень уж мне хотелось, чтобы при случайном пропадании питания не сбивалось время. Вот и дописал в код, чтобы при каждой смене минут значения часов и минут заносились в EEPROM. Посмотрел в даташит - 100тыс. циклов, ну, подумал, это как на наши изделия - гарантируют не менее, а в реальности на 1-2 порядка больше. Через примерно полгода часы начали "вспоминать" полную хрень - получился такой себе генератор случайных чисел или "аппаратный рандомайзер". Таким образом наработка составила около 250-300тыс. циклов.
Я, когда ещё только начинал осваиваться с АВР, сделал часы-будильник на Тини2313. И очень уж мне хотелось, чтобы при случайном пропадании питания не сбивалось время. Вот и дописал в код, чтобы при каждой смене минут значения часов и минут заносились в EEPROM. Посмотрел в даташит - 100тыс. циклов, ну, подумал, это как на наши изделия - гарантируют не менее, а в реальности на 1-2 порядка больше. Через примерно полгода часы начали "вспоминать" полную хрень - получился такой себе генератор случайных чисел или "аппаратный рандомайзер". Таким образом наработка составила около 250-300тыс. циклов.
Re: CodeVision AVR в вопросах и ответах
Не могли бы в двух словах обозначить,отсутствие каких функций или типов данных Вас расстраивает CVAVR?Apparatchik писал(а): CVAVR это пародия на Си.
Re: CodeVision AVR в вопросах и ответах
Да человек сам не понимает о чем говорит.
и продолжение...Apparatchik писал(а):Вот только что проверил CVAVR 1.25.9 если объявить переменную не в начале функции, а непосредственно перед циклом, компилятор дает ошибку must declare first in block. В GCC конечно таких проблем нету.
Apparatchik писал(а):Я понял, но в Eclipse я могу её объявить где захочу.


