Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Проблема с программированием МК

Страниц (17): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
 

61. dimamukhin - 27 Августа, 2009 - 22:16:06 - перейти к сообщению
to Shum - Большое спасибо ! Работает как надо !!!!!!!!!!! высший восторг
62. dimamukhin - 11 Сентября, 2009 - 23:27:48 - перейти к сообщению
Нужна помощь:

CodeVision:

#include <mega8.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

int num=0;

// Declare your global variables here

void main(void)
{


// LCD module initialization
lcd_init(16);


while (1)
{
num++;

if(num>200)num=0;
delay_ms(100);


};
}

Как результат num выводить на дисплей ???

Очень нужна помощь !!!!!
63. 1_ulyanovsk - 26 Сентября, 2009 - 23:45:42 - перейти к сообщению
Еще раз доброго времени суток. Уже 3 день пытаюсь вывести на СОМ1 хоть какой нибудь симво все тщетно, перерыл инет и несколько книг. Программирую котроллер АТmega8 через WinAVR по всевозможным книгам и никак ! Пишет что
. . . вот кусок
char c;
UCR=0x58;
UBRR=0х33;

подключаю #include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

пишет что "'UCR' undeclared (first use in this function)" видит впервые? с UBRR та же беда. Воспринимает регистр как переменную. Почему ? Хотелось бы разобраться для WinAVR. Заранее спасибо.
64. -dead- - 27 Сентября, 2009 - 11:08:45 - перейти к сообщению
А вы указали в проекте, что используете МК АТМега8?
65. 1_ulyanovsk - 27 Сентября, 2009 - 13:07:42 - перейти к сообщению
Да. Я указал это в настройках Makefile

# MCU name
MCU = atmega8

Думал в директиве делал. Но в примерах никаких особенных директив не указывают.
66. 1_ulyanovsk - 27 Сентября, 2009 - 15:10:23 - перейти к сообщению
Парни ! Нашел скрипт UART для АТмега8 WinAVR при компиляции которой НЕ ВЫСКАКИВАЕТ ОШИБКА ! ! ! (Ура !) , правда описания к ней нет. Помогите разобраться ? ? ? ? Какие порты здесь используюстя в качестве ввода/вывода ? И на что следует обратить в этой проге особое внимание при изучении UART. Я пронумеровал некотрые строки. Сложности для понимания : строки 6-11 . . можете объяснить?

1 #include <avr/io.h>
2 #include <stdio.h>
3 #include <avr/delay.h>

4 void usart_ini(void);
5 int putcharm (int c);

// Процедура инициализации USART
6 void usart_ini()
7 {
//установка двойной скорости
//UCSRA=(1<<1);
//прерывание по приёму данных
8 UCSRB |= (1<<4) | (1<<3);
//Запись в UCRSC
//Размер кадра данных 8 бит
9 UCSRC |= (1<<7) | (1<<1) | (1<<2);
//Запись в UBRRH
10 UBRRH = 0;
// Скорость обмена (19200)
11 UBRRL = 26;

}

// Функция передачи символа в порт
// Хотя можно просто отослать байт UDR = 0x33
12 int putcharm (int c)
{
13 while((UCSRA&(1<<UDRE))==0);
14 UDR = c;
15 return c;
}


