Каким образом можно написать прошивку для МК на С, и конвертировать её в файл HEX?
1. Запустить среду разработки CodeVisionAVR.
2. Сгенерить в автоматическом режиме текстовый файл с программой на C.
3. Добавить в этот файл операторы, которые Вам нужны.
4. Нажать кнопочку "Make The Project" чтобы получить HEX файл.
5. Если у Вас есть программатор, который поддерживается этой средой разработки, то нажать кнопочку "Run the chip programmer" и залить Ваш HEX файл в контроллер.
Тоесть если у меня нету программатора, который поддерживается этой средой, то я всёравно смогу прошить свой МК?
Ну тогда можно начинать разбираться в C
P.S. И правда, всё генерится, прошивается, работает...
P.P.S А что, на С прога на много больше места занимает, чем на ассемблере? Просто я тут сделал прогу для моргания одним светодиодом, а она места почти столько-же заняла, как прога на ассемблере, в которой использовалось 8 светодиодов, причём с кучей алгоритмов и мегаиллюминацией.
Последний раз редактировалось SeregaT Пн фев 09, 2009 19:51:44, всего редактировалось 1 раз.
Конечно! HEX файл то у Вас будет! Шейте чем хотите! А лучше собрать STK200/300, как советует Pippeytz. Программатор Громова хорош для тех, кто сам программы не пишет, а эпизодически хочет залить готовую прошивку.
SeregaT писал(а):
...P.P.S А что, на С прога на много больше места занимает, чем на ассемблере?...
Не так уж и намного, но, конечно больше - это неизбежная плата за язык высокого уровня. Кстати, когда в неё добавите "мегаиллюминацию", то размер увеличится не на много. Ведь то, что туда натолкал компилятор для работы с "C", в программе уже есть...
Последний раз редактировалось Барсик Пн фев 09, 2009 20:07:45, всего редактировалось 1 раз.
#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 мс
};
}
Как-то так
по коду можно догадатсья куда диода цеплять нада
Мдааа. Каждая новая строчка на C нехило добавляет объём прошивки.
А гденить можно посмотреть примеры различных прог с описаниями? Что-то нигде не нашёл.
Подскажите пожалуйста такую тему:
Вот хочу написать прогу, эмулирующую работу одного станка с ЧПУ (как раз на нём контроллер наполовину накрылся, и сделано малость через Ж, так что потом может и пригодиться прога).
Требования: на выход минимум 10 каналов (тоесть одного порта недостаточно). Получается, что один порт надо полностью на выход, а другой частично (пока не понял, как на C открыть частично, на ассемблере с этим понятно, но для станка на C будет лучше). Так-же нужно 4 канала на вход.
Теперь самое главное. Не могли бы написать пример для фрагмента алгоритма?
Фрагмент вот:
Цитата:
PORTD.0=1 Ждёт сигнала с PORTB.1 PORTD.1=1 Задержка 1 сек PORTD.0=0 Задержка 1 сек На начало программы
И ещё, при нажатии на концевик (0 на reset), программа начнётся сначала, но для этого нужно убрать 0 с вывода reset. Может концевик включить через кондёр, типа он зарядится и на reset снова 1?
...Получается, что один порт надо полностью на выход, а другой частично (пока не понял, как на 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....
С этим вообще не понятно. Напишите подробнее, что Вы хотие от этого несчастного концевика.
Вы ждёте сигнал с выхода порта или ждёте, когда на ногу микроконтроллера придёт сигнал извне? Это две большие разницы.
Я малость ступил. Ждать надо сигнала извне (0 или 1, без разницы).
Цитата:
С этим вообще не понятно. Напишите подробнее, что Вы хотие от этого несчастного концевика.
Ну вот например в конце программы включается сигнал на предыдущий станоу и начинается подача доски. Доска дошла до концевика, нажимает его и программа должна запустится сначала (но концевик остаётся нажатым). А вообще, это пока не особо важно, вспомнил, чтонадо не на ресет а на другой выход (прога должна не совсем сначала начаться).
Барсик Что-то не получилось с фрагментом. Я наверное не правильно вопрос поставил.
Я имел ввиду, что алгоритм нужен был такой:
При запуске программы на 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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения