Почему не работает опрос кнопки?

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Был на работе.
Никогда не приходилось давать ТЗ. Попробую.
Вложения
текущая программма.txt
(9.01 КБ) 92 скачивания
Реклама
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Глядя на код да и в целом появилась куча вопросов:
Никогда не приходилось давать ТЗ. Попробую.
- Если это ТЗ, то значит это должен сделать кто то другой, тогда это должно как то оплачиваться :)
Точнее возникает вопрос какую цель преследуете: хотите сами научиться или же чтобы кто то это сделал за вас не погружаясь в "дебри" :)

По поводу кода:
- для чего глобальное разрешение прерываний, если в программе не используется не одно прерывание?
- для чего инициализация всей периферии, этож не PIC, там при старте и так ничего не подключено, хотя данное действие может показаться правильным но не обязательным, может я в чём то и ошибаюсь но по мне на начальном этапе на этом можно не заморачиваться, простая мигалка светодиодом и так будет работать.
- для чего подавать на PIN.3 меадр 70 Гц, не понятна сама концепция?
- что бы кучу раз не повторять в тексте одно и тоже
PORTB=0b00,PORTD=0b00000000,PORTC=0b00000000,PORTA=0b00000001,delay_ms(20) ;// 8raz

стоит почитать на тему: функция и её вызов. Она сэкономит кучу памяти в ROM.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Сейчас программа занимает 17% памяти. И фактически задание выполнено. Что-то более сложное я не собираюсь делать, и если понадобится буду привлекать специалиста с соотв. оплатой. Инициализацию переферии сделал Код Визард. как записаны в моей программе Порты--мне так удобно видеть "по кадрам" картинку. Глобальное Разрешение открыл по совету более опытного программиста на стороннем форуме. Но на этом подсказки закончились. Программу пишу для собственного использования. В беседах с Вами понял почему не работал, как хотелось, прежний код. Теперь слегка усложняется задачка. У меня есть решение без использования мат. части AVR. Ноль приходящий на PIN.4 "землит" RESET, а Сигнал с PIN.3 управляет 9-ми ногами ULN2003. Всё решаемо. Хотел изящного решения, а Вы все про деньги....
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Billi34 писал(а): а Вы все про деньги....
Ну почему же про деньги, дело тут в другом, от некоторых не всегда удаётся сразу понять чего же они хотят: что бы им сделали или же они хотят дойти своим умом, это дело опять же каждого. Но вот в чём дело: тут за кого либо ничего делать просто так не будут, с одной стороны это материальная сторона вопроса, с другой если за человека целиком написать код, если не сложный бывает и пишут за спасибо, но он мало чему научится, поэтому на форуме чаще всего дают направление в котором нужно копать, и если он хочет, он рано или поздно через ошибки добьётся результата. Но если отмазываясь выпрашивая халяву то таких обычно сразу направляют в ветку Есть работа.
Что-то более сложное я не собираюсь делать, и если понадобится буду привлекать специалиста с соотв. оплатой.
Ну я думаю что то грандиозное вряд ли сходу задумаете, а если это до усовершенствовать, то я думаю у вас получиться, главное желание познавать и вера в результат :))
Ноль приходящий на PIN.4 "землит" RESET
Вот тут ничё не понял :dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Ноль приходящий на PIN.4 "землит" RESET
Вот тут ничё не понял :dont_know:[/quote]
Всё просто:провод от переключателя дающий минус на PIN.4 перепаиваем на RESET. А вторая группа контактов переключателя даёт тактирющий сигнал на затвор полевика. Лишние провода, сдвоенный переключатель, мосфит.. время.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

,
Ну я думаю что то грандиозное вряд ли сходу задумаете, а если это до усовершенствовать, то я думаю у вас получиться, главное желание познавать и вера в результат



Я этим проэктом занимаюсь уже больше года. Физически некогда. Вчерашний пост дописывал во втором часу ночи. Не-то что-бы опускаются руки-- понимаешь что первоочередных задач становится всё больше и больше.
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

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

