роботы робототехника микроконтроллеры


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

> Описание: Напишите)
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



Привет всем,Сделал я один девайс,к которому прицепил оптопару.....мне нужно вот что.... при открытии фототранзистора плюс идет на вход потра PD4 кпримеру.... и чтобы это вызывало на выполнение программу...неважно какую...как правильно написать.....пишу на WinAwr....Заранее благодарен.
(Добавление)
а когда на порт ничего не идет чтобы МК прогу не вызывало
 
 Top
lamakazzz Post Id



Главнокомандующий


Сообщений всего: 328
Дата рег-ции: Янв. 2010  



Почему не искали на сайте?

Внешние прерывания
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



нет......вы не так поняли....=)...нужно вот што....когда фототранзистор открыт....тогда идет на выполнение программа.....както вот так вроде ....if (!(PINС & (1<<PINС5)))...- тоесть проверить ноль скажем или проверить плюс на линии 5 порта С...и если скажем там 1 тодолжна идти на выполнение программа...
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



beam, т.е. когда "вдруг" на ноге появлась лог. "1", то должно выполниться какая то программа? - Этим как раз и занимается прерывание по лог. уровню. Так что направление вам указали верное :)
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



нет......вы не так поняли....=)...нужно вот што....когда фототранзистор открыт....тогда идет на выполнение программа.....както вот так вроде ....if (!(PINС & (1<<PINС5)))...- тоесть проверить ноль скажем или проверить плюс на линии 5 порта С...и если скажем там 1 тодолжна идти на выполнение программа... я просто правильно написать не могу
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



не "што", а "что".

есть две возможности обработки логического состояния на входе:
- опрашивать (проверять) постоянно в цикле.
- заставить работать прерывание.

если вы хотите через if (!(PINС & (1<<PINС5))), то вам нужно в программе по возможности чаще проходить через эту конструкцию.

Если сделать на прерывании - достаточно его сконфигурировать, и прерывание сработает само, когда нужное состояние появится.
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



ясно
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



мне нужно к примеру ..при появлении на PC1 "плюса" загорались светодиоды портаC и D
....а когда на ПЦ1 ноль то чтобы ничего не горело.....как написать это?=)буду благодарен за помощь.
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



WHILE (PINС & (1<<PINС1))
{горят светодиоды;}
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



А где эту запись поставить?=)
(Добавление)
если можно то поподробней напишите пожалуйста...ато я неочень в этих делах пока што=)
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Циклы в языке программирования С и.
(Добавление)
nest пишет:
не "што", а "что".
Улыбка
(Добавление)
CODE:

Бла-бла-бла, подключаем библиотеки.

int main(void)
{
Бла-бла-бла, конфигурируем порты.

while(1)
{

while(на какой-то ноге что-то)
{светодиоды горят;}

светодиоды не горят;
}
}
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



...неполучается почемуто...можете написать примероно как будет вот моя программа
мне нужно к примеру ..при появлении на PC1 "плюса" загорались светодиоды портаC и D
....а когда на ПЦ1 ноль то чтобы ничего не горело


#define F_CPU 8000000UL // 8 MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void) // начало основой программы
{
DDRD = 0xff;
DDRC = 0xff;



while(1) {

DDRD = 0xff;
DDRC = 0xff;
PORTD &= ~(1<<0);
_delay_ms(0.02);
PORTD |= 1<<0;
_delay_ms(0.02);
PORTD &= ~(1<<1);
_delay_ms(0.02);
PORTD |= 1<<1;
_delay_ms(0.02);
PORTD &= ~(1<<2);
_delay_ms(0.02);
PORTD |= 1<<2;
_delay_ms(0.02);
PORTD &= ~(1<<3);
_delay_ms(0.02);
PORTD |= 1<<3;
_delay_ms(0.02);
PORTC &= ~(1<<2);
_delay_ms(0.02);
PORTC |= 1<<2;
_delay_ms(0.02);
PORTC &= ~(1<<3);
_delay_ms(0.02);
PORTC |= 1<<3;
_delay_ms(0.02);
PORTC &= ~(1<<5);
_delay_ms(0.02);
PORTC |= 1<<5;
_delay_ms(0.02);
PORTC &= ~(1<<4);
_delay_ms(0.02);
PORTC |= 1<<4;
_delay_ms(0);



}
}
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



_delay_ms(0.02);- по-моему, бред. Нужны целые числа.
Это во-первых.
Во-вторых, у Вас порты неправильно сконфигурированы. Если порт сконфигурировать выходом, то ему будет по-барабану, сколько кнопок на нем висит и что там подается.
И резисторы подтягивающие включить нужно.

Написано тут: http://myrobot.ru/stepbystep/pr_mcports.php
Вы читали?
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



Ладно ...давайте по очереди....зачем нужны подтягивающие резисторы?...и если не трудно напищите пожалуйста начало с кнокой мое программе...(я ставлю оптопару)..заранее благодарен.
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



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

Например:
DDRC = 0b11111110; //порт С- выход, но пин0 порта С- вход с кнопки
PORTC = 0b00000000; //установить на всех выходах логический 0

DDRD = 0b11111111; //порт D- целиком выход
PORTD = 0b00000000;//установить на всех выходах логический 0
(Добавление)



Я прошу прощения, обратите, пожалуйста внимание на предыдущий пост от 00:53:16, там была ошибка в коде, я исправил. Забыл обозначить главную функцию, сразу к циклу перешел.
 
 Top
Страниц (4): [1] 2 3 4 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru