На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
  
    > Вопросы по использованию микроконтроллеров. , MC = ATMEGA16
      1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/-
      При использовании портов для "управления" сигналами, Беру ставлю порт на ввод- И он всегда равен =1
      См. ниже.
      ExpandedWrap disabled
        // Port B initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
        // State7=P State6=T State5=T State4=T State3=T State2=T State1=T State0=1
         
        //portb.6-7 работают как ввод
        PORTB=0xC0;//1-1-0-0-0-0-0-0
        DDRB=0x01;

      "Физически" ножка через резистор(1.2кОм), после-> Какая нибудь кнопка (или контакт),
      после-> соеденяеться на землю
      Потом в коде

      ExpandedWrap disabled
             if(PINB.7 == 0)//есть контакт
             {
             WaitUp();//Ждать "отпускания" кнопки
             };

      Вопрос: Такой подход правильный?

      2) Можно ли отказаться от использования внешнего Кварца?
      так как у меня "станция" не требует повышенной точности.
      Сразу юзать внутренний генератор.

      3) Для чего нужен резистор "подтяжки", какую он выполняет функцию?

      4) Обязательно ли все используемые порты I|O "обвязывать" резисторами?

      5) При включении компонентов внешней электроники(Транзисторы, Оптопары, LED's)
      с МК подавать полюс + или -?
      И соответственно противоположенный полюс брать от "внешнего" источника питания.
        Цитата aster_x @
        1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/-

        Подавать можно любые, но не выходить за TTL уровень (желательно, но не критично). За Атмегу не скажу, но на ПИКах "долбили" порт фазовым 220В и ничего ему (порту) не делалось.
        Цитата aster_x @
        И он всегда равен =1
        Он стал входом. И подчиняется "законам" простой логики. Возьми любую микросхему, например К155ЛА3. Что у нее будет на неподключенных входах? Так же и здесь. :D
        Цитата aster_x @
        "Физически" ножка через резистор(1.2кОм), после-> Какая нибудь кнопка (или контакт),
        после-> соеденяеться на землю

        Нет. Пин порта через резистор подтягивания на питание. И напрямую - сигнальный.Как в схеме с общим эмиттером включение коллектора.
        Цитата aster_x @
        Вопрос: Такой подход правильный?

        Нет. За время нажатия будет не одно срабатывание (дребезг контактов). Нужно его отсеивать. По нажатию ставь флаг и продолжай работу. При следующем срабатывании проверяй и флаг и уровень - тогда можно решить - было отпускание или еще что - нибудь. :D
        Цитата aster_x @
        2) Можно ли отказаться от использования внешнего Кварца?

        Да. Но не требуй тогда работы на частоте порядка 8-16МГц. В даташите четко определены границы частот для каждого режима работы контроллера.
        Цитата aster_x @
        3) Для чего нужен резистор "подтяжки", какую он выполняет функцию?

        "Защита" от ложных срабатываний по наводкам. Если "в довесок" необходим четкий фронт сигнала - используй пины портов, на входе которых стоит триггер Шмидта.
        Цитата aster_x @
        4) Обязательно ли все используемые порты I|O "обвязывать" резисторами?

        Очень не помешает. Съэкономит кучу времени при доводке программы в железе, когда уже и внутрисхемный отладчик бессилен и остается только эмулятор и голова. ;)
        Цитата aster_x @
        5) При включении компонентов внешней электроники(Транзисторы, Оптопары, LED's)
        с МК подавать полюс + или -?

        Без разницы, как решишь, раз взялся за схемотехнику. Но учти, что при первичном включении ВСЕ порты ввода вывода устанавливаются в 1 (т.е. на ввод). Это может привести к ложному срабатыванию исполнительного блока. И это придется как то учитывать/корректировать. :D
          Цитата medved_68 @
          И напрямую - сигнальный.

          Как на прямую? А как я узнаю что "нажата кнопка" или замкнут контакт?


          Цитата medved_68 @
          По нажатию ставь флаг и продолжай работу.

          То есть ...
          ExpandedWrap disabled
            int myvar =0;
            if(PINB.7 == 0 && myvar ==0)//есть контакт
            {
            myvar = 1;//нажат
            }
             
            if(PINB.7 == 1 && myvar ==1)//есть контакт
            {
            //Тут обрабатывается отжатие кнопки
            myvar = 0;//нажат
            }

          примерно Так?



          Цитата medved_68 @
          Но не требуй тогда работы на частоте порядка 8-16МГц

          Мне достаточно 1000 раз на секунду. Проверка портов.

          Цитата medved_68 @
          на входе которых стоит триггер Шмидта.

          То есть триггер Шмидта позволяет получать абсолютно "чистый" сигнал?
          Это есть в функциях МК? Или его нужно отдельно "впаивать"?


          Цитата medved_68 @
          Но учти, что при первичном включении ВСЕ порты ввода вывода устанавливаются в 1

          Хорошо буду :unsure: учитывать.
            Цитата aster_x @
            1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/-

            Биты портов в современных МК как правило управляются 2 битами - Data и Dir.
            Те есть 4 режима работы каждого вывода.
            Посмотри таблицу истинности, в документации она имеется.
            Если вывод порта не используется лучше сконфигурировать его как выход.

            Добавлено
            Цитата aster_x @
            ExpandedWrap disabled
              // Port B initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
              // State7=P State6=T State5=T State4=T State3=T State2=T State1=T State0=1
               
              //portb.6-7 работают как ввод
              PORTB=0xC0;//1-1-0-0-0-0-0-0
              DDRB=0x01;

            "Физически" ножка через резистор(1.2кОм), после-> Какая нибудь кнопка (или контакт),
            после-> соеденяеться на землю
            Потом в коде

            ExpandedWrap disabled
                   if(PINB.7 == 0)//есть контакт
                   {
                   WaitUp();//Ждать "отпускания" кнопки
                   };

            Вопрос: Такой подход правильный?

            Я так не делаю.
            На моц взгляд, работу с портвми лучше заменить макросами
            с подходящими именами.
            Приблизительно так:
            #define INSTALL_PORTB (PORTB=0xC0;DDRB=0x01;)
            #define CHECK_BTN_xxNAME (PINB.7==0)

            Добавлено
            Цитата aster_x @
            3) Для чего нужен резистор "подтяжки", какую он выполняет функцию?

            Порт "на ввод" работает в 2-х режимах - с подключением внутренней подтяжки (~100Ком)
            или без подтяжки вообще.
            Это весьма высокие входные сопротивления.
            Если подключить такие входы к длинным проводам в результате работы
            любого силового оборудования возможна гибель пина из-за внешних наводок.
            Поэтому чем меньше сопротивление подтяжки, тем лучше.

            Добавлено
            Цитата aster_x @
            5) При включении компонентов внешней электроники(Транзисторы, Оптопары, LED's)
            с МК подавать полюс + или -?
            И соответственно противоположенный полюс брать от "внешнего" источника питания.

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

            Если нагрузка принципиально питается от более высокого напряжения, используй
            преобразователи уровня - транзисторы, оптроны..

            После сигнала RESET все пины в режиме "на ввод".
            Это значит, что потенциал на предполагаемом выходе целиком
            определяется внешними схемами. В том числе резистором подтяжки.

            Во время инициализации порта правильнее сначала
            прописать данные, потом установить Dir.

            Вот так:
            ExpandedWrap disabled
              PORTB=0xC0;//1-1-0-0-0-0-0-0
              DDRB=0x01;
            Сообщение отредактировано: ЫукпШ -
              Цитата aster_x @
              То есть триггер Шмидта позволяет получать абсолютно "чистый" сигнал?

              Можно и так сказать. У сигнала, пропущенного через триггер, крутизна фронта/спада определяется характеристикой этого триггера, а не сигнала.
              Цитата aster_x @
              Это есть в функциях МК?

              Да. В даташите указаны такие выводы.
              Цитата aster_x @
              Как на прямую? А как я узнаю что "нажата кнопка" или замкнут контакт?

              Допустим - кнопка у тебя коммутирует землю. Т.е. при ее нажатии на выводе установиться низкий уровень. При отпускании - уровень определяемый резистором "подтяжки". Вот и все. :D
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0391 ]   [ 14 queries used ]   [ Generated: 12.05.24, 14:33 GMT ]