Jump to content
Sign in to follow this  
metallic

Несколько Вопросов: Выбор Компилятора, Использование Си

Recommended Posts

Итак, после прочтения вводной документации и изучения архитектуры PIC-контроллеров среднего уровня, пришел к выводу, что для применения в радиолюбительской среде и для штучного изготовления устройств, ассемблер имеет мало смысла, т.к. достаточно сложен и запустан по сравнению с Си. У Си есть свои недостатки: это более громоздкая и соответственно более медленная программа, в сравнении с ассемблером, но как я уже сказал, любительское штучное изготовления устройств - это не массовый выпуск, где надо экономить на всем. Не хватило памяти? - не беда, возьмем контроллер побольше, да потолще biggrin.gif В общем, решил я, что на Си писать проще, быстрее и комфортнее.

В качестве компилятора выбрал ccs (ну просто в книге на его примере рассказывалось о Си). Попробовал сделать на базе контроллера 16F84A свою первую программу типа "hello world", по традиции мигание светодиодами (зеленый горит 2 сек, гаснет, мигает три раза красный и так по кругу), все получилось, с некоторыми оговорками (подробности ниже).

Теперь к вопросам.

1. Правильно ли я выбрал компилятор или есть что-то более религиозно верное?

2. Стоит ли использовать специфические конкретно для этого компилятора фичи, вроде #byte, #bit и т.д.? Т.к. многие, как я понял, ругают за использование этого функционала. Сам из минусов я вижу только отсутствие переносимости Си программ между компиляторами, в которых нет таких директив.

3. Как я понял, при написании своей первой программы, Си в контроллерах "не полноценный"? Конкретно столкнулся со следующей проблемой: компилятор ругался на цикл for, говорил, что эта часть кода не будет иметь эффекта, и действительно, после прошивки красный светодиод не моргал, см. скриншот. Т.е. получается чиклы for не поддерживаются? Т.к. после того как заменил его на цикл while - все заработало:

#include <main.h>


void main()
{

while(true)
{
output_high(LED_GREEN);
delay_ms(2000);
output_low(LED_GREEN);

int i = 3;
delay_ms(500);
while(i > 0){
output_high(LED_RED);
delay_ms(500);
output_low(LED_RED);
delay_ms(500);
i--;
}

}

}

4. И последний вопрос. Все же для общего развития хотел попробовать написать эту же программу на асме, пытаюсь создать проект в мплаб, указываю компилятор стандартный (см. 2 скрин) и получаю ошибку как на третьем скрине, что я делаю не так?

post-156072-0-70976200-1344768975_thumb.png

post-156072-0-78342100-1344769370_thumb.png

post-156072-0-48268400-1344769376_thumb.png

Share this post


Link to post
Share on other sites

@metallic, и снова привет (usb 4550, если забыл) :)

Идем по порядку...

ассемблер имеет мало смысла, т.к. достаточно сложен и запустан по сравнению с Си
Заблуждение первое - ассемблер намного более логичен и прост, но это вырастает в огромную массу простейших конструкций, из-за чего и становится запутанным...
У Си есть свои недостатки: это более громоздкая и соответственно более медленная
Это имеет значение только в случае с очень профи программистом ассемблера под конкретную платформу, любую прошивку новичка на асме любой си компилятор сделает куда эффективней (еще пример - миф о быстродействии операционных систем реального времени - из-за эффективности приемов применяемых проф. программистами при написании RTOS, она кажется быстрей медленных алгоритмов новичков даже несмотря на отъём ресурсов на нужды самой RTOS)...
выбрал ccs ... 1. Правильно ли я выбрал компилятор или есть что-то более религиозно верное?
У меня тоже он, полностью си-совместимый, за исключением особенностей платформы, код делает хороший и т.д. ...

