roboforum.ru

Технический форум по робототехнике.

avrisp2 - Помогите разобраться с программатором

Re: Помогите разобраться с программатором пожалуйста!

Сергей » 02 ноя 2008, 20:43

А в чем заключаеца проблема? Интеренет есть, гугл есть, можно тупо найти нужный исходник или МОРЕ курсов по АВР где все разжевано как раз для тебя

Re: Помогите разобраться с программатором пожалуйста!

Кирилл » 02 ноя 2008, 20:49

almazkazan писал(а):но я обязательно попробую! я клей токопроводящий купил вот - чтоб проводки приклеить к выводам от дисплея часов. а потом изучу (методом тыка), то как там сигменты высвечивать.

дерзай :D

Re: Помогите разобраться с программатором пожалуйста!

almazkazan » 02 ноя 2008, 21:25

Сергей писал(а):А в чем заключаеца проблема? Интеренет есть, гугл есть, можно тупо найти нужный исходник или МОРЕ курсов по АВР где все разжевано как раз для тебя


я нашел примеры на ассемблере. хотелось бы на Си - попроще, без шимов, юартов и т.д. :)
еще нашел такой код на Си.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

INTERRUPT(SIG_INTERRUPT0)
{PORTB^=0xFF;}

int main(void)
{DDRB=0xFF;
GIMSK=0x40;
MCUCR=0x02;
sei();
while(1);
}

но программа не компилируется- ругается на "GIMSK". еще она только для кнопки которая на ножке int0. а что делать если кнопок 5? в общем привидите пожалуйста пример кода: если на ножке 0 порта А нажали кнопку то на ножку 2 порта B подать 1. заранеее спасибо.

Re: Помогите разобраться с программатором пожалуйста!

avr123.nm.ru » 02 ноя 2008, 23:19

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

Re: Помогите разобраться с программатором пожалуйста!

almazkazan » 03 ноя 2008, 19:03

avr123.nm.ru писал(а):
almazkazan писал(а):что делать если кнопок 5 ?

В программе периодически опрашивать регистр PIN-порта к которому подключены кнопки и при изменении считать что с кнопкой что-то сделали


Спасибо! получилось :ROFL: сделал вот так:
PORTA = 0b11111111;
PORTD=0b00000000;
while(1)
{if(PINA==0b11111110) PORTD=0b00001000; //если кнопку нажали - горит 4ый светодиод
else PORTD=0b00000000; // если не нажали - ниче не горит
}

Добавлено спустя 8 минут 54 секунды:
Re: avrisp2 - Помогите разобраться с программатором
а как это делается в виде прерывания?

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

Re: avrisp2 - Помогите разобраться с программатором

Granit » 04 ноя 2008, 14:00

http://winavr.scienceprog.com/avr-gcc-tutorial/ - Гайд по программированию на AVR-GCC(он и есть в WinAVR)

Можно повторить вопрос? Как я понял надо сделать бегущий огонёк?

Создай массив например :
Код: Выделить всёРазвернуть
#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:

Код: Выделить всёРазвернуть
#include <avr/io.h>

int main(void){
DDRD = 0xff;
DDRB = 0x00;
unsigned short i = 0;
while(1){
if(bit_is_clear(PINB,0){
switch (i){
case 0: PORTD = 0b01010101; i=1;
case 1: PORTD = 0b10000001; i=2;
.....................дальше варианты любые можна делать....................
case 4: PORTD = 0b00001010; break;
}
}
}
}


Используй тег CODE! <Сергей>

собсна вот)) Опять от ошибок не застраховано - вопросы - пиши, гуру - исправьте=)

Добавлено спустя 1 час 4 минуты 12 секунд:
Хорошо, простите :oops:
Вложения
Simple.zip
Proteus & WinAVR
(46.63 КиБ) Скачиваний: 22

Re: avrisp2 - Помогите разобраться с программатором

almazkazan » 05 ноя 2008, 17:48

Granit спасибо большое! особенно за ссылку по WinAVR :)

Re: avrisp2 - Помогите разобраться с программатором

almazkazan » 05 ноя 2008, 21:52

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

может как нибудь попробывать выводить по-простому звук (голос например) через AVRку? как это вообще делается?

просьба ссылки на ШИМ не кидать :) читал теорию. но в теории нету схемы подсоединения, то как программируется, может готовые библиотеки есть?
спасибо всем заранее

Re: avrisp2 - Помогите разобраться с программатором

Granit » 07 ноя 2008, 09:09

Для звука через AVR насколько мне известно тебе тоже надо будет ШИМ выводить. Кстати, я вот думаю от часов Монтана пикалка подойдёт?))

Re: avrisp2 - Помогите разобраться с программатором

almazkazan » 08 ноя 2008, 20:24

блин или от сотового :) люди, кто знает, подскажите новичкам!

как динамик соединять и как на Си это обрабатывается, мы хотим чтоб этот динамик звуки издавал, или, что еще лучше, чтоб что то говорил. (тогда как этот звук разместить в АВР, или память надо соединять чтоли... :roll: как это делается вобщем?)

Re: avrisp2 - Помогите разобраться с программатором

avr123.nm.ru » 08 ноя 2008, 20:32

almazkazan писал(а):как динамик соединять и как на Си это обрабатывается, мы хотим чтоб этот динамик звуки издавал, или, что еще лучше, чтоб что то говорил. (тогда как этот звук разместить в АВР, или память надо соединять чтоли... :roll: как это делается вобщем?)


Цифровой диктофон - АпНоут AVR335 ATMEL - есть там http://avr123.nm.ru/07.htm - в низу странички. C исправленым кодом и на русском - задача 7 у меня в курсе - http://avr123.nm.ru/z7.htm

Можно в PROTEUS выводить звук из симулируемого устройства на аудиокарту ПК !

Генерация ШИМ - http://avr123.nm.ru/z8.htm

Фильтрация усиление и масштабирование сигналов - http://avr123.nm.ru/z09b.htm
Последний раз редактировалось avr123.nm.ru 16 июн 2009, 20:22, всего редактировалось 1 раз.

Re: avrisp2 - Помогите разобраться с программатором

Denisvv » 16 июн 2009, 20:15

Здравствуйте!
Помогите советом. Недавно купил программатор AVRISP2 и к нему микроконтроллер Atmega8-16PU, установил AWR studio4, драйвера, написал программу,... подключил контроллер к программатору. Комп видит программатор но связи с МК нет. При нажатии кнопок Erase или Program или любой попытке связаться с контроллером загорается красный светодиод на программаторе. На экране выводится что то вроде NO TARGET POWER, связь с МК естественно невозможна. Подскажите как это можно исправить?

Re: avrisp2 - Помогите разобраться с программатором

avr123.nm.ru » 16 июн 2009, 20:25

Фраза типа - "нет питания программируемого устройства". Для успешного пограммирования AVR нужно выполнить несколько условий описаных на страничке учебного курса по AVR - "Всё о прошивке AVR" - адрес

Советую начинать учится программированию микроконтроллеров на симуляторах типа VMLAB или лучше PROTEUS - http://proteus123.narod.ru

Re: avrisp2 - Помогите разобраться с программатором

Denisvv » 16 июн 2009, 23:03

Имеете ввиду установка fuse bits?

Re: avrisp2 - Помогите разобраться с программатором

avr123.nm.ru » 16 июн 2009, 23:19

не только, но и они тоже. Там комплекс требований описан.


Rambler\'s Top100 Mail.ru counter