PORTB=0b00,PORTD=0b00000000,PORTC=0b00000000,PORTA=0b00000001,delay_ms(20) ;  //1 hfz  
PORTB=0b00,PORTD=0b00000000,PORTC=0b00000000,PORTA=0b00000011,delay_ms(20) ;
Можно заменить на что-то такое

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


void Func(void) {
signed char i=0;
      //---------------------------------------------------------
      //-----устанавливаем биты (возрастание)--------------------
      //---------------------------------------------------------
      for(i=0;i<8;i++){
            PORTA|=(1<<i);
            delay_ms(20);
      }
      for(i=0;i<8;i++){
            PORTC|=(1<<i);
            delay_ms(20);
      }
      for(i=0;i<8;i++){
            PORTD|=(1<<i);
            delay_ms(20);
      }
      for(i=0;i<2;i++){
            PORTB|=(1<<i);
            delay_ms(20);
      }
      //---------------------------------------------------------
      //-----Сбрасываем биты (убывание)--------------------------
      //---------------------------------------------------------
      for(i=1;i>=0;i--){
            PORTB=PORTB&(~(1<<i));	
            delay_ms(20);
      }
      //------------------------
      for(i=7;i>=0;i--){
            PORTD=PORTD&(~(1<<i));
            delay_ms(20);
      }
      //------------------------
      for(i=7;i>=0;i--){
            PORTC=PORTC&(~(1<<i));
            //delay
      }
      //------------------------
      for(i=7;i>=0;i--){
            PORTA=PORTA&(~(1<<i));
            delay_ms(20);
      }
}

Хотя наверное красивее будет сделать установку битов в одной переменной int long, а потом её по кускам в порты закидывать.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Billi34 писал(а):
Alkul писал(а): Воспользуюсь советом уважаемого Alkul. Логика работы такая:
Про кашу - это Вы правильно написали.
Если честно, я тоже не понял ничего.
Как уже выше написали, непонятно, зачем меандр, зачем RESET на свой же вывод вешать...
то "ТЗ", которое Вы написали, только добавило тумана.
Вы напишите по-русски. Например, так:
- объект такой-то, имеет такие-то кнопки управления, такую-то индикацию.
- при нажатии на кнопку такую-то, должен загораться такой-то индикатор, остальные индикаторы должны вести себя так-то, при удержании этой кнопки в течение 2 секунд индикатор должен вести себя так-то.
...

И так далее по-русски последовательно описывайте, что должна делать Ваша система. А Вы в "ТЗ" сразу указываете, что нужно Ваш код исполнять. Зачем? Может, его и не надо исполнять? Может, он неоптимален, а может, и вообще неверен? Это первое.
Второе - любая разработка с применением микроконтроллеров - это программно-схемотехнический симбиоз, поэтому для достижения правильного результата нам надо увидеть и Вашу схему. Может, у Вас и там "чудеса", которые надо либо оптимизировать, либо вообще переделать.

Непосредственно с опросом кнопки я могу Вам помочь, но только на ассемблере, на Си для микроконтроллеров я программы не пишу.
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

А легенда такова: мой друг(начинающий бизнесмен) решил открыть пивнушку. В стиле американского паба. Уличная реклама в виде стрелки указывающей на вход в бар периодически стробоскопирует и волнообразно засвечивается благодаря создаваемой схеме. Также есть световой знак в виде дорожного знака "кирпич" подразумевающий что входа нет. Рекламщики за такой "апгрейд" запросили немалые деньги. Я думаю что не так уж это дорого стоит и решил помочь другу за абонемент в его заведение. Конечно это всё чистой воды выдумка. Но максимально близко описывает концепцию устройства. Меандр взят с простейшего генератора на NE555 управляющая реле. Ассемблер для меня запредельная азбука. СИ чем-то напоминает BASIC из моей школьной программы, поэтому не так страшен на первый взгляд. Фото макетки сделаю на работе .
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Billi34 писал(а):Меандр взят с простейшего генератора на NE555 управляющая реле
Еще раз. Для чего, по-Вашей задумке, должен использоваться меандр? Для реализации стробоскопического эффекта, то бишь, мигания? Если да, то это напрасное усложнение схемы, мигание прекрасно реализуется на ШИМ одного из таймеров МК
Billi34 писал(а):Уличная реклама в виде стрелки указывающей на вход в бар периодически стробоскопирует и волнообразно засвечивается благодаря создаваемой схеме. Также есть световой знак в виде дорожного знака "кирпич" подразумевающий что входа нет.
Что должно управлять знаком "кирпич"?

Повторяю. Опишите подробно требования. Лирику про бизнесмена можно опустить.
Пишите:
1. Знак в виде стрелки (очевидно, сформированной по контуру из светодиодов?), должен мигать с частотой такой-то, через такие-то интервалы времени должен переходить в режим волнообразной засветки, реализованной таким-то образом. Через такой-то интервал времени режим засветки должен переключаться снова на режим мигания. Опишите, как именно должна выглядеть "волнообразная засветка". (Что-то еще?)
2. Знак в виде дорожного знака "Кирпич", должен загораться по команде от такого-то источника (вручную от кнопки, автоматически в заданное время по внутренним часам и т.д.). Гашение знака должно производиться по команде от такого-то источника (кнопка, автоматически, и т.д.)
3. Между двумя знаками должна быть синхронизация по такому-то закону (знаки должны работать асинхронно друг с другом). (Что-то еще?)
Billi34 писал(а):Фото макетки сделаю на работе .
Зачем нам макетка? Нарисуйте электрическую принципиальную схему. Хоть карандашом на бумаге, а сюда скан выложите.

P.S. Финансовые вопросы насчет дорого/дешево я опущу. Хотя реализация хотелки "под ключ", я думаю, должна стоить тысяч 30-40. Дело ведь не только в печатной плате. Изготовление светящихся знаков по-нормальному, а не тяп-ляп тоже стоит денег. Плюс зарплату персоналу заплатить. Плюс прибыль какая-никакая. В общем, если с Вас запросили озвученную мной сумму, я бы на Вашем месте (на месте Вашего друга) соглашался и не парился сам. Тем более с Вашим уровнем подготовки.
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Спойлер
Billi34 писал(а): Я думаю что не так уж это дорого стоит и решил помочь другу
Хорошо, что у меня нет таких друзей. А то если бы у меня заболел аппендикс, он взял бы скальпель ( или столовый нож ) и...
Старый мудрый еврей сказал однажды: ничто не обходится нам так дорого, как дешевые решения.
Alkul писал(а): Нарисуйте электрическую принципиальную схему.
Ну это уже чересчур :))
Изображение
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Ну что вы так серьёзно-то восприняли легенду. Это ж выдумка. Совершенно не нужно устройству быть с IP67. Меандр ... выразился коряво. Обычный прямоугольный импульс, с равной длинной импульса к паузе, 65-75 имп. в минуту. "Кирпич" включается тумблером (подается 0, PIN.4). Серия прямоугольных импульсов (тактирующий) подается в случайное время и на произвольное время на PIN.3. " Кирпич" выполнен другими диодами но подключен к портам A,C,D,B (выход). Выбор нагрузки(стрелка, кирпич) осущ. переключением(+) на соотв. нагрузку.Когда включен (или выключен) "кирпич" но нет тактирующего сигнала схема в ожидании, ничего не светится. При появлении тактирующих имп. в случае включенного "кирпича" "крпич"вспыхивает синхронно с тактирующим. При выключенном "кирпиче" Первый такт. импульс вызывает сроб с дальнейшим "сдвигом"стрелки.. Начало следующего сдвига совпадает с началом очередного такт. импульса .После окончания серии такт. импульсов следующее включение стрелки должно начаться со строба.
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Ну что вы так серьёзно-то восприняли легенду., да не переживай ты так, народ заинтересовался, а значит возможно будут не плохие идеи :)) Совершенно не нужно устройству быть с IP67 А причём здесь это, похоже вы не в курсе что это обозначает. Меандр ... выразился коряво. Да всё правильно он и есть меадр.
Смущает что каждый раз приходится ресетить контроллер, можно конечно, но как то не совсем правильно.
Лучше всё же привести схему, если есть желание её улучшить или хотя бы желание или время в ней ещё покопаться, так как у многих появилось желание мозг потренировать :roll: :))
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Схема как табурет: выходы через ULN2003. Входы с внешней подтяжкой к + (почему-то внутренняя отказалась работать), защищены диодами анодом к ноге. Внутренний RС генератор. 7805 с обвязкой, RCцепочка на РЕСЕТе . IP67 класс влагозащиты, для электроприборов предназначенных для установки вне помещения. 67 погорячился. 65 хватит вполне. Вывеска может быть установлена и в внутри витрины, а здесь хватит и 31.
Я пвторю: СИ мне более понятен и я скорее всего разберусь с предложенным кодом, а ассемблер для меня чёртова грамота.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Автор, простите, я повторюсь в третий раз и больше повторяться не буду.
Для того, чтобы подсказать Вам оптимальное решение, я должен увидеть нормальное, написанное по-русски ТЗ, а не текст с обрывками ваших, простите, сумбурных технических решений (я, к примеру, по-прежнему не могу понять, зачем Вам понадобилось внешнее тактирование).
Напишите последовательно логику работы подобно тому примеру, который я уже приводил Вам ранее, укажите, сколько светодиодов должно быть в стрелке.
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Alkul писал(а): по-прежнему не могу понять, зачем Вам понадобилось внешнее тактирование
Бывает, что люди не в курсе насчет наличия таймеров в МК .
Изображение
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Jack_A писал(а):Бывает, что люди не в курсе насчет наличия таймеров в МК .
Именно поэтому я и прошу автора сформулировать внятное ТЗ на русском языке, потому что он, похоже, много насчет чего не в курсе, из-за чего его технические решения весьма странны. А нужно посмотреть на задачу в чистом виде, а не сквозь призму его как минимум не оптимальных техрешений.
Друг Кота
Аватара пользователя
Сообщения: 15705
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Billi34 писал(а):А легенда такова: мой друг(начинающий бизнесмен) решил открыть пивнушку. В стиле американского паба. Уличная реклама в виде стрелки указывающей на вход в бар периодически стробоскопирует и волнообразно засвечивается благодаря создаваемой схеме. Также есть световой знак в виде дорожного знака "кирпич" подразумевающий что входа нет. Рекламщики за такой "апгрейд" запросили немалые деньги.... .
Рекламщики не зря много денег просят - ибо сборка самих табло дело весьма муторное и имеет кучку "мелких секретов" как по применению светиков так и по некоторым другим (чисто официозо-соседскожительским), экономическим (потребление электроэнергии) и прочим параметрам.
Сам контроллер управления - исключительно на МК, причем с заранее заложенными возможностями оперативной доработки как программы, так и железа представляет наименее "трахотливую" часть проекта.
Учитывая экономический фактор используются простейшие МК и ассемблер для создания компактной и стабильной программы.
В принципе - типовая задача. Однако обычно по ходу исполнения вылазит куча мелкопакостных нюансов.
:wink:
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Описание. В пред идущих постах уже кажется всё описал. Внешнее тактирование примите, пожалуйста как данность. Такая фишка.
Вложения
код с двумя заборчиками .txt
(1.81 КБ) 105 скачиваний
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

while(PINB.3==1) // здесь циклически проверяем наличие такт. сигнала
{ //
if (PINB.4==0,PINB.3==1) // такт есть, нажата ли кнопка на пин4"?
PORTB=0b11,PORTD=0b11111111,PORTC=0b11111111,PORTA=0b11111111; да, кнопка нажата. выполняем код.
дальше не понятно как погасить все диоды и вернуться на строку while(PINB.3==1)

}

if (PINB.3==1)
{ delay_ms(100);
if(PINB.3==1)
{
Перенёс не совсем полностью но на исходник CV не ругается. И даже компилируется. Чуть позже прошью МК, посмотрим как заработает
Ответить

Вернуться в «AVR»