Стоит ли использовать специфические конкретно для этого компилятора фичи, вроде #byte, #bit и т.д.
Пока нет, в дальнейшем - по необходимости...
Си в контроллерах "не полноценный"
В контроллерах вообще нет Си, в них даже ассемблера нет, если на то пошло :) И именно в этом задача компилятора - сделать из легко-понятной человеку структуры список машинных команд...
компилятор ругался на цикл for, говорил, что эта часть кода не будет иметь эффекта
Вероятно следствие объявления переменной в самом цикле, либо неверное написание ++i сказалось...
Т.е. получается чиклы for не поддерживаются?
Куда-ж без них :D
int i = 3;
Весьма плохая привычка - объявлять переменные в теле функций, путаницы значительно больше в итоге. Это оправдывается только разве что в условиях ограниченной памяти и когда надо её динамично распределять в алгоритмах ветвления...
и получаю ошибку как на третьем скрине, что я делаю не так?
Кривой MPLAB, ругается на недостачу файлов...

___

Тьфу блин... Ты перепутал второй и третий аргумент для for... (int8 i=0;i<9;++i) {}...

Edited by NebsteR

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

что для применения в радиолюбительской среде и для штучного изготовления устройств, ассемблер имеет мало смысла, т.к. достаточно сложен и запустан по сравнению с Си. У Си есть свои недостатки: это более громоздкая и соответственно более медленная программа, в сравнении с ассемблером, но как я уже сказал, любительское штучное изготовления устройств - это не массовый выпуск, где надо экономить на всем. Не хватило памяти? - не беда, возьмем контроллер побольше, да потолще :D В общем, решил я, что на Си писать проще, быстрее и комфортнее

это заблуждение... именно для радиолюбительской среды лучше асм , помогает очень хорошо усвоить архитектуру МК. практически все команды асма это сокращения:

addwf REG,d

add = сложить

w = аккумулятор и

f = регистр где

REG = адрес регистра

d = указатель куда помещается результат в регистр или аккулулятор

на этом его преимущества перед Си заканчиваются...

а вот программы надо учится писать правильно...

то что вы написали иначе как быдлокод не назовешь: вогнать МК в ступор на две секунды командой delay_ms(2000) это в среднем два миллиона команд потерянных в пустую :( если так будите продолжать дальше, то большего как помигать СД вы от МК не добьетесь ;)

сходите на сайт Тимофеева там очень полезные статьи по написанию прог...

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

@metallic, и снова привет (usb 4550, если забыл) :)

Помню, как же :)

Заблуждение первое - ассемблер намного более логичен и прост, но это вырастает в огромную массу простейших конструкций, из-за чего и становится запутанным...

Ну если посмотреть с этой стороны - да, есть три десятка команд и все. Но, простейшая команда на Си разворачивается в ассемблере в несколько команд, а то и десяток. Я имею ввиду, что в итоге если смотреть две одинаковые программы на асме и на Си - на Си будет более читабельной, плюс чтобы писать на Си не нужно настолько хорошо знать внутренюю архитектуру проца, асм он ближе к железу все же.

У меня тоже он, полностью си-совместимый, за исключением особенностей платформы, код делает хороший и т.д. ...

Ну и хорошо, на нем и остановлюсь

Си в контроллерах "не полноценный"
В контроллерах вообще нет Си, в них даже ассемблера нет, если на то пошло :) И именно в этом задача компилятора - сделать из легко-понятной человеку структуры список машинных команд...

Ну строго говоря да, это я просто абстрактно выразился.

Т.е. получается чиклы for не поддерживаются?
Куда-ж без них :D

Ясно, значит где-то сам накосячил.

int i = 3;
Весьма плохая привычка - объявлять переменные в теле функций, путаницы значительно больше в итоге. Это оправдывается только разве что в условиях ограниченной памяти и когда надо её динамично распределять в алгоритмах ветвления...

Ну не вижу смысла временную переменную, которая используется только в этом участке кода, выносить в глобальную секцию.

и получаю ошибку как на третьем скрине, что я делаю не так?
Кривой MPLAB, ругается на недостачу файлов...

Попробую переинсталить

Тьфу блин... Ты перепутал второй и третий аргумент для for... (int8 i=0;i<9;++i) {}...

Точно :) Давно на Си не писал просто, все на python последнее время :)

это заблуждение... именно для радиолюбительской среды лучше асм , помогает очень хорошо усвоить архитектуру МК. практически все команды асма это сокращения:

addwf REG,d

add = сложить

w = аккумулятор и

f = регистр где

REG = адрес регистра

d = указатель куда помещается результат в регистр или аккулулятор

Я это все прекрасно понял, в книге, по которой учил архитектуру 18f84a, как раз все примеры на асме и его идею я понял, все делается через рабочий регистр с плясками с бубном :) А если мне так глубоко архитектуру знать не надо, как раз на Си будет кодить проще

а вот программы надо учится писать правильно...

то что вы написали иначе как быдлокод не назовешь: вогнать МК в ступор на две секунды командой delay_ms(2000) это в среднем два миллиона команд потерянных в пустую :( если так будите продолжать дальше, то большего как помигать СД вы от МК не добьетесь ;)

сходите на сайт Тимофеева там очень полезные статьи по написанию прог...

У меня задача была впервые самостоятельно запустить любую программу на МК, попутно освоив компилятор, программатор и прочие средства, а идеологическая верность программы - это не так важно на данном этапе.

Теперь когда я основил инструментарий, можно писать более правильные программы.

Вообще меня очень интересует ethernet/gsm для МК, если у кого есть что-то на эту тему - просьба поделиться. Для сетки у меня уже есть PIC18F67J60-I/PT и сетевой разьем с трансформатором встроенным, также есть в хозяйстве pic18f4550, было бы неплохо собрать какой-нибудь рабочий пример, чтобы по сети можно было заставить контроллер зажечь/потушить светодиод.

Edited by metallic

Share this post


Link to post
Share on other sites
Ну не вижу смысла временную переменную, которая используется только в этом участке кода, выносить в глобальную секцию.
Не в глобальную, в локальную, но в самом начале функции...

void main()
{
  int8 x=0,y=5;
  ...
  код
  ...
}

Share this post


Link to post
Share on other sites
Вообще меня очень интересует ethernet/gsm для МК, если у кого есть что-то на эту тему - просьба поделиться.

блин ну дал же ссылку

Share this post


Link to post
Share on other sites

Что-то с ходу в доках не нашел, как в Си(ccs) сконфигурировать порты как входные или выходные?

Share this post


Link to post
Share on other sites

о уже пошли первые проблемы нежелания учить асм и архитектуру МК :D

то ли еще будет , когда до прерываний добиретесь :ph34r:

Edited by IMXO

Share this post


Link to post
Share on other sites

Изначально они все на вход, высокоомные. Непосредственно сконфигурировать можно, манипулируя регистрами TRIS, но в общем случае на это можно забить, соответствующие операторы сами это сделают... Т.е. можно либо напрямую записывать/читать регистры, либо использовать Set_TRIS_x(), Get_TRIS_x();

ЗЫ: все это легко ищется в хелпе компилятора и в даташите на мк, если что :)

то ли еще будет , когда до прерываний добиретесь ph34r.gif
Аплодирую! :D

Share this post


Link to post
Share on other sites

Изначально они все на вход, высокоомные. Непосредственно сконфигурировать можно, манипулируя регистрами TRIS, но в общем случае на это можно забить, соответствующие операторы сами это сделают... Т.е. можно либо напрямую записывать/читать регистры, либо использовать Set_TRIS_x(), Get_TRIS_x();

Я почему спросил, я тоже где-то в доке встречал, что например output_hight(PORT) сам переведет порт в режим выход.

Я попробовал запустить пример http://we.easyelectronics.ru/PIC/programmirovanie-pic-na-s-ccs-pic-c-compiler.html

Там вот такой простой код:

while(1)  
      {   
       while(input(PIN_A0))     
        {   
         output_high(PIN_A1);   
         delay_ms(500);         
         output_low(PIN_A1);  
         delay_ms(500);                
        }   
       output_low(PIN_A1);     
      }   

Ключевая строка сдесь while(input(PIN_A0)), как я понимаю, порт ф-ией input переводит в режим "вход" и пока на входе высокий уровень - моргает светодиод. Как только нажимается кнопка (вход замыкается на землю) - на входе получается низкий уровень и светодиод перестает моргать.

Собрал я этот макет, все работает. Но осталось куча не понятностей.