16 int main( void )
{
//Небольшая задержка
//Она будет практически незаметна,
//Но при включении в порт не будет выдаваться
//Разная ерунда
17 _delay_loop_2(1000);
// Инициализация USART
18 usart_ini();

// объявление пеерменных
19 unsigned char temp = 0;
int i;

//Небольшая задержка
20 _delay_loop_2(100);

//Раздел сообщений
21 unsigned char* strmes_0 = " ++++++++++++++++++++++++++++++++++++++++++++";
22 unsigned char* strmes_1 = " + Example of work with the USART interface +";
23 unsigned char* strmes_2 = " + Programmed By Resendlers +";
24 unsigned char* strmes_3 = " + Site: resendlers.clan.su +";

//Вывод текста приветствия в терминал
25 for(i=0;i<41;i++)
putcharm(strmes_0[i]);
putcharm(0x0D);
for(i=0;i<41;i++)
putcharm(strmes_1[i]);
putcharm(0x0D);
for(i=0;i<41;i++)
putcharm(strmes_2[i]);
putcharm(0x0D);
for(i=0;i<41;i++)
putcharm(strmes_3[i]);
putcharm(0x0D);
for(i=0;i<41;i++)
putcharm(strmes_0[i]);
putcharm(0x0D);

//Основной цикл программы
26 while(1)
{
//Если в буфере нет очереди, то отправляем
27 if (UCSRA&(1<<7))
{
//Принимаем байт с порта
28 temp=UDR;
//Отпрвляем байт в порт
29 UDR=temp;
}


}

}
67. nest - 27 Сентября, 2009 - 15:46:47 - перейти к сообщению
1_ulyanovsk, тут вам поможет прочтение даташита на Мегу8. в частности раздел с описанием регистров UCSRA, UCSRB, UCRSC, UBRRH / UBRRL.
если вам не подходит описание на английском - можно почитать на русском: http://www.gaw.ru/html.cgi/txt/d.../arh128/17_8.htm
(там описана Мега128, но всё очень похоже)

В даташит всё же заглядывайте, там кроме хороших обьяснений есть ещё и много примеров использования переферии как на СИ так и на asm.
даташит на англйском можно брать на сайте atmel,
на русском можно почитать тут : http://www.gaw.ru/html.cgi/txt/d...arh128/index.htm (учитывайте различия между своим МК и описанным там Мега128)
68. 1_ulyanovsk - 27 Сентября, 2009 - 17:33:03 - перейти к сообщению
Спасение утопающего - дело рук самого утопающего. Кое где разобрался, но почему при одних и тех же директивах (проверял) в одном случае UCR воспринимается как переменная, а в другом нет проблем ?
69. nest - 27 Сентября, 2009 - 19:48:49 - перейти к сообщению
обычно приводят пример, где работает как. и где как не работает...

а если хочется раз и навсегда избавиться от путаницы - лучше писать на asm :)
70. 1_ulyanovsk - 27 Сентября, 2009 - 19:50:44 - перейти к сообщению
Меня уже пугает этот смайлик Улыбка после asm ))) Я лучше на Си. Спасибо ))
71. nest - 27 Сентября, 2009 - 20:54:45 - перейти к сообщению
ну... судя по вопросам , пока что на СИ вы далеко не уехали :)

асм не так страшен, как многие думают.
если с микросхемами логики 155/74 не возникало непонятнок. то асм даётся с первого захода.
72. 1_ulyanovsk - 10 Октября, 2009 - 18:50:14 - перейти к сообщению
Ооо... чет мои вопросы одни висят. Ну вот еще один ) Мне нужно постоянно опрашивать входы D0-D3 на них подается код с дешифратора. Какой вид прерывания лучше выбрать на Си. ???
73. nest - 10 Октября, 2009 - 20:51:14 - перейти к сообщению
если постоянно опрашивать - то тупо в цикле.
если ставить на прерывание - то настроить прерывание на нужное изменение уровня.
прерывание можно взять INTx (INT0 , INT1, INT3, ...) или PCINT (Pin Change Interrupt) если есть, если подойдёт - можно настроить ANALOG COMP (Analog Comparator).

вообще прерывания обычно не ставят на такое количество входов. прерывания - на вес золота :)
в завтисимости от схемных решений можно обойтись одним прерыванием. или найти другое решение.
схему не покажите ?
74. 1_ulyanovsk - 10 Октября, 2009 - 21:21:39 - перейти к сообщению
Схема простая. Аналговый коммутатор опрашивает 10 каналов и подает последдовательно сигнал на компаратор. Сигнал с датчиков у меня уже в цикле обрабатывается поэтому я не хотел бы еще цикл ставить.
Высталяю переключателем на 4 к примеру канал и на индикаторе отслеживаю его состояние (думал именно это реализовать в прерывании) А2Т на рисунке
75. VCOM - 10 Октября, 2009 - 21:28:46 - перейти к сообщению
Дак вы в этом цикле и опрашивайте входы. Имхо самое простое нежели прерывания городить, не?