almazkazan писал(а):но я обязательно попробую! я клей токопроводящий купил вот - чтоб проводки приклеить к выводам от дисплея часов. а потом изучу (методом тыка), то как там сигменты высвечивать.
Сергей писал(а):А в чем заключаеца проблема? Интеренет есть, гугл есть, можно тупо найти нужный исходник или МОРЕ курсов по АВР где все разжевано как раз для тебя
я нашел примеры на ассемблере. хотелось бы на Си - попроще, без шимов, юартов и т.д. еще нашел такой код на Си.
int main(void) {DDRB=0xFF; GIMSK=0x40; MCUCR=0x02; sei(); while(1); }
но программа не компилируется- ругается на "GIMSK". еще она только для кнопки которая на ножке int0. а что делать если кнопок 5? в общем привидите пожалуйста пример кода: если на ножке 0 порта А нажали кнопку то на ножку 2 порта B подать 1. заранеее спасибо.
almazkazan писал(а): хотелось бы на Си - попроще, без шимов, юартов и т.д.
Пожалуйста. Самое простое для AVR - мигание светодиодом в WinAVR и PROTEUSс картинками-скриншотамиhttp://avr123.nm.ru/04.htm файлы в архиве приложены там же.
Добавлено спустя 4 минуты 49 секунд:
almazkazan писал(а):что делать если кнопок 5 ?
В программе периодически опрашивать регистр PIN-порта к которому подключены кнопки и при изменении считать что с кнопкой что-то сделали http://avr123.nm.ru/05.htm Можно кнопочки подключить к разным резистоам и получить делитель напряжения на разное число и подключить на АЦП ( http://avr123.nm.ru/z11.htm ) - измерять напругу и вычислять какая кнопка нажата. Как прочитать какая кнопка нажата в задача о таймере - http://avr123.nm.ru/06.htm
В программе периодически опрашивать регистр PIN-порта к которому подключены кнопки и при изменении считать что с кнопкой что-то сделали
Спасибо! получилось сделал вот так: PORTA = 0b11111111; PORTD=0b00000000; while(1) {if(PINA==0b11111110) PORTD=0b00001000; //если кнопку нажали - горит 4ый светодиод else PORTD=0b00000000; // если не нажали - ниче не горит }
Добавлено спустя 8 минут 54 секунды: Re: avrisp2 - Помогите разобраться с программатором а как это делается в виде прерывания?
а то тут ведь пин порт считывается в начале цикла только, а если кнопка будет нажата когда будет выполнятся середина цикла то ничего не произойдет. произойдет только когда цикл начнется сначала. а это не есть гуд, в случае если в беконечном цикле очень большая программа....
#include <avr/io.h> //Заголовочный файл ввода-вывода #include <util/delay.h> // А это файлик для формирования задержек #define F_CPU 8000000UL //Сообщаем какая тактовая частота будет, в Герцах
int main (void){ //главная функция, с которой начинает работать программа unsigned int leds[9] = { //создаём массив со значениями куда подавать единичку)))) 0b00000000, //начинаем с нуля, иначе первый светодиод при переполнении счётчика гореть не будет 0b00000001, //Первый светодиод 1, остальные 0 0b00000010, //Второй светодиод 1, остальные 0, и т.д. 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000};
DDRD = 0xff; // конфигурируем пины порта D как выходы
unsigned short i; // Переменная - счётчик, будем указывать в качестве индекса массива // Теперь самая тема:
for(i=0; i < 9; i++){ //Тут я намутил)))) т.е. перечисление у нас будет с 0 до 8, т.е. все 8 элементов будут перечислены
PORTD = leds[i]; //теперь за каждый оборот цикла будет мигать следующий светодиод _delay_ms(250); // Задержка 250 милисекунд if(i==8){ /*Когда счётчик 8 равен. тогда обнуляем его, при этом по неизвестной мне причине первый элемент массива - точнее 0b00000000, пропускается */ i=0; } } }
//Нана оставить пустую строчку чтобы наш компилятор не ругался типа end of file плохой и всё такое
Проверил в протеусе - усё работает. Во вложении весь проект с симуляцией;) Всё сделано под Mega8 с частотой 8 МГц, и программатор stk200. Если вопросы будут - сразу пиши. Гуру тоже пишите, знаю что-что неправильно хоть и работает, но что - нинаю))) Выкрутился за счёт нуля на всех ножек, иначе первый светодиод бы не горел. Можно сделать чтобы в обратку сё бежало, но это уже другая история;)
И ещё - не бросай WinAVR))) А то как-то мало народу прогает на нём(( Нескем будет поделиться или спросить)))
Добавлено спустя 24 минуты 5 секунд: Сорри, прочитал что тебе конкретно надо, можно сделать просто, есть такая функция: bit_is_clear(PINB, 0) Можно как сделать: сконфигурировать порт B как вход: DDRB = 0x00; вроде так)) и потом if(bit_is_clear(PINB,0)) bit_is_clear(PINB,0) - еси кнопку нажали на на 0 пине порта B, и есть ещё фича loop_until_bit_is_set(PIND, 0); - тока я не понял всё ещё нафиг она нужна, это вроде пока кнопка зажата вот прогруля))) опять же на WinAVR:
светодиоды у меня помигали, по-разному помигали и бегущий огонек побегал и кнопки понял как подключать/обрабатывать. весело это всё, блин. а что дальше посоветуете попробывать сделать новичку?
может как нибудь попробывать выводить по-простому звук (голос например) через AVRку? как это вообще делается?
просьба ссылки на ШИМ не кидать читал теорию. но в теории нету схемы подсоединения, то как программируется, может готовые библиотеки есть? спасибо всем заранее
блин или от сотового люди, кто знает, подскажите новичкам!
как динамик соединять и как на Си это обрабатывается, мы хотим чтоб этот динамик звуки издавал, или, что еще лучше, чтоб что то говорил. (тогда как этот звук разместить в АВР, или память надо соединять чтоли... как это делается вобщем?)
almazkazan писал(а):как динамик соединять и как на Си это обрабатывается, мы хотим чтоб этот динамик звуки издавал, или, что еще лучше, чтоб что то говорил. (тогда как этот звук разместить в АВР, или память надо соединять чтоли... как это делается вобщем?)
Здравствуйте! Помогите советом. Недавно купил программатор AVRISP2 и к нему микроконтроллер Atmega8-16PU, установил AWR studio4, драйвера, написал программу,... подключил контроллер к программатору. Комп видит программатор но связи с МК нет. При нажатии кнопок Erase или Program или любой попытке связаться с контроллером загорается красный светодиод на программаторе. На экране выводится что то вроде NO TARGET POWER, связь с МК естественно невозможна. Подскажите как это можно исправить?
Фраза типа - "нет питания программируемого устройства". Для успешного пограммирования AVR нужно выполнить несколько условий описаных на страничке учебного курса по AVR - "Всё о прошивке AVR" - адрес
Советую начинать учится программированию микроконтроллеров на симуляторах типа VMLAB или лучше PROTEUS - http://proteus123.narod.ru