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

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Аватара пользователя
sema
Мудрый кот
Сообщения: 1708
Зарегистрирован: Ср апр 23, 2008 17:44:56
Откуда: Россия, г. Нижний Новгород
Контактная информация:

Сообщение sema »

http://easyelectronics.ru/mb-lebedev-co ... shhij.html книжка М.Б Лебедев “CodeVision AVR пособие для начинающих” очень рекомендую. размер правда 60 метров но оно того стоит. еще почитайте обучалку http://radiokot.ru/start/mcu_fpga/avr/
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

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

Сообщение SeregaT »

Stalker46 писал(а):Не понимаю, что делать с сгенерированным кодом

Как что? Дописывать свой (из сгенерированного можно лишнее удалить).
Можно ли в процессе написания кода изменить назначения портов?(ввод - вывод).

Я там настройку портов вообще не трогаю. Порты назначаю прямо в процессе написания кода.
Куда файл компилируется?

Папка проекта/EXE/Прошивка.hex
Когда я все сделал в настройках контролера, надо сгенерировать код. я его сгенерировал, там надо что то сохранить три раза, и появляется в окне сгенерированный код. что с ним делать?

Находим вот это:
while (1)
{
// Place your code here

};

И пишем свой код (я обычно убираю всё, что написано до этого, и пишу своё).
Народ, научите писать заголовочные файлы на код. На CodeVisionAVR.

А разве они не входят в комплект CodeVisionAVR или на сайте производителя? Или я что-то не так понял?
Какой язык лучше для программирования - СИ или ассемблер? Прошу ответить на этот вопрос профессионалов...

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

Сообщение SeregaT »

Такой вот вопрос. Я сделал несколько входов, входы соединил с общим проводом через резисторы 10 Ком (чтобы не реагировали на помехи). Но всёравно, срабатывает даже если я не замыкаю вход на +5 В, а просто тыкаю в него какойнить железякой? Ведь резисторы между общим проводом и входом должны избавить от этого, а что-то нифига.
Когда я настраивал на то, чтобы входы ждали лог 0, и ставил резисторы между входом и +5 В, то такого вроде небыло...
therian
Говорящий с текстолитом
Сообщения: 1682
Зарегистрирован: Чт окт 20, 2005 12:46:34
Контактная информация:

Сообщение therian »

SeregaT писал(а):Когда я настраивал на то, чтобы входы ждали лог 0, и ставил резисторы между входом и +5 В, то такого вроде небыло...

у Пиков вроде есть зашитные диоды соединенные с +питанием, вот и выходит двойная зашита резистор от слабого тока спасает а диод от высокого напряжения/статики, думаю у Авр тоже самое есть
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

Диоды есть - это тестер подтвердит ;)
Но это не касается вопроса...
А по поводу помех - осцилл должен подсказать их уровень. Дело в том, что 0 считается все, что ниже 0.2Vcc (1В), а 1 - все, что выше 0.6Vcc (3В) по шиту - это гарантированные уровни, ито что лежит между ними - может считаться как 0 так и 1...
Исходя из этого - при подтяжке к +5 порог получается в 2 раза выше, чем при подтяжке к 0...
Последний раз редактировалось NiTr0 Вс мар 22, 2009 17:55:43, всего редактировалось 1 раз.
therian
Говорящий с текстолитом
Сообщения: 1682
Зарегистрирован: Чт окт 20, 2005 12:46:34
Контактная информация:

Сообщение therian »

ни кто не знает как в MPLAB 8.2 настроить чтоб хекс файл генерировался при компилировании и сохранялся в туже папку где и Си код? В более старых версиях вроде так и было а теперь Export делать приходится, бесит когда много исправлений делаю
Последний раз редактировалось therian Вс мар 22, 2009 17:54:02, всего редактировалось 1 раз.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

while (1)
{
// Place your code here

};
}
{
#include <mega16>
#include <delay>

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; // выключаем шестой светодиод

};




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

Сообщение SeregaT »

А может эти защитные диоды еще включить надо? Или всётаки нужно настроить порт на вход заранее? Я не настраивал, а просто где выход, писал PORTD.1, а где выход - PINB.1.
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

Диоды - настраивать явно не надо.
P.S. Прошлый каммент дополнил.
Аватара пользователя
sema
Мудрый кот
Сообщения: 1708
Зарегистрирован: Ср апр 23, 2008 17:44:56
Откуда: Россия, г. Нижний Новгород
Контактная информация:

Сообщение sema »

to Stalker46 так прошейте в железку и увидите :wink: , неохота прошивать протеус вам в лапы :idea:
Последний раз редактировалось sema Вс мар 22, 2009 18:01:03, всего редактировалось 1 раз.
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

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

Сообщение SeregaT »

Stalker46 писал(а):я сам написал программу, шестью светодиодами управляет шесть портов D.
Правильно ли?

Почти правильно.
Вот так она работает:

#include <mega8>
#include <delay>
void main(void)
{
PORTD=0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD=0xFF; //Делаем порт D, как выход, чтобы на выходах порта было напряжение 5В
while (1)
// Place your code here
{

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; // выключаем шестой светодиод

};
}
Аватара пользователя
sema
Мудрый кот
Сообщения: 1708
Зарегистрирован: Ср апр 23, 2008 17:44:56
Откуда: Россия, г. Нижний Новгород
Контактная информация:

Сообщение sema »

Stalker46 писал(а):Не получилось :(
что делать, что я не так сделал?
Помогите плиз, вверху код...

порт на вывод настроен? в DDRD единички записаны? как проверяли?
:)) опередили
Последний раз редактировалось sema Вс мар 22, 2009 18:07:22, всего редактировалось 1 раз.
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
therian
Говорящий с текстолитом
Сообщения: 1682
Зарегистрирован: Чт окт 20, 2005 12:46:34
Контактная информация:

Сообщение therian »

Stalker46 писал(а):Не получилось :(
что делать, что я не так сделал?


ну там же написано "// Place your code here" наверно не просто так.

а у вас код вовсе не где просят не в while и даже не в maine вроде...
еще одно в Си после } ; (точку с запятой) ставить не нужно, (исключение будут структуры, ну и классы уже в с++) хотя она ничего и не делает и игнорируется
Последний раз редактировалось therian Вс мар 22, 2009 18:16:05, всего редактировалось 2 раза.
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18849
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

NiTr0 писал(а):Диоды - настраивать явно не надо.
P.S. Прошлый каммент дополнил.

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

Сообщение SeregaT »

sema писал(а):порт на вывод настроен? в DDRD единички записаны? как проверяли?

Кстати, вот этот момент можно подробнее разъяснить? Как я понял, это нужно только для того, чтобы светодиоды подключить? Тоесть если этого не делать, то там будут просто слабые сигналы (типа для передачи данных)? Просто светодиоды без этого еле светят, а вот релюшки (через транзисторы) отлично включаются...
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

SeregaT писал(а):Вот будет ли это всё работать, если к входам подсоединить провода по несколько метров?


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

Сообщение SeregaT »

NiTr0 писал(а):А почему бы и не работать?

Да просто я подумал, что может сработать еще до замыканий контактов (ну типа на ёмкость провода отреагирует или помеху какую примет...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Порты на OUT поставил, значит вывод.
А что такое DDRD? литру почитать - итак начал читать, так что просто ответьте пожалуйста...
Не умеешь - не берись, но не взявшись не научишься...
Ответить

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