Во-первых, как я думал, на входе А0 высокий уровень появляется от плюса питания, т.е. согласно схеме, ко входу А0 подключен плюс питания через резистор 10кОм, поэтому там высокий уровень, когда кнопка нажимается, вход замыкается на землю и там получается низкий уровень. Насколько я понимаю, не обязательно нажимать кнопку, чтобы получить низкий уровень на А0, достаточно разорвать цепь А0 -> резистор -> +5В, но не тут то было, светодиод продолжает моргать, а на входе присутствует 2-3В напряжение, при этом кнопка продолжает работать, т.е. получается соединять А0 с питанием не обязательно. Но если все же соединить через резистор, на А0, как я и ожидал, напряжение 5В.

В общем сейчас я в небольшом ступоре, т.к. я думал, что все понял про работу портов, а оказалось, что они работают не так, как я думал. Конкретно мне не понятно, откуда высокий уровень(2.2В) на входном порту А0, если к нему ничего не подключено? Или 2.2В - это не высокий уровень?

d1ab56.jpg

о уже пошли первые проблемы нежелания учить асм и архитектуру МК :D

то ли еще будет , когда до прерываний добиретесь :ph34r:

Да я более-менее разобрался в архитектуре и как сделать это на асме знаю. По прерываниям у меня, вроде, есть примеры и на асме и на си.

Кстати что такое прерывания на физическом уровне? Допустим есть порт INT у контроллера, чтобы создать прерывание на нем что нужно, дать импульс на этот порт? Замкнуть его на землю или что?

Share this post


Link to post
Share on other sites
В общем сейчас я в небольшом ступоре, т.к. я думал, что все понял про работу портов, а оказалось, что они работают не так, как я думал.

как говорится если все методы испробованы и метод научного така не сработал - попробуйте прочитать инструкцию

ЗЫ вы еще больше удивитесь когда все это соберете в железе

если непосредственно для INT, то переход с лог1 в лог0 или наоборот в зависимости от настроек

для RBI(GPI) - изменение уровня

Edited by IMXO

Share this post


Link to post
Share on other sites
откуда высокий уровень(2.2В) на входном порту А0, если к нему ничего не подключено
Из воздуха... Что я говорил в той теме про чушь на свободных ногах АЦП? Наводки... Если разорвать цепь с подтяжкой к питанию, на входе будет неизвестно что... Следовательно надо искусственно создать ситуацию, когда нога либо гарантированно подключена к питанию, либо к земле, что и реализовано...

А вообще, если честно, с такими вопросами... Скажем так, рано думать даже о чем-нибудь простом, не говоря про ethernet... PC программирование имеет с программированием мк общего только то, что и то и другое выполняется посредством PC компиляторов и клавиатуры, и на этом сходство заканчивается...

Share this post


Link to post
Share on other sites

ЗЫ вы еще больше удивитесь когда все это соберете в железе

Я и так все собираю, за сегодня 16ф84а уже раз 10 прошил :)

если непосредственно для INT, то переход с лог1 в лог0 или наоборот в зависимости от настроек

для RBI - изменение уровня

Точно, припоминаю что-то. Только не понятно, изменение уровня должно быть кратковременным или постоянным? Т.е. импульс? И какой он должен быть по времени, имеет значение?

откуда высокий уровень(2.2В) на входном порту А0, если к нему ничего не подключено
Из воздуха... Что я говорил в той теме про чушь на свободных ногах АЦП? Наводки... Если разорвать цепь с подтяжкой к питанию, на входе будет неизвестно что... Следовательно надо искусственно создать ситуацию, когда нога либо гарантированно подключена к питанию, либо к земле, что и реализовано...

Понял, теперь в голове более-мение уложилось.

А вообще, если честно, с такими вопросами... Скажем так, рано думать даже о чем-нибудь простом, не говоря про ethernet... PC программирование имеет с программированием мк общего только то, что и то и другое выполняется посредством PC компиляторов и клавиатуры, и на этом сходство заканчивается...

Я и не говорю, что уже завтра возьмусь сетку кодить, я и начинаю с простого, чтобы понять всю эту систему изнутри. Ну и опыт программирования на PC и знание TCP/IP тут лишними не будут

Share this post


Link to post
Share on other sites
Да я более-менее разобрался в архитектуре

вы в ней еще долго разбираться будите...

