модульное программирование и отладка сначала модулей, затем верхний уровень.
Прекрасен подход только на бумаге, в реальности полуается не так как задумывалось и всё резко становится хуже. К тому же, подход применим только когда поставлено чёткое Т.З. в деталях и изменений не предвидится.
Не могу понять почему протеус криво компонует исходник? При пошаговом выполнении вылетает "No source code in this line". Или я что-то делаю не так.
Кстати, а по адресу 0х0046 не должго быть какого-то прерывания или команды RETI, а так получается адрес никуда, а просто так на прерывание без вызова протеус не даст выйти, насколько мне известно
Спойлер
_________________ Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
С МК AVR я начал работать с 2007 года. Сначала писал на асме, затем перешел на си. В студии работаю с самого начала. В протеусе неоднократно пробовал работать. В итоге на последней попытке плюнул и забил на протеус. С одной стороны протеус как бы удобен тем, что накидал схему и можно эту схему просимулировать. Такой подход может быть и удобен на небольших схемах. Приведу в качестве примера один свой проект. Блок управления термоформовочным станком. Состав: МК, регистры ввода-вывода 74HC165 - 3 шт, 74HC595 - 2 шт. 24 входа, 16 выходов. Символьный дисплей 20х4. Матричная клавиатура. "Сейчас мы со всей этой хренью попытаемся взлететь". Я попытался как-то сделать на протеусе. Компьютер так завис на этой схеме, что я прекратил дальнейшие попытки работать в протеусе и весь проект отлаживал как и прежде в студии. Да, непросто. Но если приноровиться, то все не так уж и сложно. Алгоритм простой. Как работают микросхемы регистры ввода-вывода нам прекрасно известно, тем более, что SPI аппаратный. Написали программный модуль, сделали тестовый проект, проверили в железе. Если что, отладили в симуляторе. Теперь этот модуль можно смело выкидывать из головы. Беремся за следующий модуль, скажем, символьный дисплей. Тут все аналогично. Я с такими дисплеями работаю без флага ожидания. Только на запись. Проверили работоспособность, что-то вывели для проверки. Этот пункт теперь тоже выкидываем из головы. Матричная клавиатура. Написали модуль, сделали тестовую программу. Вывели коды кнопок на дисплей, выкинули из головы. Дальше остается только сама программа. Алгоритм работы самого устройства в целом.
Спор ни о чем. С таким же результатом можно спорить что лучше ВАЗ 2102 или 2103. Если хотите продолжать, проще создать ветку "Что круче:........ или ..........", и там разводить срач.
_________________ Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
2 Jetetex когда то помогло в случае "No source code in this line" - разместил файл протеуса там где исходник, правда на Си это было
Цитата:
Если что, отладили в симуляторе
хм. AVR Studio 4.19 хэлп: Simulator Modules USI is not supported. TWI is not supported. Analog Comparator is not supported. Analog input is not supported. лучше эмулятор имхо, правда у Atmel было дорого всегда, но народ извращался - HappyJTAG2 JTAG и ISP для AVR: http://microsin.net/programming/avr/happyjtag2.html з.ы. в коментах есть чтоб AVR Studio не падала
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
модульное программирование и отладка сначала модулей, затем верхний уровень.
Прекрасен подход только на бумаге, в реальности полуается не так как задумывалось и всё резко становится хуже. К тому же, подход применим только когда поставлено чёткое Т.З. в деталях и изменений не предвидится.
Вполне нормально получается - подход древний, с самого рождения ассемблера применяется. Другое дело, что модульная (многофайловый проект) программа несколько специфична в отношении написания самих модулей и правил работы с ними. О многих приемах можно только догадываться или своими "шишками" осваивать на практике. Или вспоминать "давно забытое" старое для I8080/Z80/I8086.
Дальше остается только сама программа. Алгоритм работы самого устройства в целом.
А потом оказывается что эти самые модули которые выбросили из головы начинают конфликтовать друг с другом. Где-то одинаковые регистры задействовали, где-то выходит за границу выделенной памяти и портит соседний участок... Такой подход предполагает очень тщательное документирование каждого модуля, согласование всех модулей в рамках проекта и это отбирает по времени и ресурсам едва ли не больше чем на реализацию самой программы. И самое ужасное что это позволяет только УМЕНЬШИТЬ количество очевидных ошибок.
Тогда как метод научного(не полностью же рандомно писать программу) тыка с последующей симуляцией работает гораздо быстрее.
Дело было вечером, делать было нечего... решил я я по свободе перечитать тему с самого начала, и вот что заметил: темы повторяются каждые 10-15 страниц. И в попытке как-то систематизировать сделал что-то вроде навигации или содержания. Получилось или нет, судить Вам:
Прерывания. таймеры Спойлерhttp://asm-avr.narod.ru/?oprd=1 -Нужно запустить 16 битный таймер, и в определенный момент его считать и сбросить. (ATTiny2313) viewtopic.php?p=75446#p75446
- прерывания правильно отрабатываются, но вот частота срабатывания не совпадает с расчётной viewtopic.php?p=408405#p408405
-чтоб контроллер установил порт В в высокий уровень и через 2 сек в низкий уровень и на этом всё прекратилось viewtopic.php?p=83599#p83599
- прочитать бит по одному адресу из пространства ввода-вывода (I/O space) и записать его по другому адресу и номеру разряда viewtopic.php?p=193277#p193277
- Вопрос в следующем, пришел тот злащасный день когда мне понадобилась работа с не целыми числами типа 1,5 в ассемблере, ести ли какие либо стандартные варианты работы с такими числами или нужно чегото мудрить, если мудрить то как??? viewtopic.php?p=56246#p56246
- mega128. столкнулся с такой проблемой, в АВРстудио при копиляции на команду OUT DDRG,R16 пишет error: Operand 1 out of range: 0x64 viewtopic.php?p=126549#p126549
- Пытаюсь освоить Mega8535. Для начала решил помигать светодиодами, при обращении к одной и той же подпрограмме два и более раза подряд програмуля не работает viewtopic.php?p=150761#p150761
- хочу напомнить что вектора у меги16 - 2-х словные и имеют только четные адреса $0002, $0004, $0006 и т.д., просто писать reti viewtopic.php?p=317619#p317619
Категорически не соглашусь с вами! Ассемблер изначально предполагает тщательное планирование. И документирования в том или ином виде. Написание отдельных документов, комментарии, рисование алгоритмов. А также следование определённым правилам. Стиль и свод правил каждый программист вырабатывает сам. Есть и общепринятые правила. Регистры. Нужно сразу и жестко, раз и навсегда определить, как и какие регистры использовать. Глобальные, часто используемые, служебные, временные. Модульность. Нет ничего хорошего в том, что вся программа представляет из себя огромную простыню. Это как минимум затрудняет чтение программы. Программа должна быть разбита на логические блоки. В идеале следует добиться следующего: каждый модуль должен быть максимально самостоятельным. У такого подхода следующие преимущества: В разы ускоряется создание проектов. Проекты собираются как конструктор из кубиков-модулей. Чтобы не было проблем с регистрами нужно следовать правилам и тщательно отслеживать регистры в каждом модуле. Сохранять и восстанавливать контекст при необходимости. Память. Максимально исключить ошибки можно единственным способом: использование не абсолютных адресов, а меток. И, естественно, тщательно проверять все операции с памятью, чтобы не выйти за пределы диапазонов.
Для работ под ассемблером есть два варианта полная проработка программной модели "с нуля" для малой прикладной задачи и модульная сборка из заранее подготовленных библиотек для больших проектов. Что не исключает и комбинированного стиля. При модульном варианте каждый из модулей получает дополнительное обрамление функциями хранения используемых ресурсов и обязательными правилами генерации имен используемых ресурсов. Особых общих правил не имеется. Примеры из "полнофункциональных" компиляторов (имеющих в составе ассемблер, линкер и библиотекарь) для avrasm2 (как и для c51asm от атмела для mcs51) не применимы из-за специфики отсутствия линкера и библиотекаря в самом составе компилятора. Однако работа в любом из вариантов вполне реальна.
Всем здрасте. Собираюсь в проекте использовать ШИМ, но где-то вроде как читал, что регистры сравнения OCR не могут иметь крайние значения (0 и 255). Так ли это???
Симулятор не ругается, но как бы потом в железе не возникло проблем. ШИМ планируется на вкл/выкл, + кнопка без фиксации на функцию вкл/выкл этого безпредела.
RESET: ldi r16,RAMEND ;инициализация стека out SPL, r16 ldi temp,0b11111101 ;установка портов на выход out DDRB,temp clr temp ;сброс портов в лог "0" out portb,temp ;============== ;инициализация таймеров ;============== ldi temp,(1<<WGM00)|(1<<WGM01)|(1<<COM0A1) ; установка режима Fast PWM out TCCR0A,temp ldi temp,(1<<CS01)|(1<<CS00) ; предделитель таймера на 64 (9МГц/8/64=18750 Гц) out TCCR0B,temp ldi temp,(1<<OCIE0A) ; разрешить прерывание по совпадению A |(1<<OCIE0B) out TIMSK0,temp ldi temp,(1<<OCF0A)|(1<<OCF0B) ; Установка флагов прерываний out TIFR0,temp ldi temp,0 ; регистр сравнения А, ШИМ out OCR0A,temp ldi temp,250 ; регистр сравнения В, для таймера out OCR0B,temp ldi temp,0 ;очистка счетного регистра out TCNT0,temp
sei
rjmp main
;============== ; Прерывания ;============== TIM0_COMPA: reti
TIM0_COMPB: ldi temp,tB ; установить флаг события "сброс по переполнению B" in temp,OCR0A ; загрузить значение регистра сравнения ШИМ в переменную inc temp ; инкремент значения ШИМ breq exit_compA ; если =0, значит достигли максимального значения, выходим out OCR0A,temp ; иначе загрузить новое значение в ШИМ. exit_compA: reti
;============== ; CODE SEGMENT ;==============
main:
exit_main: rjmp main
_________________ Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Всем здрасте. Собираюсь в проекте использовать ШИМ, но где-то вроде как читал, что регистры сравнения OCR не могут иметь крайние значения (0 и 255). Так ли это???...
А подумать ... ? 0 - не имеет смысла, а 255 в принципе вполне применимо, только это то же самое, что и прерывание по переполнению. Т.Е. ШИМ там не будет - непрерывный сигнал либо 0 либо 1.
Кстати... В Кривом Рогу раньше неплохая контора по кассовой технике была - "резонанс" называется. Неплохие аппараты делала...
Это да. Так даже лучше. Сомнения именно в том - не возникнет ли каких то конфликтов на контроллере. Смысл в том, что бы по нажатию на кнопку включить одной ногой блок питания, после этого плавно зажечь светодиодные ленты. После повторного нажатия сделать все наоборот, т.е. сначала плавно потушить свет, а потом выключить блок питания. Сразу отвечу - блок питания на 250 Ватт, на котором висит около 40 метров ленты, поэтому и нужно его отключить что бы не жрал лишнего.
Цитата:
Кстати... В Кривом Рогу раньше неплохая контора по кассовой технике была - "резонанс" называется. Неплохие аппараты делала...
Не знаю, но название знакомое.
_________________ Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Протеус в осцилографе показывает именно непрерывный сигнал - при OCRA=0 низкий, а на OCR0A=255 высокий. Именно это меня немного и смущает, ведь ему каг бы надо время на переключение пина, а при 0 он должен одновременно и включить и выключить ногу . Просто нехоцца без особой необходимости увеличивать код сравнениями. Оно в общем то и не критично, но все таки..
_________________ Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Кто подскажет как сбросить флаг DOR в UART, именно с помощью команд,а не на словах как пишут обычно:Бит DOR очищается (сбрасывается в 0) когда данные приняты и пересланы в UDR.,лично у меня не получаеться его скинуть,почему то когда он устанавливается никак не прочитать данные.(((
если смотреть по ATMega16, то никак. Он доступен только для чтения. В даташите на Вашего таракана посмотрите на UCSRA (в 16). под табличкой регистра написаны буквы W и R. Они обозначают возможности регистра: R (read)- чтение W (write)- запись W/R (read/write)- чтение/запись
PS: с USART не знаком, но в ДШ написано, этот бит установлен пока буфер приема (UDR) не будет СЧИТАН.
PPS: Люди добрые, когда вы, крича громко хелп ми научитесь нормально оформлять вопрос? Не понятно какой контроллер, не известен код программы, нет никакой информации, от которой можно оттолкнутся для решения ВАШЕГО вопроса. Здесь нет телепатов
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения