С чего начать программировать микроконтроллеры?
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Stalker46 писал(а):SeregaT, ваша программа выдает 12 ошибок как и моя...
Моя программа прошита в МК и мигает светодиодами
Просто сотри весь код полностью и скопируй туда мой.
Кстати
#include mega8(точка h)
#include delay (точка h)
Почему-то в ответах на форуме вот эта (точка h) не отображается.
Это надо учесть.
Последний раз редактировалось SeregaT Вс мар 22, 2009 18:46:31, всего редактировалось 2 раза.
Вот мой код. Пробую компилировать, выдает вот эту ошибку. Что это такое и что мне делать?
#include <mega16>
#include <delay>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
PORTD=0x3F;
DDRD=0x3F;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTD.0=1; // зажигаем первый светодиод
delay_ms(1000); // ждем секунду
PORTD.0=0; // выключаем первый светодиод
delay_ms(100); // ждем
PORTD.1=1; // зажигаем второй светодиод
delay_ms(1000); // ждем секунду
PORTD.1=0; // выключаем второй светодиод
delay_ms(100); // ждем
PORTD.2=1; // зажигаем третий светодиод
delay_ms(1000); // ждем секунду
PORTD.2=0; // выключаем третий светодиод
delay_ms(100); // ждем
PORTD.3=1; // зажигаем четвертый светодиод
delay_ms(1000); // ждем секунду
PORTD.3=0; // выключаем четвертый светодиод
delay_ms(100); // ждем
PORTD.4=1; // зажигаем пятый светодиод
delay_ms(1000); // ждем секунду
PORTD.4=0; // выключаем пятый светодиод
delay_ms(100); // ждем
PORTD.5=1; // зажигаем шестой светодиод
delay_ms(1000); // ждем секунду
PORTD.5=0; // выключаем шестой светодиод
};
}
#include <mega16>
#include <delay>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
PORTD=0x3F;
DDRD=0x3F;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
PORTD.0=1; // зажигаем первый светодиод
delay_ms(1000); // ждем секунду
PORTD.0=0; // выключаем первый светодиод
delay_ms(100); // ждем
PORTD.1=1; // зажигаем второй светодиод
delay_ms(1000); // ждем секунду
PORTD.1=0; // выключаем второй светодиод
delay_ms(100); // ждем
PORTD.2=1; // зажигаем третий светодиод
delay_ms(1000); // ждем секунду
PORTD.2=0; // выключаем третий светодиод
delay_ms(100); // ждем
PORTD.3=1; // зажигаем четвертый светодиод
delay_ms(1000); // ждем секунду
PORTD.3=0; // выключаем четвертый светодиод
delay_ms(100); // ждем
PORTD.4=1; // зажигаем пятый светодиод
delay_ms(1000); // ждем секунду
PORTD.4=0; // выключаем пятый светодиод
delay_ms(100); // ждем
PORTD.5=1; // зажигаем шестой светодиод
delay_ms(1000); // ждем секунду
PORTD.5=0; // выключаем шестой светодиод
};
}
Не умеешь - не берись, но не взявшись не научишься...
SeregaT писал(а):...Но всёравно, срабатывает даже если я не замыкаю вход на +5 В, а просто тыкаю в него какойнить железякой...
Вполне нормальное явление. Когда Вы тыкаете на вход железкой, то подключаете емкость своего тела, которая заряжена от наводок непонятно как. Возникает короткая импульсная помеха, которую ловит микроконтроллер.
Чтобы этого не было, надо использовать RC цепочки. Тем более, что если будете использовать длинные провода, то на них вообще, чёрти что может наводиться. Сделайте, как в присоединённом файле. И для каждого датчика свой отдельный "земляной" провод. А ещё лучше витую пару.
- Вложения
-
- RC.gif
- (3.2 КБ) 432 скачивания
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Кстати, заметил, что если запитываю МК от USB разъёма компа, то срабатывает от помех значительно реже (надо ещё потыкать отвёрткой несколько раз, чтобы сработало). А если запитываю от зарядника с выходом USB, то срабатывает с первого раза практически всегда. Это наверное потому, что комп заземлён? (а зарядник может какие-то наводки даёт).
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Stalker46 писал(а):Как думаете, после языка Си легко освоить Ассемблер?
Не думаю. Хотя в принципи там не сложно, просто гемору много.
Какие в сгенерированном коде надо оставлять записи, кроме
PORTD=0x3F;
DDRD=0x3F;
ACSR=0x80;
SFIOR=0x00
Ну это зависит от того, что нужно от программы.
Для светодиодов и
ACSR=0x80;
SFIOR=0x00
не нужно.
А я обычно вообще всё убираю.
- SeregaT
- Генеральный секретарь МЯУ
- Сообщения: 18852
- Зарегистрирован: Пн сен 03, 2007 18:24:27
- Откуда: Россия. Омск.
- Контактная информация:
Вот тут по ассемблеру неплохо написано.
http://radiokot.ru/start/mcu_fpga/avr/
Доступно и для начала хватит поуши.
Но лично мне на Си показалось гораздо удобнее.
http://radiokot.ru/start/mcu_fpga/avr/
Доступно и для начала хватит поуши.
Но лично мне на Си показалось гораздо удобнее.
Stalker46 писал(а): А где такое можно найти о Ассемблере ?
Адрес вытекает из вашего вопроса
ASMhelpAVR.narod.ru
"Ассемблер для AVR" - там же и библиотеку найдете с массой книги по АСМУ для AVR.
Вот архив скачайте - Архив примеров программ на ассемблере ASM для AVR из AVRstudio и VMLAB Очень хорошо написаны !
Stalker46 писал(а): Кто может пояснить, что за в порту А там есть биты Р...
Русский даташит на Atmega - он там же где АСМ помощь.