Форум myROBOT.ru » Шаг за шагом » С чего начать? » 2 независимых цикла

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

1. ATmegaRUSSIA - 10 Августа, 2012 - 11:36:52 - перейти к сообщению
Здравствуйте!
Работаю на СИ , CodeVisionAVR. Базовые понатия есть.
Подскажите можно ли вкл. два независимых цыкла в ATMEGA8?
Т.е. : при нажатии одной кнопки вкл. постоянное мигание светодиода и мигание на некоторое время.
2. elmot - 10 Августа, 2012 - 14:38:06 - перейти к сообщению
Что такое цыкл?



===============================
Цыган на цыпочках цыкнул на цыпленка.
3. Slava143 - 10 Августа, 2012 - 16:52:37 - перейти к сообщению
[quote=elmot]Что такое цыкл?



===============================


Как можно запустить 2 бесконечных цыкла при нажатии на одну кнопку?

while(1)
{ тело цыкла }
4. anar - 10 Августа, 2012 - 18:04:39 - перейти к сообщению
Пишется цикл.
5. cjAndrews - 10 Августа, 2012 - 21:28:17 - перейти к сообщению
Перестаньте стебатьться! Как будто не знаете что такое цыкл и как он организуется в разных языках?
Это прерывания Slava143, в мега8 можно их сделать можно вроде 8 (не странно-ли?), еще это называют вытясняющей (корпоротивной) многозадачностью. Но это враьё

Это обычное знание асма и стэка, - удачи!
6. Predator - 10 Августа, 2012 - 21:32:57 - перейти к сообщению
ну докопались...
я конечно тоже сторонник русскоязычного изьяснения, но по делу то тоже можно что-нибудь написать.

запустить 2 цикла не проблема, проблема между ними переключаться.
как вариант можно одним крутится постоянно, а исполнение другого периодически совершать по прерыванию от таймера, но тогда второй не должен быть бесконечным: таймер дернулся - один (несколько) проход по телу совершился.
7. cjAndrews - 10 Августа, 2012 - 21:57:28 - перейти к сообщению
в авр обычно три задачи заложено. Одна основная и две по прерыванию от таймера (сейчас nest полезет ругаться, ведь еще еще вачдог и ризет)

Ответ: Можно, читайте асм для авр для своего мк.
(Добавление)
основной цикл можно пустым сделать, всю многозадачность будут решать прерывания между собой,Вам решать Улыбка
8. Нестандарт - 11 Августа, 2012 - 20:07:40 - перейти к сообщению
Два основных цикла одновременно работать не могут. Но если вам нужно одновременно запустить два процесса , то это можно (сильно зависит от того что это за процессы).

Если вам нужно мигать двумя светодиодами (двумя пинами) , но с разным периодом , то тут все просто . Делаете таймер , сводите его значения к милисекундам (секундам и т.д.) и уже , по значению таймера "дергаете" ногами МК.
Более сложные процессы можно производить по переменно , но с большой частотой их смены.
А вообще , все сильно зависит от того что вы делаете и для чего.
(Добавление)
Цитата:
nest полезет ругаться

nestа здесь уже пол года как нет.
9. Predator - 12 Августа, 2012 - 18:57:12 - перейти к сообщению
я тут озгами пораскинул:
с таймером вообще можно любое колличество процессов запустить, а по прерыванию запускать орбитра, который будет отдавать кому-нибудь управление (по очереди или еще как...)
10. Slava143 - 12 Августа, 2012 - 20:05:07 - перейти к сообщению
Что то понял, а что не очень.Спс за Учение Русго Языка)
Идея такова:
Это типа охранки на 4 шлейфа. с шлейфами я разобрался и написал все с ЦИКЛАМИ for, очень громоздко но по другому не умею.
- есть кнопка при нажатии которой ставим под охрану(кнопку сделал)
- есть светодиод который показывает статус, под охраной или нет.(чето не получается)
- есть пищалка(отдельная схема) на которую при сработке одного из шлейфов подаем лог 0, а при 1 она молчит.(не получаеться)

Что подскажите?Или есть вопросы?
11. Нестандарт - 12 Августа, 2012 - 20:30:31 - перейти к сообщению
Вообще программа элементарная.

По нажатию кнопки пишем в переменную 1 (если до этого она была 0) или наоборот. Пишем 0 если до этого она была 1. Таким образом , по нажатию кнопки , будет происходить ивертация (или инвертирование ?) переменной.

Если переменная 1 - включаем светодиод и запускаем подпрограмму опроса шлейфов и включения/выключения пищалки.
Если переменная 0 - гасим все и опрашиваем только кнопку.

Для того чтобы пищалка (при срабатывании шлейфа) замолкала только после снятия с "охраны" можно ввести еще одну такую переменную.
По сигналу шлейфа писать туда 1 (пищалка пищит при значении переменной 1) , а по нажатию кнопки писать 0 (пищалка затыкается).

Всю эту конструкцию можно построить на одних if else.

На чистом СИ не пишу , так что исходник набросать не смогу.
12. Slava143 - 14 Августа, 2012 - 00:12:51 - перейти к сообщению
Нууу что то получилось, но почему то микроконтроллер греется! Может я что то не то настроил? или это нормально?
13. nestandart - 14 Августа, 2012 - 03:17:57 - перейти к сообщению
Вы дали напругу питание (или на один из портов) самого МК более 6 вольт.
Или (вероятнее) превысили максимальный ток пина МК (40мА) , подключив к нему мощную нагрузку.
14. Slava143 - 14 Августа, 2012 - 23:48:58 - перейти к сообщению
Вот схема подключения
- когда шлейфы замкнутые то светодиоды не светятся и тогда микроконтроллер греется
- когда шлейфы разомкнутые то светодиоды светятся и мега8 не греется
- кнопка ставит под охрану
15. nestandart - 15 Августа, 2012 - 08:09:29 - перейти к сообщению
Что за датчки на шлейфах ? как собраны шлейфы ? какой сигнал с них идет ?

Или шлейфы , в данном случае , это просто кнопки ?

Возможно ваши входы сконфигурированы программно как выходы.
Вариантов много. Нужно мерить что идет со шлейфов.

Первая же ошибка - нет подтяжек на входах шлейфов.