выше прота г и не должно... т.к. там кончается доступное для битовых операций пространство.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов
_________________ Что нас не убило сделало нас осторожней Не доверяйте русским лужам - это может быть вход в метро.
в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов
Коммон, мне не нужно установить бит, мне нужно его посмотреть.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
а это не важно флаговые операции через точку транслируются в sbi cbi и если такового не может быть осуществлено - то и читать и писать вы это не сможете через точку.
это написано в подсказке самой CVAVR The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register. Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range
Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.
Перевод нужен? порты с адресами выше 0x1F - недоступны для битовых атомарных операций CBI, SBI, SBIC and SBIS туда доступ только через команду out
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Доброго времени суток. Столкнулся с вопросом: CodeVisionAVR для студентов-нищебродов не могу найти с наскоку бесплатный. подскажите где скачать? мне нужна версия для тиньки2313 ,говнокод сильно меньше 4 кБ,современных дисплеев не буду подключать,современные библиотеки не нужны =( может у кого дистрибутив старый завалялся?
_________________ В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
добрый день. как получить разные случайные числа при каждом запуске программы? использовать текущее время в качестве начального числа для генератора случайных чисел #include<time.h> srand(time(0));
не получается в CodeVision AVR не такой библиотеки, тогда как?
а вот с этим никак, ибо использую только avr-gcc (WinAVR).
в общем и целом как-то так:
Код:
unsigned char *ptr = (void*)0; int sum = 0;
for(int i=0; i < MAXRAM; ptr++) sum = calc_crc_1wire(sum, *ptr);
srand(sum);
MAXRAM - это максимальный адрес доступного RAM в выбраном МК, а clc_crc_1wire - это функция вычисления CRC по алгоритму 1-wire, можно и по любому иному алгоритму, но этот самый известный и в CVAVR тоже по идее должен быть в библиотеке...
может кто то может пример ARV в CVAVR написать . за ранее спасибо.
А что конкретно из этого непонятно ? Примеров CRC для 1-Wire полно в интернете. MAXRAM - это Вам только знать, сколько и чего у Вас там ...
я не понимаю как читать точнее написать это в CVAVR. Эта функция из библиотеки clc_crc_1wire ? какой то.
если можете напишите как сделать чтоб rand() был случайным числом при включении каждый раз. или поделитесь своим примером для задания начального значения случайной последовательности .
} // ---------- случайная скорость эффекта ---------- void view_speed(void) { yarkost=255; speed=rand()%4+1; // случайное число от 1 до 6 delit= rand()%100+80; // случайное число от 50 до 100 speed=speed*delit;
srand(2); // устанавливаем стартовое значение - 4 541
//настройка портов PORTB=0b00000000; DDRB=0b00000000; PORTC=0b00000000; //порт С 4 первые по умолчанию 1 DDRC=0b00011111; //порт С 4 первые ноги на вывод PORTD=0b00000000; //порт D по умолчанию все ноги на 0 DDRD=0b00001111; //порт D все ноги на вывод
// ---------- рабочая часть ---------- while (1) {
int ef,t,g,j,k,n; int effect[] = {0,1,2,3,4,5};
n = sizeof(effect) / sizeof(effect[0]); for (k = 0; k < n - 1; k++) { j = rand()% (n - k);
t = effect[k]; effect[k] = effect[j]; effect[j] = t;
} for(g = 0; g < n; g++) { ef = effect[g]; //---------- switch(ef) { case 0: view_flasher_5(); break; case 1: view_flasher_1(); break; case 2: view_flasher_2(); break; case 3: view_flasher_3(); break; case 4: view_flasher_4(); break;
}
}
view_flasher_0(); }; // ---------- рабочая часть (end) ----------
} // ================= end main ======
// // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The End -=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //
Цитата:
Serzh2000 писал(а): функция вычисления CRC по алгоритму 1-wire
Вы можете взять любой, удобный Вам алгоритм. Хоть самый простой, типа обычной суммы.
я новичок в программировании ... приведите рабочий пример в CVAVR попробую разобраться/ вникнуть /понять
Цитата:
К чему эти извращения. Код: EEMEM uint8_t ee_seed; randomSeed(eeprom_read_byte(&ee_seed)); eeprom_write_byte(&ee_seed, eeprom_read_byte(&ee_seed) + 1);
да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ... по этому вариант при выключении записывал результат rand () в eeprom, и использовал его как seed при следующем включении не хочу использовать
Project : zvezda Version : luchshaay Date : 12.12.2018 Author : Serzh Company : Comments:
Chip type : ATmega8 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/
} // ---------- случайная скорость эффекта ---------- void view_speed(void) { yarkost=255; speed=rand()%4+1; // случайное число от 1 до 6 delit= rand()%100+80; // случайное число от 50 до 100 speed=speed*delit;
//настройка портов PORTB=0b00000000; DDRB=0b00000000; PORTC=0b00000000; //порт С 4 первые по умолчанию 1 DDRC=0b00011111; //порт С 4 первые ноги на вывод PORTD=0b00000000; //порт D по умолчанию все ноги на 0 DDRD=0b00001111; //порт D все ноги на вывод
// ---------- рабочая часть ---------- while (1) {
int ef,t,g,j,k,n; int effect[] = {0,1,2,3,4,5};
n = sizeof(effect) / sizeof(effect[0]); for (k = 0; k < n - 1; k++) { j = rand()% (n - k);
t = effect[k]; effect[k] = effect[j]; effect[j] = t;
} for(g = 0; g < n; g++) { ef = effect[g]; //---------- switch(ef) { case 0: view_flasher_5(); break; case 1: view_flasher_1(); break; case 2: view_flasher_2(); break; case 3: view_flasher_3(); break; case 4: view_flasher_4(); break;
}
}
view_flasher_0(); }; // ---------- рабочая часть (end) ----------
} // ================= end main ======
// // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The End -=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //
Serzh2000 писал(а): Цитата: Serzh2000 писал(а): да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...
Офигеть! Тяжело, чтоль, посчитать?
??? да для профессионала наверно все просто ... для меня вообще не ясно что посчитать?
Ну вы ведь заявляете о проблеме! На основании чего? Выкладывайте. Или просто бла-бла-бла?
??? спрошу еще раз при каждом запуске программы rand() числа остаются одинаковыми. Генератор Псевдо Случайных Чисел использует единственное начальное значение. мне нужно чтобы при запуске программы случайное число было случайным!!! как это реализовать CVAVR? помогите.
1. перед выключением сохранять случайное число, сгенерированное rand(), в EEPROM. 2. при включении вызывать srand(N), где N - то самое число (seed).
Помимо eeprom, число N в пункте 2 можно добыть и другими способами, про которые тут уже много рассказали: - способ с вычитыванием всей памяти EEPROM и получением некоторой "контрольной" суммы). - если есть RTC, можно из него брать текущее время в секундах в качестве seed.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения