Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.181.209] |
|
Сообщ.
#1
,
|
|
|
1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/-
При использовании портов для "управления" сигналами, Беру ставлю порт на ввод- И он всегда равен =1 См. ниже. // 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кОм), после-> Какая нибудь кнопка (или контакт), после-> соеденяеться на землю Потом в коде if(PINB.7 == 0)//есть контакт { WaitUp();//Ждать "отпускания" кнопки }; Вопрос: Такой подход правильный? 2) Можно ли отказаться от использования внешнего Кварца? так как у меня "станция" не требует повышенной точности. Сразу юзать внутренний генератор. 3) Для чего нужен резистор "подтяжки", какую он выполняет функцию? 4) Обязательно ли все используемые порты I|O "обвязывать" резисторами? 5) При включении компонентов внешней электроники(Транзисторы, Оптопары, LED's) с МК подавать полюс + или -? И соответственно противоположенный полюс брать от "внешнего" источника питания. |
Сообщ.
#2
,
|
|
|
Цитата aster_x @ 1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/- Подавать можно любые, но не выходить за TTL уровень (желательно, но не критично). За Атмегу не скажу, но на ПИКах "долбили" порт фазовым 220В и ничего ему (порту) не делалось. Цитата aster_x @ Он стал входом. И подчиняется "законам" простой логики. Возьми любую микросхему, например К155ЛА3. Что у нее будет на неподключенных входах? Так же и здесь. И он всегда равен =1 Цитата aster_x @ "Физически" ножка через резистор(1.2кОм), после-> Какая нибудь кнопка (или контакт), после-> соеденяеться на землю Нет. Пин порта через резистор подтягивания на питание. И напрямую - сигнальный.Как в схеме с общим эмиттером включение коллектора. Цитата aster_x @ Вопрос: Такой подход правильный? Нет. За время нажатия будет не одно срабатывание (дребезг контактов). Нужно его отсеивать. По нажатию ставь флаг и продолжай работу. При следующем срабатывании проверяй и флаг и уровень - тогда можно решить - было отпускание или еще что - нибудь. Цитата aster_x @ 2) Можно ли отказаться от использования внешнего Кварца? Да. Но не требуй тогда работы на частоте порядка 8-16МГц. В даташите четко определены границы частот для каждого режима работы контроллера. Цитата aster_x @ 3) Для чего нужен резистор "подтяжки", какую он выполняет функцию? "Защита" от ложных срабатываний по наводкам. Если "в довесок" необходим четкий фронт сигнала - используй пины портов, на входе которых стоит триггер Шмидта. Цитата aster_x @ 4) Обязательно ли все используемые порты I|O "обвязывать" резисторами? Очень не помешает. Съэкономит кучу времени при доводке программы в железе, когда уже и внутрисхемный отладчик бессилен и остается только эмулятор и голова. Цитата aster_x @ 5) При включении компонентов внешней электроники(Транзисторы, Оптопары, LED's) с МК подавать полюс + или -? Без разницы, как решишь, раз взялся за схемотехнику. Но учти, что при первичном включении ВСЕ порты ввода вывода устанавливаются в 1 (т.е. на ввод). Это может привести к ложному срабатыванию исполнительного блока. И это придется как то учитывать/корректировать. |
Сообщ.
#3
,
|
|
|
Цитата medved_68 @ И напрямую - сигнальный. Как на прямую? А как я узнаю что "нажата кнопка" или замкнут контакт? Цитата medved_68 @ По нажатию ставь флаг и продолжай работу. То есть ... 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 Хорошо буду учитывать. |
Сообщ.
#4
,
|
|
|
Цитата aster_x @ 1) Инициализация портов, и Какие сигналы "управления" подавать на порты? +/- Биты портов в современных МК как правило управляются 2 битами - Data и Dir. Те есть 4 режима работы каждого вывода. Посмотри таблицу истинности, в документации она имеется. Если вывод порта не используется лучше сконфигурировать его как выход. Добавлено Цитата aster_x @ // 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кОм), после-> Какая нибудь кнопка (или контакт), после-> соеденяеться на землю Потом в коде 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. Вот так: PORTB=0xC0;//1-1-0-0-0-0-0-0 DDRB=0x01; |
Сообщ.
#5
,
|
|
|
Цитата aster_x @ То есть триггер Шмидта позволяет получать абсолютно "чистый" сигнал? Можно и так сказать. У сигнала, пропущенного через триггер, крутизна фронта/спада определяется характеристикой этого триггера, а не сигнала. Цитата aster_x @ Это есть в функциях МК? Да. В даташите указаны такие выводы. Цитата aster_x @ Как на прямую? А как я узнаю что "нажата кнопка" или замкнут контакт? Допустим - кнопка у тебя коммутирует землю. Т.е. при ее нажатии на выводе установиться низкий уровень. При отпускании - уровень определяемый резистором "подтяжки". Вот и все. |