роботы робототехника микроконтроллеры


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

> Без описания
dimamukhin Post Id



Лейтенант


Сообщений всего: 32
Дата рег-ции: Март 2009  



to Shum - Большое спасибо ! Работает как надо !!!!!!!!!!! высший восторг
 
 Top
dimamukhin Post Id



Лейтенант


Сообщений всего: 32
Дата рег-ции: Март 2009  



Нужна помощь:

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 выводить на дисплей ???

Очень нужна помощь !!!!!

(Отредактировано автором: 12 Сентября, 2009 - 15:07:22)

 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Еще раз доброго времени суток. Уже 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. Заранее спасибо.

(Отредактировано автором: 26 Сентября, 2009 - 23:47:12)

 
 Top
-dead- Post Id


Президент


Сообщений всего: 966
Дата рег-ции: Февр. 2009  



А вы указали в проекте, что используете МК АТМега8?
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Да. Я указал это в настройках Makefile

# MCU name
MCU = atmega8

Думал в директиве делал. Но в примерах никаких особенных директив не указывают.
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Парни ! Нашел скрипт 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;
}


}

}
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



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)
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Спасение утопающего - дело рук самого утопающего. Кое где разобрался, но почему при одних и тех же директивах (проверял) в одном случае UCR воспринимается как переменная, а в другом нет проблем ?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



обычно приводят пример, где работает как. и где как не работает...

а если хочется раз и навсегда избавиться от путаницы - лучше писать на asm :)
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Меня уже пугает этот смайлик Улыбка после asm ))) Я лучше на Си. Спасибо ))
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



ну... судя по вопросам , пока что на СИ вы далеко не уехали :)

асм не так страшен, как многие думают.
если с микросхемами логики 155/74 не возникало непонятнок. то асм даётся с первого захода.
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Ооо... чет мои вопросы одни висят. Ну вот еще один ) Мне нужно постоянно опрашивать входы D0-D3 на них подается код с дешифратора. Какой вид прерывания лучше выбрать на Си. ???
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



если постоянно опрашивать - то тупо в цикле.
если ставить на прерывание - то настроить прерывание на нужное изменение уровня.
прерывание можно взять INTx (INT0 , INT1, INT3, ...) или PCINT (Pin Change Interrupt) если есть, если подойдёт - можно настроить ANALOG COMP (Analog Comparator).

вообще прерывания обычно не ставят на такое количество входов. прерывания - на вес золота :)
в завтисимости от схемных решений можно обойтись одним прерыванием. или найти другое решение.
схему не покажите ?
 
 Top
1_ulyanovsk Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  



Схема простая. Аналговый коммутатор опрашивает 10 каналов и подает последдовательно сигнал на компаратор. Сигнал с датчиков у меня уже в цикле обрабатывается поэтому я не хотел бы еще цикл ставить.
Высталяю переключателем на 4 к примеру канал и на индикаторе отслеживаю его состояние (думал именно это реализовать в прерывании) А2Т на рисунке
Прикреплено изображение
Photo-0004.jpg

(Отредактировано автором: 10 Октября, 2009 - 21:27:05)

 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



Дак вы в этом цикле и опрашивайте входы. Имхо самое простое нежели прерывания городить, не?
 
 Top
Страниц (17): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru