Форум myROBOT.ru » Роботы и робототехника » Делимся опытом » Программирование на СИ и Besik

Страниц (3): « 1 [2] 3 »
 

16. Artem - 07 Августа, 2012 - 20:27:12 - перейти к сообщению
А зачем использлвать ещё таймеры ведь они должны генерировать частоту только для светодиода и можно просто поставить транзисторный ключ и подключить больше диодов.
17. anar - 07 Августа, 2012 - 20:38:57 - перейти к сообщению
Artem пишет:
А зачем использлвать ещё таймеры ведь они должны генерировать частоту только для светодиода и можно просто поставить транзисторный ключ и подключить больше диодов.

Извиняюсь я не так вас понял Смущение .Ну, а зачем вы тогда задали вопрос если сами знаете ответ?
18. Artem - 08 Августа, 2012 - 11:30:06 - перейти к сообщению
Так ведь я спросил:
Может ли таймер работать параллельно с выполняемой программой?
19. anar - 08 Августа, 2012 - 11:39:25 - перейти к сообщению
Artem пишет:
Может ли таймер работать параллельно с выполняемой программой?

Конечно.
20. Artem - 12 Августа, 2012 - 16:34:39 - перейти к сообщению
anar, можно ещё вопрос по поводу вашего кода: я залил его в мк, но я не совсем понимаю что он должен делать, я подключил к выходу B1 светодиод, я так понимаю B1 это физический выход таймера, подключил кнопку к C1 но ничего не происходит.
Не могли бо вы по подробнее рассказать о том как функционирует код.
21. anar - 12 Августа, 2012 - 20:19:02 - перейти к сообщению
Artem пишет:
anar, можно ещё вопрос по поводу вашего кода: я залил его в мк, но я не совсем понимаю что он должен делать, я подключил к выходу B1 светодиод, я так понимаю B1 это физический выход таймера, подключил кнопку к C1 но ничего не происходит.
Не могли бо вы по подробнее рассказать о том как функционирует код.

Все очень просто.Таймер 1 в режиме counter(счетчика), то есть он считает импульсы приходящие на вход T1, когда значение счетчика достигнет 1, то есть он посчитает 2 импульса, логический уровень на выхоте OC1A изменится на противоположный.Соберите все по схеме, что я привел внизу.Возможно у вас возникнут проблемы с дребезгом, тогда значение compar1a придется увеличить.Этот код я привел, чтобы вы лучше поняли работу таймера.
CODE:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb.1 = Output
Config PINC.1 = Input
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle , Clear Timer = 1



Do
Compare1a = 1
Loop

22. Anar2 - 14 Августа, 2012 - 11:33:15 - перейти к сообщению
Artem
У вас все получилось?
23. Artem - 15 Августа, 2012 - 18:20:06 - перейти к сообщению
Да у меня всё получилось, но не сразу. С начала я пренебрёг дребезгом контактов и не поставил резистор, в сочетании с микропереключателем с лапкой это дало не понятный эффект: программа вроде бы работала, но светодиод постоянно мерцал, и срабатывания были не уверенными, затем я попытался изменить значение Comparea1 в большую сторону тогда задержкки между миганием светодиода становились больше, а кнопка почти не влияла на работу, затем я поставил значение 0.5, компилятор не выдал ошибки и я загрузил код, светодиод перестал светиться, но и всё программа перестала работать.
Затем я всё таки поставил резистор, предохраняющий от дребезга, дела пошли лучше, хаотичное мерцание и ложные срабатывания прекратились, однако всё равно в некоторые моменты срабатывание не происходит, но это как я понимаю из-за самого переключателя, надо будет поставить простую кнопку.
Сейчас попробую увеличить значение Comparea1 посмотрим что будет.
И огромное вам спасибо Улыбка
24. anar - 15 Августа, 2012 - 20:29:03 - перейти к сообщению
Artem пишет:
Затем я всё таки поставил резистор, предохраняющий от дребезга

Я вас поправлю резистор не защищает от дребезга,он, так сказать выдает 100% низкий логический уровень на входе мк.Не понятно Улыбка?Тогда объясню подробно.Например если использовать транзистор, как ключ, то его базу надо подтянуть на землю резистором,этот резистор запирает транзистор при отсуствие сигнала.
25. Artem - 16 Августа, 2012 - 09:51:45 - перейти к сообщению
Всё понятно, кода, я только начанал работать с электроникой, в одной из книг был описан транзисторный ключ, я никак не мог его собрать, провёл кучу экспериментов, и затем мне удалось, но я всё же не понимал зачем подтягивать базу к земле, теперь всё ясно, спасибо. Улыбка
26. cjAndrews - 17 Августа, 2012 - 01:45:30 - перейти к сообщению
от дребезга кнопки он не защищает, он увеличивает ширину (или долготу?) сигнала приходящего на базу, уменьшая его потенциал (каждый сталкивался с этим в метро)(а чтобы не уменьшить? 5вольт для открытия транзистора много).
и если ширина увеличится в три раза, то три дребезга база примет за один.
27. Artem - 17 Августа, 2012 - 12:41:00 - перейти к сообщению
А нельзя ли как-то справиться с дребезгом программно, а то резистор не всегда спасает
28. anar - 17 Августа, 2012 - 12:44:04 - перейти к сообщению
Artem пишет:
А нельзя ли как-то справиться с дребезгом программно, а то резистор не всегда спасает

Обычно добавляют паузы, но в вашем случае лучше увеличить значение compare1a.
(Добавление)

Когда инициализируете порты, как входы, пишите PINC.X = INPUT, а когда инициализуруете,как выходы,то пишите PORTC.X = OUTPUT
29. Artem - 19 Августа, 2012 - 09:22:20 - перейти к сообщению
anar, я до сих пор не понимаю что отвечает за количество нажатий на кнопку, то есть как сделать так что бы для включения светодиода нужно было нажать на кнопку дважды. Это задаётся в настройках таймера или нужен дополнительный код?
30. anar - 19 Августа, 2012 - 10:01:17 - перейти к сообщению
Artem пишет:
что отвечает за количество нажатий на кнопку

Значение compare1a.Неужели вас так заинтересовал мой код?Я привел его в пример, чтобы вы лучше поняли процесс.Эту задачу лучше решить, используя циклы и IF, так легче будет избавиться от дребезга программно.