управление

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

ну как вы уже знаете я полный профан в програмировании мк
особенно в написании программ
ну попробую вдруг подскажут
значит такая задача

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

спасибо заранее
лучше сделать без правки фьюзов
15 секунд время произвольное, примерное
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Что есть "минус"?
Со всем остальным проще - моностабильный элемент описываете.
Я бы пошел по такому пути:
переменная (регистр) в которой указывается состояние 0-не было подачи сиганла, 1 - была подача сигнала.
затем N переменных под каждый бит порта (портов) в которых указываем время работы именно ээтого бита порта.
Ну далее тупое сравнение и выключение по превышению порога.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

нормально
жаль только я в этом ничего не понял
мне прошше когда это будет выглядеть в виде программы
минус-это кратковременное попадание минуса на порт
ну я не знаю как еше сказать

я думал через ресет сделать
но не получается
потому что минус(естественно через резистор 4.7 ком) может попадать несколько раз
но надо чтобы за время выполнения программы 15 секунд
мк больше не реагировал на порт на который попадает минус
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Какой такой минус? Может все-таки логический ноль, минус на МК подавать не стоит...
В главном цикле проверяете порт, если там вдруг появился ваш "минус" включаете "1" в другом порте, делаете задержку 15 сек и выключаете "1". В чем сложность то?
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

сложность в том что я не знаю как это написать на программном языке
Реклама
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Сообщение otest »

олежек писал(а):сложность в том что я не знаю как это написать на программном языке
а как это понимать ?
пишу в баскоме
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1811
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

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

ЗЫ: Помогают тут обычно советом, код за вас писать никто не будет. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

$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


как сюда кнопку подключить? и включить внутренний резистор
пожалуйста
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==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:
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

ну все правильно
толко вместо порта с порт в
и как бы это в васкоме
я не умею в winavr компилировать
Мудрый кот
Аватара пользователя
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)

Сообщение РадиоЛоматель »

-==MAXCELERON==- писал(а):незнаю как в баскоме, а в winavr будет так:
Я, конечно, не знаю всех требований автора, но так делать не стоит, потому что если импульс прийдет во время задржки 15 секунд, на него никто не обратит внимание. К тому же, если он будет крайне коротким (примерно с команду перехода длительностью) он тоже будет пропущен. Значительно лучше сделать через прерывания и таймеры, но понятно, что это сложновато для автора.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Контактная информация:
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

именно так и надо
чтобы при включении порта вывода вход игнорировался полностью
пока не пройдет 15 сек
потом снова проверяет порт входа

все правильно только как мне в васкоме написать
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

чего то у меня ошибки пишет по 1,2 и 7 строке

пытаюсь откомпилировать и зашить через авр студия 4
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

олежек писал(а):чего то у меня ошибки пишет по 1,2 и 7 строке

пытаюсь откомпилировать и зашить через авр студия 4
8) хммммм, так в avrstudio и хидеры другие и в другом месте лежат :idea:
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

олежек писал(а): я не умею в winavr компилировать
чего там не уметь tools / make all
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

ну правильно
только hex не выходит
а програматор не подключается к вин авр
надо паять 6 проводков и через ком порт шить
програматор у меня пишет в авр студии hex файлы
програматор скт 500 через усб порт
Встал на лапы
Аватара пользователя
Сообщения: 96
Зарегистрирован: Сб авг 15, 2009 07:31:56
Откуда: г. Кемерово

Сообщение -==MAXCELERON==- »

олежек писал(а):ну правильно
только hex не выходит
все там выходит
если что вот hex
Вложения
Архив ZIP - WinRAR.zip
(262 байт) 189 скачиваний
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

$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 ' начало бесконечного цикла


вот так получится или нет?
на коментарии внимания не обрашайте
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

-==MAXCELERON==- писал(а):
олежек писал(а):ну правильно
только hex не выходит
все там выходит
если что вот hex
спасибо за файл
только время еше не подобрано
а с hex мне уже вообше ничего не сделать
Открыл глаза
Сообщения: 52
Зарегистрирован: Пн фев 15, 2010 11:25:30

Сообщение олежек »

$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 ' начало бесконечного цикла

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

Вернуться в «Микроконтроллеры и ПЛИС»