как по вашему сколько регистров отвечают за работу порта?

даю подсказку:

post-124881-0-85371100-1344793667_thumb.jpg

Share this post


Link to post
Share on other sites

Сделал некоторый обзор компиляторов и заглянул немного в будущее, т.е. посмотрел про pic + ethernet. Так вот, как я понял, есть свободно распространяемый tcp/ip стек от конторы микрочип, написан он под компилятор с18 и использовать его вместе с компилятором ccs не получится (поправьте меня, если не прав).

Также выяснил, что у конторы разработчика ccs есть свой сетевой стек под свой компилятор, но он(стек) не первой свежести и уже давно не обновлялся(поправьте меня, если не прав).

Соответственно, если меня интересует езернет, то на текущем этапе, когда я толком не освоил еще ни одного компилятора, мне лучше сразу начать с того, под который есть интересующий меня софт, т.е. с18

По первым субъективным ощущениям с18 немножко посложнее, хотя и ближе к асемблеру, это плюс :)

Также вопрос по 18F4550 еще: его можно запускать без юсб? Т.е. просто на VSS и VDD подать 5 вольт, и MCLR через 10кОм замкнуть на плюс(при этом не задействуя ноги 23 и 24)?

А то боюсь спалить :)

Share this post


Link to post
Share on other sites
Также вопрос по 18F4550 еще: его можно запускать без юсб?
Можно. Но зачем? Зашить туда бутлоадер и оперативно менять прошивки через тот же USB.

Share this post


Link to post
Share on other sites
Также вопрос по 18F4550 еще: его можно запускать без юсб?
Можно. Но зачем? Зашить туда бутлоадер и оперативно менять прошивки через тот же USB.

Для этого специальный прошивальщик нужен или winpic подойдет?

Share this post


Link to post
Share on other sites

Конечно подойдет Winpic! Один раз прошить бутлоадер, а дальше специальной программой MCHPFSUSB (которую можно взять на сайте Микрочип) зашивать и стирать прошивки через ЮСВ. НЕХ бутлоадера находится там же.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
  • Сообщения

    • https://coil32.ru/calc/ferrite-permeability.html похоже на правду T130-52 https://micrometalsarnoldpowdercores.com/pdf/T130-52-DataSheet.pdf нач.маг.прон. - 75 100 витков   получилось нач.магн.прон - 57u AL - 60 цвет правда №52 у салатово-голубой, или действительно пермалой впендюрили, он серый с цифирками. сендаст или чёрный или синий..  эти фактически не портятся... схема Epsilon FSP500-80GLN
    • @ART_ME Сопли жуёт,на Фалкониста бочку катит,бедному репутацию снижают,а он покрывает!!!Ну ты и СУКА!!!ДОСТАЛ КОНКРЕТНО,ЗАСЛАННЫЙ"КАЗАЧОК"!!!!
    • Так, хорош накуй Спасибо за фильм 
    • Спасибо всем - разобрался. Что-то у APEX AX6 (он же Sansui  AU-101) параметры не очень. У Leak 30+ параметры по симулятору сильно лучше.
    • 8, обмотка со средней точкой.  А ХЗ. Блок схему рисовать некогда, да и неудобно с телефона, попробую на словах: БП общий на 2 канала, мекка всех потребителей на конденсаторах фильтра, предусилитель в формате стерео, мощники двойное моно. Итого на платы мощников приходит силовая земля от БП, на которой сидит Цобель, конденсаторы шунта, которые пленочные и еще что-то из защиты. На сигнальной земле сидит все остальное, как-то ФНЧ, опоры ГСТ и кондей ОООС. Сигнальная земля сама по себе приходит с ПУ по экрану, а на ПУ приходит с мекки общего БП. Оттуда же берутся и земли каналов, причем тянутся отдельными проводами, а не просто от одной клеммы к другой.
    • ещё как интересно, я же не рассказал о том, как именно он худеет... как из рогатки внучка цыгана пробивают ладонь насквозь, в кого превращается прокурор (вроде)... про проклятие белого человека из города и прочую куиту.
    • Добавлю схемку земель.   OM 2.5 Into Sony TA-FE370 1.spl7
  • Покупай!

×
×
  • Create New...