реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Не могу собрать простейшую схему с кнопкой и диодом, Вернее могу, но она работает не так как я расчитывал
alex112
сообщение Apr 16 2012, 15:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



Решил начать осваивать программирование на AVR. Была приобретена вот такая вещь (http://www.chipdip.ru/product/me-easyavr6.aspx), был скачен протеус и понеслось.
С примерами что в протеусе, что в макетке проблемм не возникло и решил я чего то напроектировать сам.

В протусе. Взял Atmega16, повесил на ножку B0 кнопку, кнопку кинул на землю. На С0 повесил диод и его тоже на землю кинул. Написал программку:

if (Button(&PORTB,1,1) {
PORTC=0x01;
}
else {
PORTC=0x00;
}
примерно такую, пишу по памяти.

Запускаю симуляцию: нажимаешь на кнопку, диод гаснет, отпускаешь - загорается. Ладно, допустим (хотя почему такое получается? Откуда берется единица на B0?). Пытаемся повторить тоже самое на макетной плате. В приложении фотка как кнопки подключены
http://electronix.ru/forum/style_images/1/.../attach_add.png
переключил J13 на землю, воткнул J18 еще и.... ничего. Вообще никакой реакции. Опять же вопрос, почему в симуляторе работает, а тут нет?

идем дальше, возвращаем на макетной плате все обратно, шьем прошивку и работает все так как и надо -при нажатии на кнопку диод загорается, а при отпускании кнопки - гаснет. Т.е. абсолютно наоборот, нежеле в симуляторе. Но в симуляторе кнопка на землю заведена а в макетке - на питание, я так понимаю.
Тк вот вопрос: где в протеусе этот самый элемент питания? Нашел какой-то INPUT, и вроде даже заработало, но только на один раз - нажал, загорелось и все. Не гаснет после отпускания кнопки.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 16 2012, 17:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(alex112 @ Apr 16 2012, 18:47) *
if (Button(&PORTB,1,1) {



1. PORTB.1.1 - это первый разряд, а не нулевой
2. А кто линии МК на ввод/вывод настраивал ?
3. Схема потенциально опасная - можно сжечь МК за милую душу. Вы бы хоть книжку по АВР перед этим почитали:
http://lord-n.narod.ru/walla.html
4. Нет желания вникать в хитросплетения Протеуса (который здесь совершенно не нужен и даже вреден). Схему и программу покажите, как они есть, тогда можно будет дать советы ...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Apr 16 2012, 18:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(alex112 @ Apr 16 2012, 18:47) *
На С0 повесил диод и его тоже на землю кинул.

А почему вы упорно светодиод диодом называете? Это два очень разных электронных элемента.

Цитата(alex112 @ Apr 16 2012, 18:47) *
Запускаю симуляцию: нажимаешь на кнопку, диод гаснет, отпускаешь - загорается. Ладно, допустим (хотя почему такое получается? Откуда берется единица на B0?).

Что значит "допустим"? вы получили результат, противоположный ожидаемому, и Вам даже на симуляторе не интересно выяснить почему?

Цитата(alex112 @ Apr 16 2012, 18:47) *
переключил J13 на землю, воткнул J18 еще и.... ничего. Вообще никакой реакции. Опять же вопрос, почему в симуляторе работает, а тут нет?

А у Вас и в симуляторе не работает. сами написали, результат не соответствует запрограммированному алгоритму.

Цитата(alex112 @ Apr 16 2012, 18:47) *
Тк вот вопрос: где в протеусе этот самый элемент питания? Нашел какой-то INPUT, и вроде даже заработало, но только на один раз - нажал, загорелось и все. Не гаснет после отпускания кнопки.

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

Еще как вариант- обижаются на Вас компоненты, вы их постоянно "вешаете", "кидаете", "втыкаете". Смотрите, может случится то же самое, что с небезызвестной гражданкой Ф., от которой кухонная утварь убежала....
Go to the top of the page
 
+Quote Post
Microwatt
сообщение Apr 16 2012, 21:55
Сообщение #4


Гуру
******

Группа: Почетный участник
Сообщений: 6 851
Регистрация: 25-08-08
Из: Запорожье
Пользователь №: 39 802



Цитата(Ruslan1 @ Apr 16 2012, 21:10) *
Еще как вариант- обижаются на Вас компоненты, вы их постоянно "вешаете", "кидаете", "втыкаете". Смотрите, может случится то же самое, что с небезызвестной гражданкой Ф., от которой кухонная утварь убежала....

Да, эта причина много серьезнее, чем кажется. Как только микруху , кондюк или резюк воткнули или присобачили - жди отказа или недоразумения. Даже по форуму прослеживается четко.
Go to the top of the page
 
+Quote Post
alex112
сообщение Apr 17 2012, 06:31
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



Цитата(kovigor @ Apr 16 2012, 21:37) *
1. PORTB.1.1 - это первый разряд, а не нулевой
2. А кто линии МК на ввод/вывод настраивал ?
3. Схема потенциально опасная - можно сжечь МК за милую душу. Вы бы хоть книжку по АВР перед этим почитали:
http://lord-n.narod.ru/walla.html
4. Нет желания вникать в хитросплетения Протеуса (который здесь совершенно не нужен и даже вреден). Схему и программу покажите, как они есть, тогда можно будет дать советы ...

Прилагаю схему и программу. Что схема опасная знаю, там надо еще резисторов добавить.

CODE
void main() {

DDB0_bit = 0; // Set pin as input

DDRC = 0xFF; // Configure PORTC as output
PORTC = 0x00; // Initial PORTC value

do {
if (Button(&PINB, 0, 1, 1)) { // Detect logical one
PORTC = 0x01; // Set PINC0 ON
oldstate = 1;
}
else {
PORTC=0x00;
}
} while(1); // Endless loop
}


Цитата(Ruslan1 @ Apr 16 2012, 22:10) *
Что значит "допустим"? вы получили результат, противоположный ожидаемому, и Вам даже на симуляторе не интересно выяснить почему?

Почему не интересно? Я же там спрашиваю, в скобочках, почему такое происходит.
Цитата
А у Вас и в симуляторе не работает. сами написали, результат не соответствует запрограммированному алгоритму.

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

Спасибо, почитаю.
Цитата
Еще как вариант- обижаются на Вас компоненты, вы их постоянно "вешаете", "кидаете", "втыкаете". Смотрите, может случится то же самое, что с небезызвестной гражданкой Ф., от которой кухонная утварь убежала....

Что то слабо вериться, но впредь учту sm.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
alex112
сообщение Apr 18 2012, 15:42
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



ну так что? Просили схему и программу.... и куда все попрятались то?
Go to the top of the page
 
+Quote Post
bav
сообщение Apr 18 2012, 15:56
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



1. на кнопку нужен подтягивающий резистор?
2. при нажатии на кнопку, какой логический уровень будет на входе порта?
Go to the top of the page
 
+Quote Post
alex112
сообщение Apr 18 2012, 18:50
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



Цитата(bav @ Apr 18 2012, 19:56) *
1. на кнопку нужен подтягивающий резистор?

наверняка нужен. Только как его рассчитать? Со светодиодом все понятно - у каждого светодиода есть внутреннее напряжение (или как оно зовется), у каждого цвета свое, у красного 2,2В вроде. И есть питающий ток, 15-20мА. Напряжение сети 5В-2,2В и узнаем сколько надо "просадить" резистором. И по закону Ома вычисляем. А с кнопкой как быть?
Цитата
2. при нажатии на кнопку, какой логический уровень будет на входе порта?

Понятия не имею, но почему светодиод загорается когда кнопка отпущена и тухнет когда нажата?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 18 2012, 19:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(alex112 @ Apr 18 2012, 22:50) *
наверняка нужен.

Можно включить внутреннюю подтяжку:
Код
PORTB= 0x01;


Цитата(alex112 @ Apr 18 2012, 22:50) *
Понятия не имею, но почему светодиод загорается когда кнопка отпущена и тухнет когда нажата?

Плохо - что не имеете понятия... При нажатии на кнопку: на PB0 - низкий уровень (0), а чтобы загорелся светодиод: на PC0 нужно выдать высокий уровень (1). В соответствии с Вашей программой: на PC0 выдается тот же уровень, что и на PB0. Вот так и получается: нажали кнопку (PB0=0 - низкий уровень) - выдали на PC0 ноль (низкий уровень) - светодиод не горит. И наоборот...
Go to the top of the page
 
+Quote Post
alex112
сообщение Apr 18 2012, 20:32
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



Цитата(Палыч @ Apr 18 2012, 23:26) *
Можно включить внутреннюю подтяжку:
Код
PORTB= 0x01;

а что это дает и зачем нужно? со светодиодом понятно, а тут?

Цитата
Плохо - что не имеете понятия... При нажатии на кнопку: на PB0 - низкий уровень (0), а чтобы загорелся светодиод: на PC0 нужно выдать высокий уровень (1). В соответствии с Вашей программой: на PC0 выдается тот же уровень, что и на PB0. Вот так и получается: нажали кнопку (PB0=0 - низкий уровень) - выдали на PC0 ноль (низкий уровень) - светодиод не горит. И наоборот...

Т.е. уровень мериентся относительно С0? Я думал что для высокого уровня нужно 5В подать....
Go to the top of the page
 
+Quote Post
alexvu
сообщение Apr 18 2012, 20:57
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 172
Регистрация: 14-11-11
Из: Москва
Пользователь №: 68 299



Цитата(Microwatt @ Apr 17 2012, 00:55) *
Как только микруху , кондюк или резюк воткнули или присобачили - жди отказа или недоразумения. Даже по форуму прослеживается четко.

5 баллов!

То alex112:
Поищите любой самоучитель по МК, например по слову "avr123" - там все толково объясняется.
По поводу подтяжки, что это и зачем нужно.
Почитайте даташит на Ваш МК или хотя бы посмотрите в нем схему внешних портов, Вам сразу многое станет понятно.
Вообще, даташиты надо смотреть обязательно, т.к. в любом самоучителе предполагается туда заглядывать и эта информация нигде больше не дается.
Go to the top of the page
 
+Quote Post
bav
сообщение Apr 19 2012, 09:20
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



Цитата
а что это дает и зачем нужно? со светодиодом понятно, а тут?

порты по входу имеют ооооочень высокое сопротивление, поэтому если он "висит" в воздухе (когда кнопка отпущена), то не известно что на его входе 1 или 0. поэтому и стоит подтянуть его к цепи питания для того, что бы гарантировать на входе четкую 1. это можно сделать внешним резистором (~10 к достаточно) или внутренним.
когда кнопка нажата, входной порт будет четко притянут к земле, т.е. на входе будет 0.
а теперь снова прочитайте что Вы написали
Цитата
Т.е. уровень мериентся относительно С0? Я думал что для высокого уровня нужно 5В подать....

будьте более внимательны, не ленитесь читать рекомендованную литературу...
Go to the top of the page
 
+Quote Post
alex112
сообщение Apr 19 2012, 21:46
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 14-02-10
Пользователь №: 55 477



Цитата(bav @ Apr 19 2012, 13:20) *
порты по входу имеют ооооочень высокое сопротивление, поэтому если он "висит" в воздухе (когда кнопка отпущена), то не известно что на его входе 1 или 0. поэтому и стоит подтянуть его к цепи питания для того, что бы гарантировать на входе четкую 1. это можно сделать внешним резистором (~10 к достаточно) или внутренним.
когда кнопка нажата, входной порт будет четко притянут к земле, т.е. на входе будет 0.

ну изначально я хотел по другому - когда нажата - светодиод горит, а когда отпущена, то не горит. Т.е. мне надо +5 завести через кнопку на В0 и между кнопкой и В0 заземлить проводник через резистор, т.е. подтянуть его к земле когда кнопка разомкнута.


Цитата(Палыч @ Apr 18 2012, 23:26) *
Можно включить внутреннюю подтяжку:
Код
PORTB= 0x01;

А куда она подтягивает? К питанию? А к земле это 0х00?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 20 2012, 04:32
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(alex112 @ Apr 20 2012, 01:46) *
ну изначально я хотел по другому - когда нажата - светодиод горит, а когда отпущена, то не горит.
Достаточно поменять местами строки присваивания значения POTRC

Цитата(alex112 @ Apr 20 2012, 01:46) *
А куда она подтягивает? К питанию? А к земле это 0х00?
Да, подтягивает к питанию. При PORTB= 0x00 подтяжка отключена.
Go to the top of the page
 
+Quote Post
bav
сообщение Apr 20 2012, 09:50
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



Цитата
ну изначально я хотел по другому - когда нажата - светодиод горит, а когда отпущена, то не горит. Т.е. мне надо +5 завести через кнопку на В0 и между кнопкой и В0 заземлить проводник через резистор, т.е. подтянуть его к земле когда кнопка разомкнута.

можно и так. но это не "наш" метод sm.gif у Вас контроллер, который можно программировать! достаточно сделать, что бы светодиод загорался, когда на ножке будет лог 0:
Цитата
Достаточно поменять местами строки присваивания значения POTRC
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016