Страница 37 из 115

Добавлено: Пн мар 30, 2009 16:20:07
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:

Добавлено: Пн мар 30, 2009 16:22:21
SeregaT
В даташите написано, что означает то или иное прерывание.
Вот тут достаточно доступно расписано, что и зачем:
http://radiokot.ru/start/mcu_fpga/avr/10/

Добавлено: Пн мар 30, 2009 16:23:23
ikarab
То прерывание которое вам нужно.

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

Получается правильный код.
Stalker46 писал(а):у меня есть небольшие проблемы с пониманием языка Си
Трудно понять что-то читая местами.
Stalker46 писал(а):всегда ли adc_isr ?
Это обычное название функции - вы можете сами его придумать.

Изображение

Добавлено: Пн мар 30, 2009 16:34:39
SeregaT
Не подскажите какойнить несложный проектик с применением LCD? Может вольтметр какой, секундомер или частотомер... (можно и термометр, тока датчиков пока нету). На Си конечно. Сам что-то не нашёл ничего подходящего.

Добавлено: Пн мар 30, 2009 16:41:40
Arlleex
а можно так!

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


можно так?

Добавлено: Пн мар 30, 2009 16:44:37
Arlleex

Добавлено: Пн мар 30, 2009 16:54:50
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);
};
}

:)))

Добавлено: Пн мар 30, 2009 17:08:06
ikarab
SeregaT писал(а):сделал счётчик секунд

delay_ms (1000);
Надо подгонять паузу, ведь другой код тоже занимает время.

Добавлено: Пн мар 30, 2009 17:11:01
ikarab
Stalker46 писал(а):а можно так! можно так?
А вам самому ВЛОМ включить мастер CVAVR
и посмотреть как НУЖНО !?

Изображение

Добавлено: Пн мар 30, 2009 17:43:53
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:

Добавлено: Пн мар 30, 2009 17:57:17
ikarab
зачем вам int ?

Добавлено: Пн мар 30, 2009 17:59:22
SeregaT
ikarab писал(а):зачем вам int ?
Объявление переменных. А разве не надо?

Добавлено: Пн мар 30, 2009 18:04:34
jn79
перезалейте "Микроконтроллерное управление звуком" Сергея Рюмика ! и есть ли у кого диск по этим статьям ? :cry:

Добавлено: Пн мар 30, 2009 18:34:42
ikarab
SeregaT писал(а):
ikarab писал(а):зачем вам int ?
Объявление переменных. А разве не надо?
А вы читали о том какие бываю переменные ?
"Язык Си для микроконтроллеров AVR" и help CVAVR

Добавлено: Пн мар 30, 2009 18:44:54
SeregaT
Кое что читал, но не понял, что изменится, если я по другому переменную назначу.
Тут надо было char использовать?

Добавлено: Пн мар 30, 2009 18:51:28
ikarab
SeregaT писал(а): Тут надо было char использовать?
Да. Я думаю char тут уместней.

Добавлено: Пн мар 30, 2009 19:24:24
Arlleex
НАУЧИЛСЯ ДЕЛАТЬ ПРЕРЫВАНИЯ!!!
НО!!!

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

Как еот реализовать?

Добавлено: Вт мар 31, 2009 05:29:47
SeregaT
Хочу приобрести графический ЖКИ, продположительно какойнибудь Winstar. Подскажите, какие у них могут быть "подводные камни"? Ну может двухполярное питание, нестандартные команды, или еще чего? Может стоит обратить внимание на определённые модели?

Добавлено: Вт мар 31, 2009 17:48:47
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);
}
}
}
}
}
};
}


Правильно ли я делаю? (Вроде то, что нужно, всё работает)...
И самое главное. Не могу сообразить, как сделать кнопки для установки времени?

Добавлено: Вт мар 31, 2009 18:03:27
Pippeytz
Такие проги обычно пишут те, кому в падлу посмотреть как другие пишут