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

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

Сообщение Arlleex »

Ну вот нашел в заголовочном файле:

#define EXT_INT0 2
#define EXT_INT1 3
#define TIM2_COMP 4
#define TIM2_OVF 5
#define TIM1_CAPT 6
#define TIM1_COMPA 7
#define TIM1_COMPB 8
#define TIM1_OVF 9
#define TIM0_OVF 10
#define SPI_STC 11
#define USART_RXC 12
#define USART_DRE 13
#define USART_TXC 14
#define ADC_INT 15
#define EE_RDY 16
#define ANA_COMP 17
#define TWI 18
#define EXT_INT2 19
#define TIM0_COMP 20
#define SPM_READY 21


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

Сообщение SeregaT »

В даташите написано, что означает то или иное прерывание.
Вот тут достаточно доступно расписано, что и зачем:
http://radiokot.ru/start/mcu_fpga/avr/10/
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

То прерывание которое вам нужно.

Там КРУПНО написано, что прерывания удобно настраивать МАСТЕРОМ кода CVAVR !

Получается правильный код.

Stalker46 писал(а):у меня есть небольшие проблемы с пониманием языка Си


Трудно понять что-то читая местами.

Stalker46 писал(а):всегда ли adc_isr ?


Это обычное название функции - вы можете сами его придумать.

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

Сообщение SeregaT »

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

Сообщение Arlleex »

а можно так!

unterrupt [INT0] void int_0(void)
{програма обработчика прерывания}


можно так?
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

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

Сообщение SeregaT »


У меня вот валяется дисплей от сименса CX65. Вроде слышал, что их то-же можно к МК подключить, там 10 выводов. Но есть проблема. Эти выводы на плёночной плате, и если я начну к ним паять, плата просто расплавится. Надо какую-то контактную площадку городить.
Щас еще эксперементировал со своим LCD, сделал счётчик секунд (не секундомер пока). Вот код:
while (1)
{
int i;
for (i = 0; i<200; i++)
{
lcd_clear();
sprintf(lcd_buffer, "%d", i);
lcd_puts(lcd_buffer);
delay_ms (1000);
};
}

:)))
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):сделал счётчик секунд

delay_ms (1000);


Надо подгонять паузу, ведь другой код тоже занимает время.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Stalker46 писал(а):а можно так! можно так?


А вам самому ВЛОМ включить мастер CVAVR
и посмотреть как НУЖНО !?

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

Сообщение SeregaT »

ikarab писал(а):Надо подгонять паузу, ведь другой код тоже занимает время.

И кварц часовой использовать (кстати, вроде слышал, что его на другие выводы подключать надо? А МК тогда будет работать на частоте часового кварца?)
Но сейчас мне главное не точность, а чтобы работало :)
Вот усовершенствованный код :)
void main(void)
{
int i, x;
i=0;
x=0;
lcd_init(8);

// Global enable interrupts
//#asm("sei")

while (1)
{
for (i = 0; i<60; i++)
{
lcd_clear();
sprintf(lcd_buffer, "sek: %d\nmin: %d", i, x);
lcd_puts(lcd_buffer);
delay_ms (1000);
}
x=x+1;
}
}

Блин, а размер такой прошивочки составил 5,3Кб :shock:
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

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

Сообщение SeregaT »

ikarab писал(а):зачем вам int ?

Объявление переменных. А разве не надо?
Аватара пользователя
jn79
Опытный кот
Сообщения: 821
Зарегистрирован: Ср окт 10, 2007 10:54:35
Откуда: Омская обл
Контактная информация:

Сообщение jn79 »

перезалейте "Микроконтроллерное управление звуком" Сергея Рюмика ! и есть ли у кого диск по этим статьям ? :cry:
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):
ikarab писал(а):зачем вам int ?

Объявление переменных. А разве не надо?

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

Сообщение SeregaT »

Кое что читал, но не понял, что изменится, если я по другому переменную назначу.
Тут надо было char использовать?
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а): Тут надо было char использовать?

Да. Я думаю char тут уместней.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

НАУЧИЛСЯ ДЕЛАТЬ ПРЕРЫВАНИЯ!!!
НО!!!

вот когда прерывание происходит, дальнейшаю программа не дейсствует.
А мне надо, чтобы и программа работала, и обработчик прерывания работал!

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

Сообщение SeregaT »

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

Сообщение SeregaT »

Посмотрите вот этот код (пытался сделать часы):


#include <mega16>
#include <delay>
#include <stdio>
char lcd_buffer[33];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd>

// Declare your global variables here

void main(void)
{
char a, b, c, d, e;
a=0; // Секунды
b=0; // Десятки секунд
c=0; // Минуты
d=0; // Десятки минут
e=0; // Часы
// LCD module initialization
lcd_init(16);

while (1)
{
for (e = 0; e<24; e++) // Часовой цикл
{
for (d = 0; d<6; d++) // Днсятки минут
{
for (c = 0; c<10; c++) // Минуты
{
for (b = 0; b<6; b++) // Десятки секунд
{
for (a = 0; a<10; a++) // Секунды
{
lcd_clear(); // Очищаем дисплей
sprintf(lcd_buffer, "%d:%d%d:%d%d", e, d, c, b, a); //Заносим значение переменных в буффер LCD
lcd_puts(lcd_buffer); // Выводим содержимое LCD буффера на дисплей
delay_ms (1000);
}
}
}
}
}
};
}


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

Сообщение Pippeytz »

Такие проги обычно пишут те, кому в падлу посмотреть как другие пишут
Вложения
времени на основе асинхронного таймера.pdf
(117.4 КБ) 364 скачивания
Полный пипеутз.
Ответить

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