Программа должна реагировать только на замыкание контактов кнопки.
avr управление светодиодами.
- Сообщения: 3
- Зарегистрирован: Чт янв 10, 2013 14:20:30
Нужно написать программу осуществляющую опрос трех кнопок, нажатие каждой из кнопок назначит выключение светодиода соответствующего цвета. Время выключения каждого светодиода 3 секунды. Нажатие другой кнопки должно обнулять текущее состояние и включать соответствующий выход.
Программа должна реагировать только на замыкание контактов кнопки.
Программа должна реагировать только на замыкание контактов кнопки.
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
а как писать программу без схемЫ? выставляйте схему этого светофора, подскажу по программе
- Сообщения: 3
- Зарегистрирован: Чт янв 10, 2013 14:20:30
Это условие задачи из контрольной работы и там больше ничего нету. Вы под схемой подразумеваете алгоритм?
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
алгоритм как раз понятен,
чтобы написать программу надо знать
1. какой контроллер
2. на какие выводы подключены диоды
3. на какие подключены кнопки.
4. какой бюджет данного задания
чтобы написать программу надо знать
1. какой контроллер
2. на какие выводы подключены диоды
3. на какие подключены кнопки.
4. какой бюджет данного задания
- Сообщения: 3
- Зарегистрирован: Чт мар 28, 2013 17:23:21
Доброго всем вечера!
0чень хочеться разобраться, как пишуться программы для микроконтроллеров.
Много полазил по нету, но понял очень мало.
Тупо скачать программу и зашить в МК - не проблем.
Хочеться научиться понимать язык программирования.
Вот один пример:
Не знаю прикрепил ли файл или нет.
Вообщем берем Мегу16, через резисторы к порту С - 8 светодиодов - минус.
Задача такая все светотиоды должны загораться поочереди, с 1-го по 8-ой и так по бесконечному кругу.
нашим язвком я понимаю:-----------------------------------------------------язык программирования
1. Надо порт С обозачить как выход. ---------------------------------------DDRC ?
2. Надо на С0 подать высокий уровень, а на остальные низкий --------PORTC 10000000
3. надо выдержать 0,5 сек-----------------------------------------------------?
4. надо на с1 подать высокий уровень, а на остальные низкий----------PORTC 01000000
5. надо выдержать 0,5 сек-----------------------------------------------------?
6. надо на с2 подать высокий уровень, а на остальные низкий----------PORTC 00100000
7. надо выдержать 0,5 сек-----------------------------------------------------?
8. надо на с3 подать высокий уровень, а на остальные низкий----------PORTC 00010000
9. надо выдержать 0,5 сек-----------------------------------------------------?
10. надо на с4 подать высокий уровень, а на остальные низкий---------PORTC 00001000
11. надо выдержать 0,5 сек----------------------------------------------------?
12. надо на с5 подать высокий уровень, а на остальные низкий---------PORTC 00000100
13. надо выдержать 0,5 сек----------------------------------------------------?
14. надо на с6 подать высокий уровень, а на остальные низкий---------PORTC 00000010
15. надо выдержать 0,5 сек ---------------------------------------------------?
16. надо на с7 подать высокий уровень, а на остальные низкий---------PORTC 00000001
17. надо выдержать 0,5 сек ---------------------------------------------------?
18. надо вернуться ко 2-ому шагу---------------------------------------------?
Сильно не пинайте пожалуйста, но мне кажеться так проще будет понимать язык, мне это точно, а может быть и остальным желающим.
Поняв принцип написания такого простого, можно усложнять и усложнять.
И еще - как добавить скриншот?
0чень хочеться разобраться, как пишуться программы для микроконтроллеров.
Много полазил по нету, но понял очень мало.
Тупо скачать программу и зашить в МК - не проблем.
Хочеться научиться понимать язык программирования.
Вот один пример:
Не знаю прикрепил ли файл или нет.
Вообщем берем Мегу16, через резисторы к порту С - 8 светодиодов - минус.
Задача такая все светотиоды должны загораться поочереди, с 1-го по 8-ой и так по бесконечному кругу.
нашим язвком я понимаю:-----------------------------------------------------язык программирования
1. Надо порт С обозачить как выход. ---------------------------------------DDRC ?
2. Надо на С0 подать высокий уровень, а на остальные низкий --------PORTC 10000000
3. надо выдержать 0,5 сек-----------------------------------------------------?
4. надо на с1 подать высокий уровень, а на остальные низкий----------PORTC 01000000
5. надо выдержать 0,5 сек-----------------------------------------------------?
6. надо на с2 подать высокий уровень, а на остальные низкий----------PORTC 00100000
7. надо выдержать 0,5 сек-----------------------------------------------------?
8. надо на с3 подать высокий уровень, а на остальные низкий----------PORTC 00010000
9. надо выдержать 0,5 сек-----------------------------------------------------?
10. надо на с4 подать высокий уровень, а на остальные низкий---------PORTC 00001000
11. надо выдержать 0,5 сек----------------------------------------------------?
12. надо на с5 подать высокий уровень, а на остальные низкий---------PORTC 00000100
13. надо выдержать 0,5 сек----------------------------------------------------?
14. надо на с6 подать высокий уровень, а на остальные низкий---------PORTC 00000010
15. надо выдержать 0,5 сек ---------------------------------------------------?
16. надо на с7 подать высокий уровень, а на остальные низкий---------PORTC 00000001
17. надо выдержать 0,5 сек ---------------------------------------------------?
18. надо вернуться ко 2-ому шагу---------------------------------------------?
Сильно не пинайте пожалуйста, но мне кажеться так проще будет понимать язык, мне это точно, а может быть и остальным желающим.
Поняв принцип написания такого простого, можно усложнять и усложнять.
И еще - как добавить скриншот?
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
надо скачать прграмму а не HEX прошивку. например все начинают с моргания светодиодом, поняв принцип этого простого действия можно добавлять в эту программку свои изменения. все просто )Поняв принцип написания такого простого, можно усложнять и усложнять.
а добавить скрин еще проще - нажать кнопку обзор, а потом Добавить файлИ еще - как добавить скриншот?
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
чтобы усложнять - надо знать язык программирования и особенности программирования контроллеровYan 39 писал(а):Поняв принцип написания такого простого, можно усложнять и усложнять.
твой пример помещается в 3 строчки кода
ничего необычного - 95% материала угYan 39 писал(а):Много полазил по нету, но понял очень мало.
кпд восприятия печатного текста 3-9%
человеческий мозг у неупотрябляющего алкоголь работает на 3%, так что все нормально
нужно затратить прилично времени, пока сам допреш или же найти человека в реале и тогда все пойдет быстрее
тематические ответы только в форуме, в приват не пишите
- Сообщения: 3
- Зарегистрирован: Чт мар 28, 2013 17:23:21
все правильно вы говорите.
поэтому я и обратился сюда с такой просьбой, помочь понять и научить меня (а может и не только меня) писать программы для МК.
в реале найти пока не смог такого человека.
на сколько я понимаю писать программы можно несколькими языками.
1. какой язык для обучения выбрать (легче в обучении).
2. после выбора языка надо знать с чего начинать писать программу.
3. какие функции нужно знать для написания программы.(чтобы было более понятно выбрал МК и несколько светодиодов).
4. если это возможно то например в этой ветке и обучаться задавая спецам вопросы.может выбрать новую тему в форуме, для того чтобы желающие могли в последствии прочитать и также понять принципы написания программ.
5. то что можно написать такой цикл в три строчки я понял , но хотелось бы сначала написать полный цикл а затем в три строчки чтобы понять как это вообще пишется.
так что сильно не пинайте , а если есть возможность и желание помогите мне.
поэтому я и обратился сюда с такой просьбой, помочь понять и научить меня (а может и не только меня) писать программы для МК.
в реале найти пока не смог такого человека.
на сколько я понимаю писать программы можно несколькими языками.
1. какой язык для обучения выбрать (легче в обучении).
2. после выбора языка надо знать с чего начинать писать программу.
3. какие функции нужно знать для написания программы.(чтобы было более понятно выбрал МК и несколько светодиодов).
4. если это возможно то например в этой ветке и обучаться задавая спецам вопросы.может выбрать новую тему в форуме, для того чтобы желающие могли в последствии прочитать и также понять принципы написания программ.
5. то что можно написать такой цикл в три строчки я понял , но хотелось бы сначала написать полный цикл а затем в три строчки чтобы понять как это вообще пишется.
так что сильно не пинайте , а если есть возможность и желание помогите мне.
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Чтобы научиться писать программы для МК, сначала надо научиться писать программы вообще, т.е., научиться алгоритмизовать задачи. Если человек умеет алгоритмизовать, то язык для него неважен (разумеется, в рамках одной парадигмы) - синтаксис изучается максимум за два дня, а принципы везде одни и те же.
Найдите какую-нибудь классическую книжку по Си. Именно ANSI C, без всяких плюсов и шарпов! С, С++ и C# - разные языки! Почитайте ее. Попишите консольные (чтобы не зацикливаться на GUI, он для МК ни к чему) программы на ПК. Всякие сортировки, калькуляторы, арканоиды и прочее, что пишут новички.
Параллельно изучайте цифровую и аналоговую схемотехнику. По этой теме тоже есть куча книжек. Естесственно, обязательный минимум - учебник физики и Горовиц с Хиллом ("Искусство схемотехники"). Глядите схемы, что попадаются под руку, осиливайте, как они работают.
И обязательно учите технический английский. Без него в электронике делать нечего. Берите даташит на ту же ATmega8, и переводите с техническим словарем. Берите аппноуты от производителей и действуйте так же.
Когда Вы научитесь алгоритмизовать и будете чувствовать себя уверенно в плане схемотехники, можно будет совместить два умения, и тренироваться уже с железом, постигая его специфику. На этом этапе полезно поковырять асемблер для целевого микроконтроллера.
Задавать на форуме вопросы, конечно, можно и нужно. Но перед этим надо самостоятельно разобраться с 95% материала, ибо пересказывать, например, свойства операционных усилителей Вам тут никто не будет - про это и так написаны тонны литературы.
Да, очень желательно найти рядом кого-то, кто разбирается. Причем хорошо бы, чтобы он не только знал сам, но и умел доступно объяснить. Это сильно упростит задачу.
Найдите какую-нибудь классическую книжку по Си. Именно ANSI C, без всяких плюсов и шарпов! С, С++ и C# - разные языки! Почитайте ее. Попишите консольные (чтобы не зацикливаться на GUI, он для МК ни к чему) программы на ПК. Всякие сортировки, калькуляторы, арканоиды и прочее, что пишут новички.
Параллельно изучайте цифровую и аналоговую схемотехнику. По этой теме тоже есть куча книжек. Естесственно, обязательный минимум - учебник физики и Горовиц с Хиллом ("Искусство схемотехники"). Глядите схемы, что попадаются под руку, осиливайте, как они работают.
И обязательно учите технический английский. Без него в электронике делать нечего. Берите даташит на ту же ATmega8, и переводите с техническим словарем. Берите аппноуты от производителей и действуйте так же.
Когда Вы научитесь алгоритмизовать и будете чувствовать себя уверенно в плане схемотехники, можно будет совместить два умения, и тренироваться уже с железом, постигая его специфику. На этом этапе полезно поковырять асемблер для целевого микроконтроллера.
Задавать на форуме вопросы, конечно, можно и нужно. Но перед этим надо самостоятельно разобраться с 95% материала, ибо пересказывать, например, свойства операционных усилителей Вам тут никто не будет - про это и так написаны тонны литературы.
Да, очень желательно найти рядом кого-то, кто разбирается. Причем хорошо бы, чтобы он не только знал сам, но и умел доступно объяснить. Это сильно упростит задачу.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
нету тут никакого легче, важен синтаксисYan 39 писал(а):1. какой язык для обучения выбрать (легче в обучении).
я лично не переваривают синтаксис бейсика или паскаля, а кто-то пишет на них и не жалуется
http://www.mikroe.com/ выбери себе семейство контроллеров и компилятор под нужный язык
могу только сказать, что популярны нынче авр и си
с мигания светодиодомYan 39 писал(а):2. после выбора языка надо знать с чего начинать писать программу.
это есть в любом обучающем курсе
http://www.youtube.com/watch?v=jbhhINZ7 ... FE73BD1DE1 вот у этого мужика есть примеры с самого нуля
никаких функций нетYan 39 писал(а):3. какие функции нужно знать для написания программы.(чтобы было более понятно выбрал МК и несколько светодиодов).
смысл в программировании мк - запись и чтение числ в регистрах самого мк, а так же выставление или чтение 1 или 0 с нужных выводов мк, которые соединены со внешним миром
вот придумай себе алгоритм мигания светодиодом на простом языке и потом дальше по частям пробуй
записал ты в порт 1
сделал паузу
записал в порт 0
сделал паузу
и так в бесконечном цикле
стандартная заготовка для всех прог мк выглядит так
void main (void){
инициализация периферии
while(1){
твой код}
}
готовые стандартные функции есть в си, но для мк их не используют особо
есть готовые библиотеки для работы с внешней периферией или модулями самого мк
например в компиляторах от microe есть удобные библиотеки, которые тебе помогут на начальном уровне
как их использовать - указано в хелпе и примерах
этот вопрос уже сто раз задавался и надо просто читать статьи, брать и делатьYan 39 писал(а):4. если это возможно то например в этой ветке и обучаться задавая спецам вопросы.может выбрать новую тему в форуме, для того чтобы желающие могли в последствии прочитать и также понять принципы написания программ.
сразу ничего не получится и надо отложить на потом
полный цикл и будет в 3 строчкиYan 39 писал(а):5. то что можно написать такой цикл в три строчки я понял , но хотелось бы сначала написать полный цикл а затем в три строчки чтобы понять как это вообще пишется.
работа твоего устройства описывается сначала алгоритмом псевдоязыка, как я тебе уже выше сказал
потом тебе надо найти, как на конкретном контроллере выставит 1 или 0 на конкретном выводе
это написано в даташите или в обучалке на этот мк
например в авр за эти операции отвечает регистр PORTx
я тебе расписал всеYan 39 писал(а):а если есть возможность и желание помогите мне
советую для начала потренироваться просто писаниной консольных прог под виндовс, а то контроллер каждый раз надо шить, а это время занимает
и помни, что не каждый мозг заточен под быдлокодинг
я за 20 лет так и не осилил
не все же могут быть музыкантами и художниками, так и не все могут писать проги
тематические ответы только в форуме, в приват не пишите


