[/quote] Была прекрасная программа Алгоритм Билдер.Делали ребята из Тулы.Графический ассемблер.Гораздо удобнее Код Вижена особенно в отладке - всегда понятно что происходит.И писалось по времени немного более чем Си...Но...к сожалению умерла из-за проблем с маркетингом....А жаль...[/quote]
К сожалению Вы правы.Сайт есть но...обновлений давно нет...Было пару раз упоминание в форумах что команда Громова собирается его реанимировать но...Может они чем другим занялись...
Добавлено after 4 hours 15 minutes 9 seconds: Собрал по новому проект с несколькими файлами и он даже откомпелировался и в протеусе работает.Один вопрос - в файлах 111.с и 222.с я вставил #define outsw PORTA.2. Насколько правильно в двух файлах определять одну переменную или возможно есть более правильное решение...Файл с новым проектом прилагаю
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Думаю что вообще надо сделать один заголовочный файл в котором прописать все #define ... Ещё 2 вопроса... 1.Возможно-ли прописать заголовочный файл поместив в него все глобальные переменные и подключать их в каждом *.c файле через #include ? Ну чтоб голову не заморачивать где чего подключил.Записал во всех-и пусть компилятор разбирается что ему нужно... Иль без extern никак ? 2.Можно-ли не писать *.c файлы а все функции разместить только в *.h файлах ?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.
Спасибо, но никак не хватает времени сесть и разобраться с Вашим кодом. Работы навалилось...
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
С таким подходом программировать не научишься. Нужно в голове представлять, что должна делать программа, и какой должна быть её структура. А просто пихать всё подряд куда попало, пытаясь отдать это на откуп компилятору - так не делают.[/quote]
Прежде всего благодарю за ответы...Будем осваивать далее... Позвольте так-же с Вами не согласится... Во-первых мне уже "крутость" в программировании как-то и неинтересна...Мне уж ближе к 60-и и по работе я руковожу парой таких - же "старпёров" - ремонтников-электронщиков так что для нас микроконтроллеры это более хобби чем необходимость.А не согласится я хотел с тем что считаю что и процесс программирования так-же как и любая профессия идёт к процессу упрощения...Пример тому - увеличение визуальных программ,которые очень отличаются от "классического" строчного программирования.Да,они пока менее совершенны чем "написательные" языки но это процесс времени и не более.Возьмите тот-же Ардуино...При всех недостатках он удобен.Тем более что уже появляются его графические варианты типа FLProg...(кстати российский)...И если-б не большой недостаток в отсутствии средств отладки то он очень даже хорош...Ну конечно не в специфических областях,но специфика это всегда узкий сегмент деятельности... Поэтому я и от CodeVision хотел-бы упрощения в процессе программирования...Ну или хотя-бы понятного описания и примеров(возможно с картинками) где подробно и обстоятельно были-б обьяснены ньюансы....
P.S. Звиняюсь если отвлёк Ваше время излишней философией...
Продолжая ваши философские речи неизбежно приходим к пределу упрощения "пусть делают другие". Это предельно просто: не парить свою голову, пускай другие парятся. Но ежели вы хотите сами делать - придется пройти тернистый путь от линии "старт", которой является учебник языка Си. Скачиваете Кернигана и Ричи, читаете, и примерно на 25-й странице начинаете смеяться над своими воросами про файлы и инклюды. Не начнете с этого - так и будете страдать от сложностей.
P.S. про 25-ю страницу я преувеличил. Извините за философию.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Мною перед заданием вопроса были просмотрены : хельп CodeVision,Лебедев (CodeVisionAVR. Пособие для начинающих .)с.250,Лебедев с.471,в интернете по сему вопросу было найдено http://kazus.ru/forums/showthread.php?t=29862 где была попытка сей вопрос прояснить...Вопрос остался для меня не совсем понятным поэтому и был задан в форум в надежде на консультацию специалистов.В форуме мне полностью вопрос был так-же не раскрыт но была попытка некоторых участников прояснить некоторые ньюансы...За что я им благодарен.К сожалению от Вас я подобной помощи не получил.Ваши ответы были просто пустыми строками написаными неизвестно зачем.Поэтому это не вопрос философии...Философствование приемлемо от людей имеющих реальные результаты(в данном случае оказавших помощь) а не стремившихся продемонстрировать своё возвышенное эго...Ваши ответы это не философия а элементарное звездобольство...,звиняюсь за точность определения...
Ознакомьтесь с форумом в темах, касающихся "вопросов по Си", WinAVR, AvrStudio и других. Надеюсь, вы сможете найти много полезного и/или интересного. Возможно среди найденного будет и кое-что из сказанного мною. Ну а не найдете - так тому и быть, соглашусь с последним вашим "точным" определением.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Подскажите пожайлуста на счет модуля TM1637 С LED дисплеем. Хочу понять как он управляется. Нашел на него даташит на некоторые вещи непонятны по английски. Есть даже пример функций на Си (в конце то что нужно). ВРодепонятно как проходит инициализация( установка яркости и тд). Но в основном цикле какието buttons .Кнопки, что за кнопки? откуда они? У меня на модуле нету кнопок функция Scankey (сканирование ключей ) мне непонятно как перевести и что за ключи( но во всех диаграммах для программ они используются. ? что это такое?
while (v==2){ button=0; OCR0A=0xFF; { delay_ms (10); } };
}; }
По сути что должно быть на выходе 3 режима (OCR0A=0x19 -> OCR0A=0x3F -> OCR0A=0xFF) . Подается питание на выходе OCR0A=0x19 с этим все ОК. Нажимаем кнопку увеличивает выход до OCR0A=0x3F и тут же OCR0A=0xFF. Еще раз нажимаем получаем OCR0A=0x19. Еще раз нажимаем идет v==0 и т.д по кругу. А по факту OCR0A=0x19 -> (OCR0A=0x3F + OCR0A=0xFF) -> OCR0A=0x3F
Зачем это: button=0; и это: delay_ms (10); и это: while(v==2)
И где подавление дребезга?
Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний. Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.
И да, господа в африке.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Зачем это: button=0; и это: delay_ms (10); и это: while(v==2)
И где подавление дребезга?
Прерывание по изменению пина здесь как то не к месту. Ибо при дребезге может быть выполнено множество прерываний. Лучше запустить таймер на невысокой частоте. При прерывании по переполнению/совпадению каждый раз проверять нажата ли кнопка. Если нажата то прибавляем счётчик времени нажатия пока он меньше или равен, например, 10. Как только он достиг например 10, прибавляем вашу переменную V и прибавляем счётчик. На этом он перестаёт расти и ваша переменная поменялась. Как только пин сменился на 1, обнуляем счётчик.
И да, господа в африке.
Ну наверное button=0 потому #define button PINB.3 //Переменная где сидит кнопка
Не тупим! Вы спросили почему не работает? Я задаю наводящие вопросы) Хорошо, другими словами: - Зачем входному регистру присваивать 0? - Зачем используются задержки? - Зачем делать цикл для значения v=2, когда для других его нет?
И где устранение дребезга?
И да, за цитирование полное тут банят)
В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
В вашей программе столько ошибок, что проще написать заново) Причём писать то тут 2 минуты от силы.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Объявлено прерывание interrupt [PC_INT0] но включается GIMSK=(1<<PCIE); Вы правда рассчитываете что это сработает? Задержка в прерывании - зло Переменная v, используемая в прерывании и основном коде, не объявлена как volatile (впрочем, прерывание все равно запрещено так что это неважно). ФоРмАтИрОвАнИе УжАсНо
Цитата:
В кодевижне нормальный визард программ, с человеческим описанием настроек переферии, совсем не хочется разбираться в том какие регистры вы забили и как настроили при помощи сдвига <<.
Настройка сдвигами гораздо нагляднее чем магическими числами. А комментарии запросто могут не соответствовать коду.
Сработает! Название темы посмотрите, у него объявлено правильно.
COKPOWEHEU писал(а):
не объявлена как volatile
Компилятор видит что переменная используется в левых выражениях, а значит не должен ничего переоптимизировать. Конечно надёжней использовать volatile но тут оно роли не сыграет.
COKPOWEHEU писал(а):
Настройка сдвигами гораздо нагляднее чем магическими числами. А комментарии запросто могут не соответствовать коду.
Если не знать все регистры наизусть то толку от такого объявления? Всё равно надо будет смотреть что за регистр и что за бит. Всё же периферия настраивается чаще один раз, а значит комментарии соответствуют. Если надо что то поменять, не надо создавать новый файл, визард имеет превью из которого можно скопировать перенастроенные куски в уже имеющийся код. Это уже к вопросу откуда растут руки.
// Analog Comparator initialization // Analog Comparator: Off ACSR=0x80; ADCSRB=0x00;
while (1) {
if(!PINB.3 && !c) // Если кнопка нажата и до этого мы на текущее нажатие не отреагировали { delay_ms(10); // Задержка против дребезга и ложных срабатываний, можно/нужно подобрать if(!PINB.3) // Если кнопка осталась нажата, значит она уж точно нажата { c=1; // ставим с=1 чтобы не заходить сюда до следующего нажатия кнопки v=v+1; if(v==3){v=0;}; if(v==0){OCR0A=0x19;}; if(v==1){OCR0A=0x3F;}; if(v==2){OCR0A=0xFF;}; }; }; if(PINB.3){c=0;}; // если кнопку отпустили можем ждать следующее нажатие
}; }
Кучку условий можно заменить на case что ускорит обработку, но нафиг оно надо? Если написано за 2 минуты и светодиод меняет яркость.
Вообще не люблю использовать delay и для опроса сколько угодно кнопок вовсе применяю свободный таймер. Но тут непонятно что нужно вопрошающему, если тупо как есть то это самый простой вариант. Само собой решений данной задачи множество, на прерываниях красивее конечно)
_________________ Глупый не задает вопросы. Глупый и так все знает.
Всем СПАСИБО кто откликнулся отдельное спасибо за решение AndTer без прерывания.
Видимо у тиньки есть баг, помнит состояние регистра поэтому хаотичное переключение программ. Если на инициализации делать OCR0A=0x00; то if(v==0){OCR0A=0x00;}; надо таким же делать. В этом случае все четко происходит.
Сейчас этот форум просматривают: _puzo и гости: 55
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения