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


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

> Описание: прога для кровати-качалки
ОЛЕГ Супермодератор Post Id



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


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



Ну так, все верно- D1 это третья нога, а D2- четвертая нога.

Спасибо, Белай Волк, сейчас попробую. Улыбка
(Добавление)
Не получается... рёв в три ручья
D2 работает, D1- нет.
Конкретно в Ваших программах D1 почему-то не работает. Вообще нога живая, проверял другой программой. Замешательство
Улыбка
 
 Top
ОЛЕГ Супермодератор Post Id



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


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



Мне кажется, там проблема с циклами.

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

В любом случае, спасибо за помощь! Улыбка Улыбка Улыбка
 
 Top
ОЛЕГ Супермодератор Post Id



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


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



Глюки при использовании программы с таймером вызваны тем, что сигнал с компаратора не является непрерывным. Таким образом, увеличивая чувствительность микрофона я получал ложные срабатывания, загрубляя- отсутствие срабатывания. Золотой середины я не нашел.

Если кому пригодится, выкладываю окончательный вариант. Д2- компаратор, Д1- кнопка с фиксацией, С4- управляющий вывод.
При коротком нажатии кнопки запускаем цикл. При коротком нажатии в процессе работы- выключаем. Фиксация кнопки- непрерывный режим. Задержка в начале нужна для того, чтобы щелчек при включении в розетку не запустил программу.

#include <avr/io.h>
#include <util/delay.h>
int main(void)

{
_delay_ms(100); // ждем, пока стабилизируется напряжение после включения

int i = 0;
int t = 0;

DDRC = 0xff; // все порты C сконфигурировать как выходы
DDRD = 0x00; // все порты D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех портах D,

while(1) { // Бесконечный цикл

// ПРОВЕРЯЕМ НАЛИЧИЕ СИГНАЛА

while (t < 4) // цикл для определения длительности сигнала
{
if (!(PIND & (1<<PIND2)) // проверить "0" на линии 2 порта D
t++; // если 0, тогда значение t увеличиваем на 1
else
t = 0; // в противном случае t будет обнулен
_delay_ms(10); // ждем

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
goto start; // перейти к метке start
}

// ВКЛЮЧАЕМ ИСПОЛНЯЮЩЕЕ УСТРОЙСТВО

start:
t = 0; // обнуляем значение переменной t
for (i = 1; i <= 300; i++) // цикл 300 раз

{
PORTC |= _BV(PC4); // подаем питание
_delay_ms(200); // ждем
PORTC &= ~_BV(PC4); // выключаем питание
_delay_ms(600); // ждем
if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
t = 297; // заканчиваем цикл
}
if
(!(PIND & (1<<PIND2))) // проверить "0" на линии 2 порта D
goto start; // перейти к метке start
}
}
 
 Top
Белый Волк Супермодератор Post Id



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


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



ОЛЕГ
Вместо
CODE:

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
goto start; // перейти к метке start


Лучше записать
CODE:

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
break; // прервать текущий цикл
 
 Top
ОЛЕГ Супермодератор Post Id



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


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



Спасибо, Белый Волк, я этого не знал! Улыбка
 
 Top
Страниц (3): « 1 2 [3]
« Программирование микроконтроллеров »


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





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