Свежие обсуждения
Микроконтроллеры

Помогите начинающему написать программу

1 3

Добрый всем день ,вечер, ночь, утро...
Помогите пожалуйсто написать программу, которая бы смогла выполнять то что я опишу ниже.

Итак,
1) (сдесь и далее моё дилитантское мнение) первое что наверное самое важное, это то что пишим программу мы для PIC16F628A.
2) микроконтроллер будет иметь только 3 входа( , мне надо что бы при нажатии на кнопочки менялось 2 переменные, 2 кнопочки будут отвечать за изменение 1ной переменной в большую или меньшую сторону, нажатие третьей кнопочки будет менять другую переменную от1 до 4 с шагом 1 по кругу.)
3)выходов будет 5
а теперь про то что я жду от программы......

первая переменная это выходы 1-4......чего я хочу? я хочу что бы при нажатии на кнопку( например кнопку 1 , допустим PORTA1) менялся выход (например PORTB2 на PORTB3)....ну а если проще, то наверное так:
включили мы микроконтроллер, сразу же появился сигнал на выходе №1 ( допустим логическая единица, высокий уровень , или как там правильно).....потом нам захотелось что бы на этом выходе сигнал пропал, и появился на выходе №2....нажали кнопку, сигнал на первом выходе пропал, и сразу же появился на втором.......при повторном нажатии на кнопку выход №2 меняется на №3, ещё раз, выход №3 на выход №4 , и затем выход №4 на №1.......(ну наверное понятно....)

оставшиеся 2 кнопки и выход мне нужны вот зачем:
пусть есть какая то переменная T которая не может быть меньше чем 0( или единица) и не больше чем 30
пусть T+O=50милисекунд

я хочу что бы на оставшийся выход, подавался сигнал......не знаю как он правильно называется, но тем не менее попытаюсь обьяснить как он зависит от этих переменных.....
пусть в момент включения микроконтроллера T=15, на оставшемся выходе ( допустим PORTB5) будет высокий уровень( +5В)....начинается отсчёт времени равный O, по истечению O милисекунд ,на выходе создаётся низкий уровень ( 0В), начинается отсчёт времени= T милисекунд, по истечению которого опять создаётся высокий уровень .....(короче цикл заново.....)

далее, если нажали на кнопку (допустим №2) то T становится равным T=T+1
если нажали кнопку (допустим №3) то T=T-1
если T уже достигло максимума или минимума то ничего не меняется....

вот наверное и всё что я хотел бы.....
прошу прощения если что то написанно коряво или как то не правильно с точки зрения "электронщиков".......бо я так сказать пионер))):D
пытался сам читать про программирование микроконтроллеров, но вот что касается дела написать самому то тут начинаются проблемы......мне кажется что у людей давно занимающихся программирование не вызовит сложностей написание такой программы......с точки зрения логики она по моему достаточно проста, но я очень хренова понимаю синтаксис программирования......

надеюсь моя просьба не останется без ответа, заранее спасибо)
жду с нетерпением коментариев.

 

BreAkeR: Помогите пожалуйсто написать программ

чем ?

 

BreAkeR: пытался сам читать про программирование микроконтроллеров, но вот что касается дела написать самому то тут начинаются проблемы......

Так у всех, ИМХО, было и бывает время от времени. Это и так ясно, объяснять не требуется. А если кто-нибудь на ассемблере напишет, вас устроит (т.е. вы планируете с какого языка программирования начать изучение)?

По первой задаче, для лучшего понимания того что вам нужно от PIC-а, лучше составить в виде таблицы истинности состояние выходов в зависимости от сигналов на входах (с кнопок). Желательно ещё принципиальную эл-ю схему набросать для начала, т.к. до неё о программе думать в общем-то рано. Тогда, тем, кто откликнется на вашу просьбу, будет полегче понять, что же требуется.

Вторая задача ваша связана с отсчётом времени от N-го значения до нуля после подачи питания на PIC и, после окончания обратного отсчёта, переключение какого-то выхода в обратное состояние.

Итого: [работа с кнопками] [работа с таймером МК]. По поиску на этом форуме найдётся и то и другое. Почитайте для начала, легче ответы понять будет.

 

ну по мне так лучше на С что бы прога была написана.
ну а принципиалку,как смогу сча набросаю....мне просто казалось что не сильно принципиалка тут поможет....

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

у меня если честно больше всего вызывает проблем понимание того, какой функцией и как можно постоянно опрашивать кнопки, тоесть входы.....
тоесть основное то тело программы, будет такое , мол включить выход 5 , подождать, выключить, подождать, .....и т.д.......но надо как то же есил вдруг на входах ноль появится что то поменять.......тут у меня и загвоздочка.....
так попытаться набросать схему?

 

сори, не внимательно прочёл....а где можно про кнопки и работу с таймером почитать????
я в принципе всё равно рано или поздно хочу таки понять как писать программы сам)))

 

http://www.ikarab.narod.ru/ там все необходимое найдется в бесплатных разделах, но на ассемблере. Хотя, именно с него лучше начинать программирование контроллеров, ассемблер для пиков предельно прост, три десятка команд всего, и архитектуру контроллера именно с ассемблером уяснить проще всего.

 

Например здесь про кнопки, классический случай синхронной обработки кнопок можно сказать в итоге получился - http://pro-radio.ru/controllers/7140/.
Про работу с таймером пока не заморачивайтесь, разберитесь с кнопками. Уж поверьте, будет чем заняться Кстати вот прога в помощь (см. в аттаче). Сейчас главное алгоритмы, а тип МК-ра вторичен.

BreAkeR: мне просто казалось что не сильно принципиалка тут поможет....

Как бы в голове стОит держать примерно следующее, т.е. примерный алгоритм разработки устройств с применением МК:

1. получить ТЗ на разработку устройства (состав, функции его, т.е. "что-же должно выполнять будущее устройство" (по пунктам желательно).
2. определить алгоритм работы устройства (порядок функционирования устройства, от включения питания так сказать...).
3. определиться с доступностью комплектации и средств программирования/отладки.
4. выбрать среду проектирования, исходя из своей подготовки и сложности проекта и доступности документации на неё и на МК.
5. выбрать собственно МК, учитывая пп.1-4 и, возможно, какие-то особые требования к устройству.
6. придумать, нарисовать принципиальную схему, исходя из нужной функциональности (по ТЗ).
7. собственно начать программирование, обращаясь к пп.1,2,6.
8. корректировка ТЗ/программы и т.п.
9. симулирование, изготовление и отладка устройства (макетки и т.д.).

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

224466.zip

 

BreAkeR: так попытаться набросать схему?

Прямо сейчас не надо Но в ближ. будущем потребуется, ведь так нагляднее и вам самим же пригодится.

 

Смахивает на контрольную работу или курсовик.

 

нет....я для себя))))сроки меня не интересуют)))я ваще электрохимик будущий))))