Список разделов Flyback.org.ru » не HV » МК для начинающих.
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегестрированные - Нет
тема: МК для начинающих.
Ответить с цитатой

Шурик
Злодей


Пружина писал(а):
Хочу взяться за освоение мк, но ничего о них не знаю. Посоветуйте с чего начать, было бы неплохо какую-нибудь книгу для чайников по AVR. В интернете много статей, но в них изобилует жаргон, который мне не понятен.
Охотник писал(а):
лучше сразу stm32 осваивай
Думается мне, что уже пора создать тему для новичков.
ИМХО, лучше начать с АВРов, они как-то проще и понятнее, да и инфы и самоучителей и софта для них больше, и уже готовых прошивок. http://123avr.com


Последний раз редактировалось: Шурик (Fri Nov 15, 2013 3:52 am), всего редактировалось 2 раз(а)
Добавлено: Wed Nov 13, 2013 4:40 am
Ответить с цитатой

qic
 


Советую начать с установки Proteus и AVRStudio. Потом найти и скачать русифицированный даташит на ATMega128.
Собрать в протеусе "отладочную плату" с кнопками, потенциометрами, лампочками и экранчиком, и подключать и запускать это погугливая как делается.
Вообще лучше конечно в железе, так интереснее.

На 123avr язык изложения ну уж больно кхм.

Добавлено: Wed Nov 13, 2013 8:32 am
Ответить с цитатой

BenG
 


Начать однозначно с AVR. Под них полно простых программаторов, с ними нормально дружит Proteus(поставь обязательно) да и AVRStudio весьма дружелюбная вещь. Видимо поэтому они получили такое распространение.

На www.easyelectronics.ru есть отличный учебный курс, с доходчивым объяснением все, начиная с самых основ. Плюс есть еще 100500 сайтов с "разжеванными" примерами(типа www.GetChip.net, www.avrproject.ru, и т.д.) Советую почитать и не пугатся ассемблера, при переходе на Си-шку это только на пользу, будешь лучше понимать, что у тебя там реально происходит. Ибо копирастия готовых кодов, скетчей и библиотек - это конечно приятно, но это не программирование, а говноляпство(ИМХО).
http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/5
http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/4
http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/3
http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/2
http://easyelectronics.ru/category/avr-uchebnyj-kurs

ЗЫ: Курс по STM там, кстати, тоже ничего, но они явно не для начинающих.

Добавлено: Wed Nov 13, 2013 11:19 am
Ответить с цитатой

qic
 


BenG писал(а):
говноляпство
На той неделе пытался подключить WH1602 к stm32vldiscovery, пару дней бился искал либы, в конце всё кончилось тем что я сам переписал почти целиком одну из понравившихся либ прям по даташиту, оно бы заработало, еслибы случайно пробитая одна из ног stm, а потом еще одна, и вообще нога даты ЖКИ выдавала 5В, моим психом и легким дестроем жки всё кончилось.
Вообще я к чему - хоть железные приколы и встречаются, но раз такая пьянка - протеус и avr, да и в железе как минимум удобнее для радиолюбителя 0-5В, много чего.
Для чего современнее нужно больше скилла.

Добавлено: Wed Nov 13, 2013 11:53 am
Ответить с цитатой

Vitek_22
Простой советский бомж


Нет случаем ни у кого кода на С для счёта импульсов с ноги атмеги за определённое время? Нигде не могу найти примера (я по ним стараюсь изучать это дело). Сам пытался в симуляторе что-то замутить, но так и не понял как там организовать прерывание

P.S. Зато уже мигал светодиодом подмигивает Таки заказал с китай программатор, скоро с симулятора в реальность перейду

Добавлено: Wed Nov 13, 2013 3:13 pm
Ответить с цитатой

Пружина
Экзорцист


BenG писал(а):
Советую почитать и не пугатся ассемблераАга, я как-раз хотел с него начать, чтобы сразу, так сказать, зрить в корень.
Спасибо за подробную информацию!

Добавлено: Wed Nov 13, 2013 5:33 pm
Ответить с цитатой

qic
 


Vitek_22 писал(а):
счёта импульсов
Кода нет но ищи:
-внешние прерывания и их обработка, с примером, их есть.
-работа с прерываниями по таймеру - настраивается таймер на нужное время

В прерывании по внешнему импульсу инкремент переменной.
В прерывании по таймеру - забираешь значение и обнуляешь.
Всё.

2/3 кода делается в avr-wizard - выбрал таймер и время, выбрал прерывание и как - на выходе почти готовый код.
Вписываешь про переменную и всё.

Если не понял то могу написать -_-

Добавлено: Wed Nov 13, 2013 6:08 pm
Ответить с цитатой

Vitek_22
Простой советский бомж


qic писал(а):
Если не понял то могу написать -_-
О, это было бы прекрасно. Я уже не могу читать про это прерывание, мозг плавится, но ника не соображу, как сопрячь это

Вот к примеру мы установили таймер и предделитель так, чтобы каждую секунду срабатывало:

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
s++; // увеличиваем переменную каждую секунду
if(s>59) // обнуляем секунды после 59
{
s=0;
}

Как теперь с порта A1 подсчитать кол-во импульсов за определённое время?

Добавлено: Wed Nov 13, 2013 7:19 pm
Ответить с цитатой

qic
 


Чета ты намудрил, я не могу вчитаться (да и не хочу), держи отрыжку былокода для авр студии, для atmega8 16МГц /1с.

Настраиваем таймер функцией (или внутренность перенести в main)
Код:
void Timer1_Init(void)
{
   // Timer1 settings: ~ 16000000 ticks (1000000 us / 1000 ms / 1 sec)
   TCCR1B = (1<<CS12); // CLK/256
   TIMSK = (1 << TOIE1); // Timer/Counter1 Overflow Interrupt Enable
   TCNT1H = 11;
   TCNT1L = 220;
}

Его обработчик прерывания (без остановки прерываний, ато еще импульс пропустим Smile )
Код:
ISR(TIMER1_OVF_vect) // Timer/Counter1 Overflow
{
   TCNT1H = 11;
   TCNT1L = 220;
   perem1 = temp;
        temp = 0;
}


Настраиваем внешнее прерывание
Код:
void ExtIrq_Init(void)
{
   MCUCR |= (1<<ISC01) | (1<<ISC00); // The rising edge of INT0 generates an interrupt request
   GICR |= (1<<INT0); // External Interrupt Request 0 Enable
}

И его обработчик (с инкрементом сразу)
Код:
ISR(INT0_vect) // External Interrupt Request 0
{
   temp++ ;
}

В главном цикле остается настроить порт на вход и вызвать функции настройки прерывания и таймера, ну и обрабатывать значение переменной
Код:
        ExtIrq_Init();
   Timer1_Init();
   sei(); // enable interrupts


Конечно в меня вероятно кинут тапком, потому что у таймера есть счетный режим, но я не счел нужным в нем разбираться смех


Добавлено: Wed Nov 13, 2013 9:17 pm
Ответить с цитатой

Mastak13
 


а существуют ли в природе usb программаторы для авр, сделанные не на основе микроконтроллера?

Добавлено: Wed Nov 13, 2013 9:41 pm
Ответить с цитатой

qic
 


Да, например ft232 и моё любимое http://www.drive2.ru/cars/volvo/xc90/xc90/y-g/2/journal/497649/
Хотя и там и там чип, полагаю без "микроконтроллера" не выйдет =)

Добавлено: Wed Nov 13, 2013 10:31 pm
Ответить с цитатой

BenG
 


Как это не выйдет, а это: Скоростной AVR USB программатор на FT232RL без вспомогательного контроллераl

Опробован лично мной в качестве программатора и UARTа. Ничего не надо прошивать - спаял, подключил, сконфигурировал ft-шку(если нужно) и работай. Кстати есть более свежая и универсальная версия этого программатора, но сейчас не вспомню уже где видел.

