proekt07 Опубликовано 16 декабря, 2014 Поделиться Опубликовано 16 декабря, 2014 Эта тяга к прекрасному быстро заканчивается когда требуется готовая либа для работы с ЛСД или чем то подобным коих на етих языках весьма мало и грустно В точку!А когда приспичит собрать первые часы,или термометр,вот тут баскомовские библиотеки очень кстати будут. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
proekt07 Опубликовано 16 декабря, 2014 Поделиться Опубликовано 16 декабря, 2014 А вот Баском зараза водил меня за нос,а я доверял ему как толковой проге Оказалось,что он тасует мне неверные нерабочие HEX файлы А как это возможно,чтобы баском за вас загружал хексы для прошивки?Никогда о подобном не слышал... Кстати,мой USBASP,правда самодельный, не видит МК,если МК тактируется от внутреннего генератора в 1мгц. Тини13 с завода по умолчанию имеет именно 1мгц. Лечилось так:захожу в баскоме в настройки программатора,меняю тактовую частоту программатора с авто на 50гц,запитываю МК от USBASP,считываю МК и меняю фьюзы МК на что-нибудь больше 1мгц.Если МК рабочий(у меня несколько тини13 с алиэкспресс оказались полностью дохлыми),то все дышит. На вашем скрине программы используется директива $PROG.Если вы прошиваете фьюзы из меню "Загрузка в МК" F4,то этой директивой обычно не пользуются. Также в программе указана тактовая частота 9,6 мгц,а фьюз деление на 8 (divide clock by 8 ) не отключен,значит программа будет работать на частоте 1,2 мгц. Если вы хотите "считать" состояния порта,то используем PIN,если нет, то можно использовать PORT. $regfile = "attiny13a.dat" $Crystal=9600000 $hwstack=12 $swstack=12 $framesize=20 Config PORTB.4=Output Do set PORTB.4 Wait 1 reset PORTB.4 Wait 2 Loop End Я делал примерно так. Программа простая,как автомат Калашникова,работает также)) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
COKPOWEHEU Опубликовано 16 декабря, 2014 Поделиться Опубликовано 16 декабря, 2014 Эта тяга к прекрасному быстро заканчивается когда требуется готовая либа для работы с ЛСД или чем то подобным Для употребления таких веществ уже библиотека нужна? Хватит путать ЛСД (LSD) и ЖК(LCD) 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
vova_ua Опубликовано 16 декабря, 2014 Поделиться Опубликовано 16 декабря, 2014 Есть у меня вопрос по правке прошивки одного интересного девайса. Опыта в этом деле почти нет, по этому прошу отнестись с пониманием к возможным ошибкам в описании задачи. Собрал термостат для котла отопления из дружественного форума. Суть работы довольно проста - управление моностабильным или бистабильным реле для включения/отключения котла. Вот часть кода которая отвечает за управление реле //============================================================== // Управление реле //============================================================== #ifdef BISTABLE_RELAY /* Бистабильное реле */ void relay (char s) { #asm ("cli") /* ATOMIC */ if (s) { /* SET */ PORTC |= 0x10; delay_ms(50); PORTC &= ~0x10; } else { /* RESET */ PORTC |= 0x20; delay_ms(50); PORTC &= ~0x20; }; #asm ("sei") /* END ATOMIC */ } #else /* Моностабильное реле */ void relay (char s) { #asm ("cli") /* ATOMIC */ if (s) { PORTC |= 0x10; } else { PORTC &= ~0x10; }; #asm ("cli") /* END ATOMIC */ } #endif Для бистабильного реле подается управляющий импульс включения на 50мсек на одну ногу мк или управляющий импульс выключения на другую ногу Для моностабильного реле включаем или отключаем сигнал на одной и той же ноге мк. Играя с устройством я попробывал увеличить длительность импульса до 1 - 5 сек и заметил что у меня на самом деле получилось подобие некого цикла. Тоесть должно же быть так: температура в комнате ниже измеренной = подаем одиночную команду включения (устанавливаем управляющий выход мк в лог 1 на 50мсек), после чего снимаем управляющий сигнал и ждем пока температура не вырастет После того как температура вырастет от желаемой на 0.2 град подаем такой же сигнал отключения реле на другую ногу мк и снова ждем. Я же получаю постоянную серию управляющих импульсов (как бы цикл). Тоесть если измеренная температура ниже желаемой у меня будут постоянные управляющие сигналы с некой скважностью пока температура не достигнет желаемой + гистерезис. И далее та же картина но уже с сигналом отключения реле. Если использовать вариант с моностабильным реле, то тут все работает нормально. Я бы хотел понять почему не работает как нужно режим с бистабильным реле. А также например сделать так чтобы для включения реле мк подавал одиночный импульс скажем на секунду и для отключения этот же сигнал подавался снова, такой же длительности на ту же ногу мк. Исполнительное устройство не проблема подкорректировать а вот прошивку изменить для меня сложновато. Автор этого проекта выложил исходники. Выкладываю их тут и буду рад если кто найдет время объяснить и помочь в моем вопросе. Может достаточно просто изменить синтаксис, но я в этом не спец main.txt 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey-Ufa Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 (изменено) У вас происходит постоянный вызов функции relay из программы. В случае моностабильного реле вы его просто не видите, так как состояние порта С при таком вызове не изменяется. А в случае бистабильного импульс виден. Собственно ничего страшного в этом нет, если на бистабильное реле будут постоянно идти импульсы. Если хотите от этого избавиться, то нужно перелопачивать весь код и искать, каким образом избавиться от ненужных вызовов функции. На мой взгляд это лишнее. А также например сделать так чтобы для включения реле мк подавал одиночный импульс скажем на секунду и для отключения этот же сигнал подавался снова, такой же длительности на ту же ногу мк. Исполнительное устройство не проблема подкорректировать а вот прошивку изменить для меня сложновато. А какой в этом смысл? Вы рискуете в этом случае потерять синхронизацию. Контроллер ведь не знает, в каком положении находится ваше реле и после первого же сбоя в схеме будет тупо гнать импульс за импульсом не подозревая, что реле работает уже в противоположной фазе, т.е. включается, когда надо отключиться и наоборот. Изменено 17 декабря, 2014 пользователем Sergey-Ufa 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Прикрепленные файлы: main.txt 43,35 Кб И что это за код ? Как он относится к тому, который Вы нам показали в посте ?Где в нём включение реле, сравнение с температурой, .... ? Ну а вообще, Вы просто хотите иметь триггер, запоминающий состояние. Ну так и напишите его 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Вот часть кода которая отвечает за управление реле/////Для бистабильного реле подается управляющий импульс включения на 50мсек на одну ногу мк или управляющий импульс выключения на другую ногу этот код ничего общего с управлением би_реле не имеет... это в лучшем случае третья часть необходимого кода... и постоянное отключение прерывания на 50мсек при каждом вызове функции наводит на мысль, а на вообще тогда прерывание.... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Там (в аттаче) вообще код для PIC'ов, а в посте у vova_ua для АВР'а. Человек "блуждает где-то в облаках" 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
vova_ua Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 (изменено) У вас происходит постоянный вызов функции relay из программы. Вы рискуете в этом случае потерять синхронизацию. Очень хорошее замечание. В таком случае я бы хотел реализировать аналогию с бистабильным реле но в идеале по такому алгоритму: Если температура ниже желаемой = выдавать импульсы включения бистабильного реле по такому вот принципу - первый импульс дительностью 1сек, далее пауза скажем в пол часа далее снова импульс в 0.5 сек, пауза в пол часа, импульс 0.5сек и т.д. пока температура не привысит желаемую + гистерезис. Ипмульсы отключения реле по такому же алгоритму. Термостат этот у меня работает в безпроводном режиме, применен приемник и передатчик на 433МГц Так вот все это нужно для уменьшения потребления тока передающей части и улучшения стабильности работы в случае кратковременного либо длительного отключения приемной части. И что это за код ? В посте только часть кода, в прикрепленном файле исходник. Я бы с радостью написал все что угодно, но в моем посте я четко описал суть ситуации и мои познания в этом деле. Там (в аттаче) 1. читайте пожалуйста мой пост полностью особенно о том что я очень далек от программирования, хотя с помощью гугла удалось добавить подсветку в эту прошивку. 2. я вижу что часть кода которую я привел в посте и возможно в аттаче действительно на мой взгяд "чайника" не для AVR, но также вижу что он закомменчен и никак не влияет на работу прошивки. 3. Я блогодарен всем откликнувшимся. Но друзья! Есть задача, нужен совет либо конкретная помощь, какую вот например предоставил - Sergey-Ufa Изменено 17 декабря, 2014 пользователем vova_ua 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 В посте только часть кода, в прикрепленном файле исходник. А Вы сами качали и смотрели то, что прикрепили ? В прикреплённом файле не то что исходник, кусок из которого Вы выложили, там вообще нет ничего общего с тем, что Вы описываете. Где код, в котором идёт сравнение с уставкой, решение включать или выключать реле, и т.д... ? Там какая то куча условий с каким то портами, задержки, всё запутанно и в кучу свалено... Вы только твердите, что далеки от программирования и что Вас не слушают. Только Вы сами не слышите. Вам говорят, что выложенного Вами - мало. Решать Вашу проблему нужно не в Вашей функции relay, а там, где решается включать его или отключать. Как можно дать совет, не видя ситуации ? Мы не экстрасенсы... Далее, Вы просите советов. Чем Вам вот эта фраза: Ну а вообще, Вы просто хотите иметь триггер, запоминающий состояние. Ну так и напишите егоне совет ?На сколько я понял, Вы просто его проигнорировали. Вопрос вот только почему ? Неужели Вы на столько компетентны в этом, чтобы могли отсеивать правильные/неправильные советы ? Если бы Вы его не игнорировали, то у Вас по-любому появились бы вопросы по нему. А совет, между прочим, в отличии от тех, которые Вы посчитали "правильными", был в тему. Но Вы же у нас понимаете в советах, куда нам там... Всего наилучшего 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
vova_ua Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 только что скачал исходник который прикрепил выше. Вот наверное та часть кода о которой Вы упоминаете. //============================================================== // Управление реле //============================================================== #ifdef BISTABLE_RELAY /* Бистабильное реле */ void relay (char s) { #asm ("cli") /* ATOMIC */ if (s) { /* SET */ PORTC |= 0x10; delay_ms(50); PORTC &= ~0x10; } else { /* RESET */ PORTC |= 0x20; delay_ms(50); PORTC &= ~0x20; }; #asm ("sei") /* END ATOMIC */ } #else /* Моностабильное реле */ void relay (char s) { #asm ("cli") /* ATOMIC */ if (s) { PORTC |= 0x10; } else { PORTC &= ~0x10; }; #asm ("cli") /* END ATOMIC */ } #endif //============================================================== // Сравнение температур и выдача команды //============================================================== void compare (void) { if ((temp2-hyst)>=temp) // Желаемая тем-ра больше измеренной - вкл. реле { relay(1); } else if (temp>=(temp2+hyst)) // Желаемая тем-ра меньше измеренной - откл. реле { relay(0); }; } Я не игнорирую советы, которые дали форумчане. Просто некоторые из них не могут быть актуальными так как не соответствуют тому что я описал в задаче. Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер. Я упомянул иной алгоритм который мне был бы полезен - Вы не обратили на него никакого внимания. Сравните совет который дал Sergey-Ufa и иные советы и увидите что иные советы куда менее информативны и конкретны. В идеале я бы конечно хотел чтобы знающий человек просмотрел на досуге код и указал как бы мне решить мою ситуацию. Я не ставлю для себя задачу освоить программирование, так как для этого уже немного поздновато. Я нуждаюсь в помощи с этой задачей что и описал выше и что самое главное я действительно благодарен всем откликнувшимся не зависимо от советов 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Просто некоторые из них не могут быть актуальными так как не соответствуют тому что я описал в задачеВот, что Вы написали :Я же получаю постоянную серию управляющих импульсов (как бы цикл). Тоесть если измеренная температура ниже желаемой у меня будут постоянные управляющие сигналы с некой скважностью пока температура не достигнет желаемой + гистерезис. И далее та же картина но уже с сигналом отключения реле. Я Вам дал совет с запоминанием состояния. Что не так ? Каким образом он не соответствует написанному Вами ? Поясните... Сравните совет который дал Sergey-Ufa и иные советы и увидите что иные советы куда менее информативны и конкретныКакой более информативен ? Что у Вас происходит постоянный вызов функции relay ? Т.е. Вы этого в своей же собственной программе не видите ?Или что Вы рискуете рассинхронизировать программу с реле ? Дак это и ежу понятно. Если для Вас это не логично, тогда не в ту степь Вы полезли. Вы просто не поняли сути его поста. Вот его ответ на Ваш вопрос : . Если хотите от этого избавиться, то нужно перелопачивать весь код и искать, каким образом избавиться от ненужных вызовов функции А Вы увидели очевидные для Вас вещи (ну или то, что хотели услышать), а остальное - мимо ушей.А теперь Вы возьмите и сравните советы и ответы, может всё таки чего и уловите, соответствующего Вашим "запросам"... ЗЫ: Ничего против поста Sergey-Ufa не имею, он всё верно написал. Просто некоторые не умеют читать и вникать в суть написанного. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
vova_ua Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Что не так ? Каким образом он не соответствует написанному Вами ? Поясните... Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер. Согласитесь же - Вы ведь тоже пропускаете многое из написанного мной мимо ушей Но ведь я никого и никак не хочу задеть или обидеть, у меня совсем иная задача. Тем не менее если я задел Вас, прошу простить Давайте попробую максимально конкретизировать вопрос! Я бы хотел найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его Если Вы например имеете свободное время и желание помочь и можете просмотреть код и помочь в этом вопросе - буду благодарен. Если же нет, то возможно не стоит тратить время на мой вопрос 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Я упомянул что в программировании я не разбираюсь - Вы же советуете написать триггер.Опять двадцать пять. Причём тут то, что Вы не разбираетесь в программировании ? Я вам дал совет. Если бы Вы его не проигнорировали и хотели бы им воспользоваться, но не понимали бы как, Вы бы задали наводящие вопросы. Но от Вас только и было слышно, что все советы - говно и не удовлетворяют Вашим требованиям.Меня лично Вы ничем не обидели и не задели. Принимать советы или нет - дело Ваше. Я бы хотел найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить егоС трудом представляю ситуацию, в которой Вы не понимаете как сделать запоминание текущего состояния реле и по этому состоянию решать о включении/отключении реле.Заводим переменную, после каждого изменения состояния реле пишем в неё значение этого состояния, и перед каждым вкл/откл реле проверяем эту переменную (предыдущее состояние). Если оно изменилось - выполняем действие, не изменилось - ничего не делаем. Вот и вся магия... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
vova_ua Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 1. я не говорил что советы говно 2. мне не нужен триггер. Вопрос - найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его Так как желаемый алгоритм управления я также описал выше. Но с этим я сам разберусь после того как не без посторонней помощи исправлю баг с вызовом функции. 3. магия... Очень тонко подметили. Для Вас возможно это как азбука, для меня - магия 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Rhime Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 (изменено) Не знаю что такое s и с чем оно сравнивается. По этому как получится. Если, не понятная мне s имеет значение нужное значения для включения нагрева или чего там и не примет противоположное значение пока не выполнится условие, тогда как-то так. bool position=false; void relay (char s) { #asm ("cli") /* ATOMIC */ if( s) { /* SET */ if(position==false) { PORTC |= 0x10; delay_ms(50); PORTC &= ~0x10; position=true; }; } else { /* RESET */ if(position==true) { PORTC |= 0x20; delay_ms(50); PORTC &= ~0x20; position=false; } }; Вопрос одноразового исполнения кода - это отключение питания. Или отключение бесконечного цикла. Но как и в первом так и вовтором случае измерений не будет. Изменено 17 декабря, 2014 пользователем Rhime 0 - А совесть в курсе? - А совесть в доле! :-D Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле. Все грамматические ошибки являются авторским стилем изложения материала. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 найти баг в коде который есть причиной постоянного вызова функции (relay) мне не нужен триггерУ Вас противоречия Вам, как раз, и нужен триггер И найти Вам нужен не баг (его просто нет), а дополнить программу. Я написал каким образом дополнить. Не хотите слушать - дело Ваше. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey-Ufa Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 (изменено) мне не нужен триггер. Вопрос - найти баг в коде который есть причиной постоянного вызова функции (relay) и исправить его Постоянный вызов функции relay это не баг. Он вероятно заложен в программу специально, чтобы состояние реле точно соответствовало требованию контроллера. Вызов relay встроен через compare() вот отсюда: // Прерывание от DS1307 ежесекундно interrupt [EXT_INT1] void ext_int1_isr(void) { .................................................. compare(); // Сравнение температур } Можно изменить функцию compare так, чтобы она вызывала relay только тогда, когда контроллер изменяет состояние реле или каждые полчаса согласно вашим требованиям. Но при этом может пострадать надежность работы регулятора, так как контроллер будет исправлять возможную ошибку работы реле не каждую секунду, а лишь через полчаса. Код может выглядеть так: // Сравнение температур и выдача команды //============================================================== void compare (void) {static char RelayStatus; static int Time; Time++; if ((temp2-hyst)>=temp) // Желаемая тем-ра больше измеренной - вкл. реле {if((RelayStatus==0)||(Time>1800)) {relay(1); Time=0; RelayStatus=1; }; } else {if (temp>=(temp2+hyst)) // Желаемая тем-ра меньше измеренной - откл. реле {if((RelayStatus==1)||(Time>1800)) {relay(0); Time=0; RelayStatus=0; }; }; }; } Если я правильно понял Alex'а, RelayStatus исполняет роль того триггера, о котором он писал. Сразу говорю, что этот код не компилировался и досконально не проверялся и может служить лишь как подсказка, в каком направлении можно двигаться. Изменено 17 декабря, 2014 пользователем Sergey-Ufa 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Leon2009 Опубликовано 18 декабря, 2014 Поделиться Опубликовано 18 декабря, 2014 Здравствуйте всем.У меня тут новая заморочка.Решил все-таки разобраться,что же произошло с Баскомом.Ведь раньше все работало,а потом как кто подменил. Программатор USBASP,в меню программы он есть,она его поддерживает.Скорости для него выбраны в том же окошке 32 Кгц.При попытке программирования диодик на программаторе мигает,в микруху вроде все пишется,даже последующая сверка выдает,что все Ок,а прога не работает... Программирую используя Sinaprog 2.1.1. Программатор простой и удобный.Хексовские файлы откомпилированной Баскомом проги шьет,но и они не работают.... Проргамма в Баскоме.Отмечено какие использовал кнопки Это что выдал компилятор И,наконец,та же прога в микропаскале.Хекс код работает на ура. В чем дело? Может кто подскажет? Почему хексовские файлы баскома неработоспособны? Может где-то настройки барахлят? Баксом переустанавливал уже раза 4 и все попусту.Но ведь раньше работало! Он,правда,крякнутый,но раньше проблем не было. Прошу прощения.Тут забарахлил старый фотохостинг,а с новым еще не освоился и получился конфуз.Исправляюсь... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
KRISS Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 (изменено) Доброго всем времени суток. Проблему с кодом решить не могу ,дело вот в чем, значение "n" должно прибавляться при достижении "hag"=360, который в свою очередь работает от таймера, а оно(значение n) считает только до 7 и почему то сбрасывается сам собой, вопрос: почему? #include <avr/io.h> #include <avr/interrupt.h> int d=0; int n=0; volatile unsigned int hag = 0; unsigned char cw_dir[]= { (0b00000001),// 0-45 // 0 (0b00000101),// 45-90 // 1 (0b00000100),// 90-135 // 2 (0b00000110),// 135-180 // 3 (0b00000010),// 180-225 // 4 (0b00001010),// 225-270 // 5 (0b00001000),// 270-315 // 6 (0b00001001) // 315-360 // 7 };// по часовой ISR(TIMER0_OVF_vect)//OVF " срабатывает при переполнении" для оборотов { hag++; if (hag>=360) { n++; hag=0; } } int main(void) { DDRB = 0b00111111; // PB0, PB1, PB2, PB3... - выходы DDRD = 0b11111111; // инициализация D ADMUX |=(1<<REFS0) // источн напряж.AVcc |(0<<MUX3); // вход PORTC.0 GICR |= (1 << INT1) |(1 << INT0); // Разрешаем внешние прерывания MCUCR|= (1 << ISC01); // Прерывание по заднему фронту INT0 TCCR0=0b00000011;// запуск таймера и предделитель на 64 TIMSK|=(1<<0);//прерывание в вектор при переполнении sei();//глобально разрешаем прерывания TCNT0=0b00000000;//запуск счетчика 0 с нуля while(1) { //Hag(); vivod(); } } vivod() { PORTD=n; } объясните пожалуйста что не так. Заранее спасибо! Изменено 23 декабря, 2014 пользователем KRISS 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 объявите n как volatile или static 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
KRISS Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 К сожалению не помогает, ни volatile ни static, пробовал менять тип данных, результата никакого. Это может быть связано с портом вывода?? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 К сожалению не помогает, ни volatile ни static, пробовал менять тип данных, результата никакого. Это может быть связано с портом вывода?? у ПИКов может. у АВиРов не знаю, а если значение в порт выводить в прерывании по условию? что-то меняется 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
KRISS Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 Вы имеете в виду так? ISR(TIMER0_OVF_vect)//OVF " срабатывает при переполнении" для оборотов { hag++; if (hag>=360) { n++; hag=0; } PORTD=n; } Если идти таким способом то но считает все равно до 7(стабильно) 8 цифра срабатывет но сразу же сбрасывается. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 ISR(TIMER0_OVF_vect)//OVF " срабатывает при переполнении" для оборотов { hag++; if (hag>=360) { n++; PORTD=n; hag=0; } } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.