С чего начать программировать микроконтроллеры?

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

SeregaT писал(а):Каким образом можно написать прошивку для МК на С, и конвертировать её в файл HEX?

1. Запустить среду разработки CodeVisionAVR.
2. Сгенерить в автоматическом режиме текстовый файл с программой на C.
3. Добавить в этот файл операторы, которые Вам нужны.
4. Нажать кнопочку "Make The Project" чтобы получить HEX файл.
5. Если у Вас есть программатор, который поддерживается этой средой разработки, то нажать кнопочку "Run the chip programmer" и залить Ваш HEX файл в контроллер.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Тоесть если у меня нету программатора, который поддерживается этой средой, то я всёравно смогу прошить свой МК?
Ну тогда можно начинать разбираться в C

P.S. И правда, всё генерится, прошивается, работает...

P.P.S А что, на С прога на много больше места занимает, чем на ассемблере? Просто я тут сделал прогу для моргания одним светодиодом, а она места почти столько-же заняла, как прога на ассемблере, в которой использовалось 8 светодиодов, причём с кучей алгоритмов и мегаиллюминацией.
Последний раз редактировалось SeregaT Пн фев 09, 2009 19:51:44, всего редактировалось 1 раз.
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Конечно! HEX файл то у Вас будет! Шейте чем хотите! А лучше собрать STK200/300, как советует Pippeytz. Программатор Громова хорош для тех, кто сам программы не пишет, а эпизодически хочет залить готовую прошивку.

SeregaT писал(а):...P.P.S А что, на С прога на много больше места занимает, чем на ассемблере?...

Не так уж и намного, но, конечно больше - это неизбежная плата за язык высокого уровня. Кстати, когда в неё добавите "мегаиллюминацию", то размер увеличится не на много. Ведь то, что туда натолкал компилятор для работы с "C", в программе уже есть...
Последний раз редактировалось Барсик Пн фев 09, 2009 20:07:45, всего редактировалось 1 раз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Барсик писал(а):Программатор Громова хорош для тех, кто сам программы не пишет, а эпизодически хочет залить готовую прошивку.

Да фиг с ним, главное работает. Для нормального программатора надо плату делать, а с этим у меня пока очень туго. Под микросхемы никогда не делал...
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

А хрена там делать? :shock:
Принтерь есь?
ЛУТ спасет мир.
Полный пипеутз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Ну до плат я потом доберусь. Там наверное проги есть для рисования плат? Да и как разметить под микросхему то-же хз.
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

Епт, как вставлять рисунки чтобы были малеьнкие иконки видны в посте , а не просто сцылко?
Полный пипеутз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Pippeytz писал(а):Епт, как вставлять рисунки чтобы были малеьнкие иконки видны в посте , а не просто сцылко?

[img]ссылка[/img]
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

А не могли бы выложить тут для примера текст проги на C (типа какойнибудь моргалки, не сложный)?
Аватара пользователя
Pippeytz
Потрогал лапой паяльник
Сообщения: 396
Зарегистрирован: Ср май 28, 2008 19:30:31
Откуда: Донецк
Контактная информация:

Сообщение Pippeytz »

#include <mega8> //Включаем библиотеку для работы с микроконтроллером ATMega8
#include <delay> //Включаем библиотеку для организации задержек
void main(void)
{

int i; // описание переменной "і" как целое число Int - (Integer)

PORTD=0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD=0xFF; //Делаем порт D, как выход, чтобы на выходах порта было напряжение 5В

while (1) //Организовываем бесконечный цикл

{

for (i = 0; i<4 ; i++) // Цикл мигание первого светодиода, 4 раза
{
PORTD.0=1; //Включаем светодиод на 0 выходе порта D.0

delay_ms(50); //Делаем задержку на 50 миллисекунд

PORTD.0=0; //Выключаем светодиод на 0 выходе порта D.0

delay_ms(50); //Делаем задержку на 50 миллисекунд
}


delay_ms(200); // Задержка между мерцаниями, 200 мс

for (i = 0; i<4 ; i++) // Мигание второго светодиода, 4 раза
{
PORTD.1=1; //Включаем светодиод на 0 выходе порта D.1

delay_ms(50); //Делаем задержку на 50 миллисекунд

PORTD.1=0; //Выключаем светодиод на 0 выходе порта D.1

delay_ms(50); //Делаем задержку на 50 миллисекунд
}

delay_ms(200); // Задержка между мерцаниями, 200 мс
};

}