UPD
Кажется нашел более свежую версию http://www.reddylab.eu/usbbit/v1-1
Со светодиодами и клавиатурой - мысль интересная, надо будет опробовать ради прикола отлично

Добавлено: Thu Nov 14, 2013 12:37 am
Ответить с цитатой

Mastak13
 


Спасибо! Буду разбираться.

Добавлено: Thu Nov 14, 2013 8:54 am
Ответить с цитатой

Vitek_22
Простой советский бомж


удалось мне запустить таймер, спасибо тов. qic, и счёт по таймеру, но теперь всплыла другая проблема. Хочу, чтобы показания на дисплеи изменялись не с каждым новым импульсом на порт С0, а выводилось суммарно что набежало за 5 секунд, при этом предыдущее значение сбрасывалось (переменная s у меня инкремируется каждую секунду, dv=(s%5) - остаток от деления на 5). Вот что у меня получилось:

Код:
while (1)
      {
    dv=(s%5);
   
   
    switch(dv)
    {
        case 0:
        {
        lcd_gotoxy(0,0); 
        lcd_putchar(counter/10+0x30);
        lcd_putchar(counter%10+0x30);
        counter=0;   
         
        break;
        }
        default:
        {
        if (PINC.0 && (!flag))
            {
            counter++;
            flag=1;
            }     
     
        if ((!PINC.0) && flag)
            {
            flag=0;
            }
           
               
        break;
        }
       
    }
     
        }


Но, скотина, не работает нифига. В протеусе на дисплее постоянно Zero. Если вынести код
Код:
lcd_gotoxy(0,0); 
 lcd_putchar(counter/10+0x30);
 lcd_putchar(counter%10+0x30);


из условия что остаток секунд от деления на 5 равен нулю (тобишь каждый 5 с интервал) - всё работает. Но показания на дисплее меняются с каждым новым импульсом.


Добавлено: Thu Nov 14, 2013 3:35 pm
Ответить с цитатой

qic
 


Что что, нахрен?
Надо пять секунд? У тебя таймер Т1 отсчитывает какраз 1 секунду. А дальше всё просто.
Прям в его прерывании пишем такой кусок: (предварительно гденибудь unsigned int = 0 ; )
Код:
ISR(TIMER1_OVF_vect) // Timer/Counter1 Overflow
{
   TCNT1H = 11;
   TCNT1L = 220;

   i++;
   counter+ = temp; // кажется так суммируется к текущей переменной, но я не уверен - надежнее " counter = counter + temp; "
   if (i==5)  //А вот и сумма за 5 секунд набежала
   {
     i=0;  // Обнулили счетчик сбора за 5 секунд
     lcd_gotoxy(0,0); 
     lcd_putchar(counter/10+0x30);
     lcd_putchar(counter%10+0x30); //Вывели радость на экран
     counter = 0; // и обнулили, чтобы не наращивать
   }
    temp = 0; //И обнулили счетчик за 1 секунду
}


Так получается системный отсчет 1 секунда и событие раз в 5 или раз в сколько надо.

P.S. Старайтесь делать на прерываниях, очень удобно. Особенно выполнять постоянные задачи. При прерывании есть время на что-то еще кроме ожидания в бесконечном цикле следующего показа.


Добавлено: Thu Nov 14, 2013 4:45 pm
Ответить с цитатой

Vitek_22
Простой советский бомж


ISR (TIMER1_OVF_vect) - ругается "declaration syntax error" - с чего бы это? Где бы вообще почитать об этом прерывании доступно. Пока я тупо накопировал в код... Гуглил - но в основном приводят эти элементы кода без пояснения что и зачем и почему именно так пишется! Пишу я в CVAVR - там при создании нового проекта есть возможность настраивать таймер -надо ли вносить туда какие-либо изменения?

И ещё один момент, если делать таким образом, то время получается фиксированным. К примеру мне захочется по нажатию кнопки изменять время счета с 5 с на 20 с или на 60. При таком коде не понятно мне как это реализовать... Ну, будем разбираться потихоньку. Главное что дело сдвинулось дальше мигания светодиодом восторг

