Jump to content

Splav

Members
  • Content Count

    89
  • Joined

  • Last visited

Community Reputation

7 Обычный

About Splav

  • Rank
    Осваивающийся

Информация

  • Пол
    Мужчина
  • Город
    Украина, Керчь

Электроника

  • Стаж в электронике
    Не связан с электроникой

Recent Profile Visitors

2104 profile views
  1. @Alex а версия компилятора ХС8 RPO стоит того, что бы ее покупать? Интересен взгляд человека который владеет и пользуется. Оптимизация сильно влияет на размер и скорость выполнения кода? Есть ли какие-то еще полезные и стоящие плюшки?
  2. @Alex алгоритм не полный вышел, нагрузка включается при переполнении или при равенстве 0xFF. Проверка на больше и на равенство. Вот кусок из асм программы, почти как из листинга)) Вариант на Си получился очень больше в размере после компиляции. Но очень наглядный при написании. Это, конечно же ни для кого не секрет. Но есть куда расти и к чему стремиться. Все ведь только началось. @valentinovich может вы гениальная личность и изучение нового материала с умением его применить наступает мгновенно, но обычным смертным требуется на это время. Для усвоения, закрепления и приобретения навыков применения. Изучение происходит в свободное от основной деятельности время, несистемно. К тому же, программирование никак не связано с основным родом деятельности даже близко, это увлекательное хобби, поэтому, если даже асм не в "правильных блоках", не оптимален - я от этого не страдаю, при любом раскладе мне это приносит удовлетворение. Со временем получается намного лучше.
  3. @Alex спасибо, именно так это и работает в асме. Есть готовая рабочая программа. Быстрый алгоритм для обработчика прерывания. Регулятор мощности собран в железе. Сейчас начал изучать Си, поэтому решил тренироваться написать программы которые уже работают на асме и потом можно сравнивать. Но философия асма и Си отличаются. Обучение проходит в муках)))
  4. @ruhi изначально предполагалось использовать unsigned char a, отсюда вопрос по контролю переполнения. Позже стало ясно, что проще будет использовать unsigned int a. Но вы пропустили этот момент мимо. Вы смешной, пишите исчо, очень интересно.
  5. @ruhi что происходит в 8-ми битной переменной, если при сложении ее значение оказывается больше 0хFF? OxFA + 0x30, например? Какой результат сложения? Какое числовое значение будет? Вам не знаком термин остаток от переполнения? Вы не понимаете почему он важен и какой от него смысл? Не понимаю зачем тогда вы находитесь в профильном форуме. Да и ваши знания в математике тоже вызывают сомнения. Ваши версии выгладят бредово от недостатка знаний, тут уж никто не в силах помочь. В продолжении полемики не вижу смысла, читайте книги и прибудет с вами сила. Возможно. Но это не точно.
  6. @Yurkin2015 Да,верно, но выход неожиданно был найден. unsigned char x; void error (void){ static unsigned int a; a = x + a; //суммарная ошибка; if(a>=255){ // контроль максимума и переполнения; a = a - 255; // в обоих случаях необходимо привести к значению a<255; triac_pin = 1;// накопленная ошибка превысила допустимую, включить нагрузку; } } Получилось просто и понятно. Всем участвующим спасибо за наводящие вопросы и мнения, без этого бы не произошло.
  7. @ruhi это часть реальной задачи. Алгоритм Брезенхама. В "а" находится суммарная ошибка, как только переполнение или равенство максимуму - включить нагрузку. Куда же еще реальнее задача чем эта? Если контролировать переполнение и равенство, то больше никакой математики не надо. Проверка в прерывании, поэтому время имеет значение. Если переполнилось, то остаток уже находится в переменной. Если равенство, то сбросить переменную и включить нагрузку. В ассемблере этот алгоритм работает в железе. Теперь пришла очередь Си. А удивлять вы можете свою жену/подругу/детей/знакомых/соседку или еще кого нибудь(нужное подчеркнуть), я прошу конструктивного совета в конкретном вопросе. Конструктивные замечания будут? @IMXO спасибо. Двухбайтная переменная сразу решит все мои проблемы. @Yurkin2015 спасибо, ксор и логическое НЕ выглядят лучше, да, перегнул. А как лучше проверить на максимум? Вычитание 0xFF и проверкой на ноль - будет быстрее, ведь так?
  8. Доброго времени суток, уважаемые форумчане. Си, компилятор XC8. Появилась необходимость контролировать переполнение 8-ми битной переменной после операции сложения. Или использовать 16 битную переменную и раздувать объем? Все события будут в прерывании и стараюсь не делать лишних движений. Похожего решения пока не нашел. Думается, что будет выглядеть следующим образом: Я правильно улавливаю суть?
  9. @my504 Спасибо. Изучение Си началось не так давно, возникают вопросы, которые глупые. Пока все кажется новым, непонятным и непривычным. Знаний не достаочно. Опытного наставника рядом нет, подсказать и объяснить некому. Поэтому форум. Со временем, надеюсь, количество глупых вопросов будет уменьшаться.
  10. @Yurkin2015 Спасибо. Вчера в книге С.Катцена все таки нашел вскользь от этом упоминание. Компилятор CSS все далает сам. И в книге Уилмсхерста с компилятором C18 тоже вскользь об этом, но он PIC18 рассматривает, они от PIC16 отличаются. А надо ли в PIC16 указывать адрес прерывания, как это делается в PIC18, для разведения по сторонам прерывания высокого приоритета и низкого? Или будет достаточно написать void interrupt isr(void) { ....//опросить нужные флаги, отреагировать } и больше ничего?
  11. Доброго времени суток. Помогите разобраться. Начал изучать Си после Асм. Возник вопрос. Прерывания. Сохранение контекста, как с ним быть? Микроконтроллер PIC16. На асме все было понятно, сохранил контекст - опросил флаги - обработал - восстановил контекст и вернулся к главному циклу. А как в Си? В литературе не нашел примеров сохранения контекста в Си для PIC16. Обработчик прерывания сразу делает работу и все. Например, есть регулятор мощности на МК, по внешнему прерыванию считает ошибку по Брезенхему и принимает решение включать нагрузку в этот полупериод или нет. Быстрый код, по крайней мере в асме. В главном цикле занимается опросом АЦП, усреднением, и выводом информации на LCD - долгие процессы, особенно управление LCD. Если не сохранить контекст при входе в обработчик прерывания, то возникнут проблемы в главном цикле после возвращения в него. Как это правильно реализовать на Си? Программа во время компиляции сама ведь не сгенерирует необходимый код для правильного сохранения контекста Помогите разобраться, а лучше книжку посоветуйте где объяснения есть.
  12. @valentinovich Я вас не понимаю. Честно. Несколько раз пытался, но не смог. Вы мне пытались объяснить какое-то решение, которое не такое сложное, но такое же эффективное? Из этих слов я ничего не понял, наверное, не такой умный как вы. И почему вы решили, что что-то не срослось и не получилось? Все свои перечисленные требования к устройству выполнил. Схему собрал в железе и испытал. Все работает как хотелось изначально. Бонусом к отсутствию помех получил - равномерное распределение импульсов, а не работа пачками, гальваническая развязка, относительная простота для схем работающих по выбранному принципу регулирования мощности. Можно регулировать паяльник 25 ватт, а можно нагреватель на 1-2кВт. Во втором случае перечисленные бонусы будут полезными. Об этом было сказано выше. Если вы внимательно читали, то правильных идей я не просил, учить никого не пытался. Схема была предоставлена "как есть", из расчета что будет кому-нибудь полезна. А к критикам "для меня это очень сложно, я не понимаю поэтому какашка", таким как вы, всегда спокойно отношусь. Цитировать в споре субъективное мнение третьего лица это просто вишенка на торте)) Добавил вторую прошивку. Pic12F675_Power_reg_Bresenham_half_cycle - регулирование мощности пропусками полупериодов сетевого напряжения в нагрузку. Прошивка из первого поста. Pic12F675_Power_reg_Bresenham_full_cycle - регулирование мощности пропусками полных периодов сетевого напряжения в нагрузку. Ток всегда симметричен. Pic12F675_Power_reg_Bresenham_full_cycle.hex Pic12F675_Power_reg_Bresenham_half_cycle.hex
  13. @Falconist При регулировании мощной нагрузки будет важно распределение импульсов во времени. Например 30%. Значит 3 импульса из 10 уйдут в нагрузку, 7 ожидание. Таймер будет делать пачки 3 импульса подряд, 7 пропуск и так по кругу. Алгоритм Брезенхема будет пропускать каждый третий импульс в нагрузку. Более равномерное распределение очевидно. Выше писали про то как заморгали лампочки в подъезде от дискретного регулятора. Такой же эффект наблюдал иногда в паяльных станциях при работе фена. Кстати, я никого не призываю и не агитирую на повторение. Делать или нет решает каждый для себя сам, исходя из своих сил, умений и желаний.
  14. @Falconist Про синхронизацию поясню подробнее. Мк получает импульс и происходит прерывание. В прерывании МК считает мощность и зажигает или не зажигает светодиод отптопары. Расчет целочисленный без реализации ПИДа, поэтому очень быстрый - занимает всего 9мкс в худшем случае. Так же запускается таймер если оптопара зажглась (начало отсчета 5мс задержки), что бы погасить светодиод оптопары на пике полуволны - симистор будет гарантированно открыт и удерживать заженой оптопару уже не имеет смысла. Читал что импульса в 2мс достаточно, но решил, что так будет надежней. В обработке прерывания МК ставит флаг, который разрешает работу основного цикла. В основном цикле происходит измерение напряжения на R6, процесс этот относительно долгий и в быстрое прерывание ему нельзя. После этого программа основного цикла переходит к ожиданию флага из прерывания. Таким образом, прерывания максимально короткие и реакция на событие своевременная, без опозданий. Получили событие - почти мгновенно на него отреагировали. В основном цикле происходит вся работа, требующая времени. @avv_rem я же сразу написал, что регулятор для нагревателей. Лампочки в подъезде моргают скорее всего, что сеть слабая, это следствие. Зудящие моторы хододильников это тоже следствие слабой сети и недостатка управления полупериодами. При нечетном количестве происходит подмагничивание из-за несиметрии тока в синусоиде. Для того, что бы избавится от вероятности подмагничивания надо управлять целыми периодами - ток будет симметричным. От стрелочного вольтметра, если он не среднеквадратичный вообще толка будет мало, хоть на полупериодном управлении, хоть на фазоимпульсном. Форма напряжения далека от синусоиды - погрешность будет конская.
×
×
  • Create New...