Страница 1 из 2

управление

Добавлено: Вт дек 21, 2010 21:29:20
олежек
ну как вы уже знаете я полный профан в програмировании мк
особенно в написании программ
ну попробую вдруг подскажут
значит такая задача

мк атини 2313 (их у меня много)
надо сделать так чтобы при попадании на один из потров(любой) минуса
на другом порте появлялась 1 на 15 секунд
и даже при пропадании минуса единичка не пропадала
пишу в баскоме
прошиваю в атмеле

спасибо заранее
лучше сделать без правки фьюзов
15 секунд время произвольное, примерное

Re: управление

Добавлено: Вт дек 21, 2010 23:32:23
Meteor
Что есть "минус"?
Со всем остальным проще - моностабильный элемент описываете.
Я бы пошел по такому пути:
переменная (регистр) в которой указывается состояние 0-не было подачи сиганла, 1 - была подача сигнала.
затем N переменных под каждый бит порта (портов) в которых указываем время работы именно ээтого бита порта.
Ну далее тупое сравнение и выключение по превышению порога.

Re: управление

Добавлено: Ср дек 22, 2010 00:21:41
олежек
нормально
жаль только я в этом ничего не понял
мне прошше когда это будет выглядеть в виде программы
минус-это кратковременное попадание минуса на порт
ну я не знаю как еше сказать

я думал через ресет сделать
но не получается
потому что минус(естественно через резистор 4.7 ком) может попадать несколько раз
но надо чтобы за время выполнения программы 15 секунд
мк больше не реагировал на порт на который попадает минус

Re: управление

Добавлено: Ср дек 22, 2010 09:34:47
Engineer_Keen
Какой такой минус? Может все-таки логический ноль, минус на МК подавать не стоит...
В главном цикле проверяете порт, если там вдруг появился ваш "минус" включаете "1" в другом порте, делаете задержку 15 сек и выключаете "1". В чем сложность то?

Re: управление

Добавлено: Ср дек 22, 2010 12:03:25
олежек
сложность в том что я не знаю как это написать на программном языке

Re: управление

Добавлено: Ср дек 22, 2010 12:25:10
otest
олежек писал(а):сложность в том что я не знаю как это написать на программном языке
а как это понимать ?
пишу в баскоме

Re: управление

Добавлено: Ср дек 22, 2010 12:46:01
Kavka
сложность в том что я не знаю как это написать на программном языке
:shock:
Если время "так себе, примерно 15 сек.", да и с микроконтроллерами и программированием, мягко говоря, "не очень", тогда может на ТТЛ/КМОП-рассыпухе или одновибраторах сделать...

ЗЫ: Помогают тут обычно советом, код за вас писать никто не будет. :)

Re: управление

Добавлено: Ср дек 22, 2010 14:21:01
олежек
$regfile = «atini 2313.dat» 'говорим компилятору что у нас мега8
$crystal = 8000000
Config Portb.1 = Output ' конфигурируем порт B.1 как выход
Config Portd.1 = Input ' конфигурируем порт B.1 как вход
Do ' начало бесконечного цикла
Set Portb.0 'подключаем Portb.1 к положительному выводу источника питания
Waitms 500 'ждем пол секунды
Reset Portb.0 'подключаем Portb.1 к отрицательному выводу источника питания
Loop


как сюда кнопку подключить? и включить внутренний резистор
пожалуйста

Re: управление

Добавлено: Ср дек 22, 2010 15:26:26
-==MAXCELERON==-
незнаю как в баскоме, а в winavr будет так:

Код: Выделить всё

#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 8000000UL     



int main(void){     //Главная функция
DDRC = 0xff;   делаем весь порт С - выходом
PORTD = 0xff;  подаем на порт D подтяжку

while(1){             зацикливаем
                          проверяем порт D
if (PORTD != 0xff){      если хоть на одном из выводов порта D появится 0
PORTC = 0xff;            то подаем на все выводы порта C - 1
_delay_ms (15000);       ждем 15000 мсек
PORTC = 0x00;            обнуляем порт С
}
                        и опять заново проверяем, что там у нас с портом D
}
}  //********************************************** Конец главной функции
Вот так все просто :dont_know:

Re: управление

Добавлено: Ср дек 22, 2010 15:52:41
олежек
ну все правильно
толко вместо порта с порт в
и как бы это в васкоме
я не умею в winavr компилировать

Re: управление

Добавлено: Ср дек 22, 2010 15:54:01
РадиоЛоматель
-==MAXCELERON==- писал(а):незнаю как в баскоме, а в winavr будет так:
Я, конечно, не знаю всех требований автора, но так делать не стоит, потому что если импульс прийдет во время задржки 15 секунд, на него никто не обратит внимание. К тому же, если он будет крайне коротким (примерно с команду перехода длительностью) он тоже будет пропущен. Значительно лучше сделать через прерывания и таймеры, но понятно, что это сложновато для автора.

Re: управление

Добавлено: Ср дек 22, 2010 16:03:14
олежек
именно так и надо
чтобы при включении порта вывода вход игнорировался полностью
пока не пройдет 15 сек
потом снова проверяет порт входа

все правильно только как мне в васкоме написать

Re: управление

Добавлено: Ср дек 22, 2010 17:02:21
олежек
чего то у меня ошибки пишет по 1,2 и 7 строке

пытаюсь откомпилировать и зашить через авр студия 4

Re: управление

Добавлено: Ср дек 22, 2010 17:34:32
-==MAXCELERON==-
олежек писал(а):чего то у меня ошибки пишет по 1,2 и 7 строке

пытаюсь откомпилировать и зашить через авр студия 4
8) хммммм, так в avrstudio и хидеры другие и в другом месте лежат :idea:

Re: управление

Добавлено: Ср дек 22, 2010 17:36:35
-==MAXCELERON==-
олежек писал(а): я не умею в winavr компилировать
чего там не уметь tools / make all

Re: управление

Добавлено: Ср дек 22, 2010 17:45:57
олежек
ну правильно
только hex не выходит
а програматор не подключается к вин авр
надо паять 6 проводков и через ком порт шить
програматор у меня пишет в авр студии hex файлы
програматор скт 500 через усб порт

Re: управление

Добавлено: Ср дек 22, 2010 17:58:35
-==MAXCELERON==-
олежек писал(а):ну правильно
только hex не выходит
все там выходит
если что вот hex

Re: управление

Добавлено: Ср дек 22, 2010 18:20:56
олежек
$regfile = «atini 2313.dat» 'говорим компилятору что у нас мега8
$crystal = 8000000
Config Portb.1 = Output ' конфигурируем порт B.1 как выход
Config Portd.1 = Input ' конфигурируем порт B.1 как выход
Do
If Portd.1 = 0 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
Set Portb.1 'подключаем Portb.1 к положительному выводу источника питания
Waitms 500 'ждем пол секунды
Reset Portb.1
Else ' в противном случае...
Portb.0 = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
End If'конец условия
Loop
End ' начало бесконечного цикла


вот так получится или нет?
на коментарии внимания не обрашайте

Re: управление

Добавлено: Ср дек 22, 2010 18:24:44
олежек
-==MAXCELERON==- писал(а):
олежек писал(а):ну правильно
только hex не выходит
все там выходит
если что вот hex
спасибо за файл
только время еше не подобрано
а с hex мне уже вообше ничего не сделать

Re: управление

Добавлено: Ср дек 22, 2010 19:00:28
олежек
$regfile = «atini 2313.dat» 'говорим компилятору что у нас мега8
$crystal = 8000000
Config Portb.1 = Output ' конфигурируем порт B.1 как выход
Config Portd.1 = Input ' конфигурируем порт B.1 как выход
Do
If Portd.1 = 0 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
Portb.1=1 'подключаем Portb.1 к положительному выводу источника питания
Waitms 500 'ждем пол секунды
Portb.1=0
Else ' в противном случае...
Portb.0 = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
End If'конец условия
Loop
End ' начало бесконечного цикла

вот так не получилось
светодиод горит постоянно