Добавлено: Thu Nov 14, 2013 5:17 pm
Ответить с цитатой

qic
 


Я же написал что avr-studio. Пиши в нем, не заморачивайся. Кодогенераторы отдельно есть.

Изменение времени очень легко.
Где сравнение (i==5) вместо 5 пишешь например j (предварительно задав ему 5, или сколько надо)
А вот это т.к. у тебя низкая цикличность то в главный бесконечный цикл добавляешь проверку нажатия кнопки и цикличную смену. Например в лоб if-ами.

Код:
if (PINC & (1<<PINC4)) // проверяем нажата ли кнопка. Если устраняем дребезг контактов софтово то нужна еще одна такая проверка через ~10мс. Я предпочитаю 10нФ на кнопку.
{   
   while (PINC & (1<<PINC4)); // Опциональный кусок - ждет пока кнопку отпустят, можно не писать если есть конденсатор
   if (j==5) { j = 20;}
   if (j==20) { j = 60;}
   if (j==60) { j = 5; }
}


Вот и цикличная смена.


Добавлено: Thu Nov 14, 2013 6:30 pm
Ответить с цитатой

Vitek_22
Простой советский бомж


благодарю! Качну сегодня этот studio

Добавлено: Thu Nov 14, 2013 6:40 pm
Ответить с цитатой

qic
 


Только качай 4.18, а также тебе потребуется Си-компилятор winavr например от 20100110 . Я объясню почему так лучше.
Нет ограничения на размер кода, есть отладчик. Студия 4.18 (кажется) последняя перед 5й и 6й, весит меньше, весь необходимый функционал, только Си компилятора нет ( в старших есть), поэтому WinAVR отдельно (поставишь в папку с студией, сама подхватит его). И будет всё каноничноЪ.
ЗЫ Если не найдешь, могу какнибудь скинуть, 150МБ не так много.

Добавлено: Thu Nov 14, 2013 6:45 pm
Ответить с цитатой

Пружина
Экзорцист


Offtopic:
А почему имнно 4.18, а не последнюю?


Добавлено: Thu Nov 14, 2013 6:48 pm
Ответить с цитатой

qic
 


Меня бесит что IDE для проганья 8битных AVRок занимает несколько гигов на диске.
Особенно бесит что ничего нового кроме лишних гигов с версии 4.18 я в ней для себя не открыл.

Я холивар разводить не намерен, кому интересно - попробуйте старое и новое, и делайте выводы для себя. Свои выводы я уже сделал.

Добавлено: Thu Nov 14, 2013 6:59 pm
Ответить с цитатой

Пружина
Экзорцист


Offtopic:
Да я просто спросил, причём тут холливар?


Добавлено: Thu Nov 14, 2013 7:10 pm
Ответить с цитатой

qic
 


Ну тогда всё окей. В принципе я ответил.

Просто когда вопрос "почему именно эта IDE" начинаются холливары.

Добавлено: Thu Nov 14, 2013 7:44 pm
Ответить с цитатой

BenG
 


qic писал(а):
Только качай 4.18, а также тебе потребуется Си-компилятор winavr например от 20100110 .
Посмотрел в разделе программ флая, вроде нет, поэтому выложил. Правда у меня версия 4.16, другой не пользовался, т.к. глюков, пока, не замечал.

Добавлено: Fri Nov 15, 2013 1:31 am
Ответить с цитатой

qic
 


Ну 4.16/4.18 действительно не суть важно, важно что 4я ветка а не 5я и не 6я.
Если места много - ставьте последнюю, но лично мое мнение - это не правильно для закручивания гаек на 10 покупать набор на 100 ключей (при условии что с другими гайками вы врятле вообще столкнётесь).

Добавлено: Fri Nov 15, 2013 7:13 am
Список разделов Flyback.org.ru » не HV » МК для начинающих.
На страницу 1, 2, 3, 4, 5, 6, 7, 8, 9  След.     Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.