Как-то так
по коду можно догадатсья куда диода цеплять нада
Полный пипеутз.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Мдааа. Каждая новая строчка на C нехило добавляет объём прошивки.
А гденить можно посмотреть примеры различных прог с описаниями? Что-то нигде не нашёл.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Подскажите пожалуйста такую тему:
Вот хочу написать прогу, эмулирующую работу одного станка с ЧПУ (как раз на нём контроллер наполовину накрылся, и сделано малость через Ж, так что потом может и пригодиться прога).
Требования: на выход минимум 10 каналов (тоесть одного порта недостаточно). Получается, что один порт надо полностью на выход, а другой частично (пока не понял, как на C открыть частично, на ассемблере с этим понятно, но для станка на C будет лучше). Так-же нужно 4 канала на вход.
Теперь самое главное. Не могли бы написать пример для фрагмента алгоритма?
Фрагмент вот:
PORTD.0=1
Ждёт сигнала с PORTB.1
PORTD.1=1
Задержка 1 сек
PORTD.0=0
Задержка 1 сек
На начало программы

И ещё, при нажатии на концевик (0 на reset), программа начнётся сначала, но для этого нужно убрать 0 с вывода reset. Может концевик включить через кондёр, типа он зарядится и на reset снова 1?
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Эх, похоже я так и не узнаю ответа на предыдущий вопрос (про фрагмент кода)...
Cat_CooLeR
Опытный кот
Сообщения: 732
Зарегистрирован: Пт авг 22, 2008 16:59:43
Контактная информация:

Сообщение Cat_CooLeR »

Код: Выделить всё

while (1)
      {
     PORTD.0=1;
     while (PORTB.1==0)
     PORTD.1=1;
     delay_ms(1000);
     PORTD.0=0;
     delay_ms(1000);
      };

Так, скорее всего..
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Спасибо, попробую. А как в начале программы написать, чтобы активировать часть каналов порта B на вход?
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

SeregaT писал(а):...Получается, что один порт надо полностью на выход, а другой частично (пока не понял, как на C открыть частично...)...

Запустите автоматический генератор программного кода и на закладке "Ports" укажите какие линии порта должны работать на ввод и какие на вывод. Он Вам сгенерит строчки на "C", которые инициализируют порты.

SeregaT писал(а):...Ждёт сигнала с PORTB.1...

Вы ждёте сигнал с выхода порта или ждёте, когда на ногу микроконтроллера придёт сигнал извне? Это две большие разницы. Чтобы смотреть, что на ноге, надо использовать PINB.1

Код: Выделить всё

while (1)
    {
    PORTD.0=1;
    // ждём лог. 1 на ноге
    while (!PINB.1);
    // Дождались...
    PORTD.1=1;
    // Задержка 1 сек
    delay_ms(1000);
    PORTD.0=0;
    // Задержка 1 сек
    delay_ms(1000);
    // На начало программы
    };

Обратите внимание на точку с запятой в конце строчки while (!PINB.1);
Если ; пропустить, то компилятор не сообщит об ошибке, но программа будет работать неправильно.

SeregaT писал(а):...при нажатии на концевик (0 на reset), программа начнётся сначала, но для этого нужно убрать 0 с вывода reset....

С этим вообще не понятно. Напишите подробнее, что Вы хотие от этого несчастного концевика.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Cat_CooLeR писал(а):Так, скорее всего..

PORTD.0 и PORTD.1 включились одновременно и на сигнал на PORTB.1 никак не реагирует :(
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Барсик писал(а):Вы ждёте сигнал с выхода порта или ждёте, когда на ногу микроконтроллера придёт сигнал извне? Это две большие разницы.

Я малость ступил. Ждать надо сигнала извне (0 или 1, без разницы).
С этим вообще не понятно. Напишите подробнее, что Вы хотие от этого несчастного концевика.

Ну вот например в конце программы включается сигнал на предыдущий станоу и начинается подача доски. Доска дошла до концевика, нажимает его и программа должна запустится сначала (но концевик остаётся нажатым). А вообще, это пока не особо важно, вспомнил, чтонадо не на ресет а на другой выход (прога должна не совсем сначала начаться).
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Барсик
Что-то не получилось с фрагментом. Я наверное не правильно вопрос поставил.
Я имел ввиду, что алгоритм нужен был такой:
При запуске программы на PORTD.0 появляется 1 (5в)
Затем программа ждёт сигнала на PORTB.1
После сигнала уже на PORTD.1 должна появится 1 (5в)
Через секунду должен выключиться PORTD.0
Еще через секунду должен выключиться PORTD.1 и программа должна начаться сначала.

А получилось вот так:
При включении на PORTD.1 появляется 1.
На PORTD.0 с секундными паузами появляется и исчезает 1
Когда на PORTB.1 подать ноль, то на PORTD.0 появляется 1 до тех пор, пока с PORTB.1 не убрать 0
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Cat_CooLeR и Барсик
Спасибо большое!
Из ваших двух ответов собрал один и всё заработало :)

while (1)
{
PORTD.0=1;

while (!PINB.1==0);

PORTD.1=1;

delay_ms(1000);

PORTD.0=0;

delay_ms(1000);

PORTD.1=0;

delay_ms (1000);

}
};


Напишу прогу, выложу текст для оценки :) Только надо светодиодами для проверки запастись :)))
Ответить

Вернуться в «Теория»