роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


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

> Без описания
cjA
Отправлено: 27 Июля, 2010 - 22:23:26
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





так даже в младших АВэРках есть два аналоговых входа.
Вы спросили про расстояние.
 
 Top
zatmenie
Отправлено: 20 Августа, 2010 - 23:53:18
Post Id



Генерал


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





вопрос не в темы: как надо подключить лампочку что бы узнать зарядился конденсатор или нет?
 
 Top
zatmenie
Отправлено: 03 Сентября, 2010 - 20:25:41
Post Id



Генерал


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





Люди объясните мне как настроить таймер/счётчик Т0 на tiny2313? никак не могу въехать
 
 Top
mihail
Отправлено: 03 Сентября, 2010 - 21:36:24
Post Id



Гуру


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





Что именно должен делать таймер/счетчик 0 ?
 
 Top
zatmenie
Отправлено: 04 Сентября, 2010 - 19:55:28
Post Id



Генерал


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





mihail пишет:
Что именно должен делать таймер/счетчик 0 ?

1 вариант: он должен делать задержку в ?? сек/милисек
2 вариант: использовать его как шим
 
 Top
nest Администратор
Отправлено: 04 Сентября, 2010 - 20:44:30
Post Id



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


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





zatmenie пишет:
1 вариант: он должен делать задержку в ?? сек/милисек
2 вариант: использовать его как шим
поподробнее расскажите. А то тут почти взаимоисключающие варианты :)
 
 Top
zatmenie
Отправлено: 04 Сентября, 2010 - 23:16:21
Post Id



Генерал


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





nest пишет:
поподробнее расскажите. А то тут почти взаимоисключающие варианты Улыбка

ну это мне для освоения мк. сначала хочу сделать задержку на таймере, потом хочу сделать шим(но скорее всего на другом таймере).
поэтомы для начала объясните как сделать задержку, че куда тыкать, какие где цифры ставить и зачем все это нужно
 
 Top
mihail
Отправлено: 05 Сентября, 2010 - 01:08:15
Post Id



Гуру


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





Timer/Counter 0 является восьмиразрядным таймером/счетчиком
CODE:

/* Timer/Counter 0 Control Register A */
/* регистр управления таймером/счетчиком 0 А */
/* биты регистра:
COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00 */
TCCR0A=0b00000000;

/* Timer/Counter 0 Control Register B */
/* регистр управления таймером/счетчиком 0 В */
/* биты регистра:
FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00 */
TCCR0B=0b00000001;

/* Timer/Counter 0 */
/* счётный регистр таймера/счетчика 0 */
TCNT0=0b00000000;
/* обычно таймер/счетчик 0 считает от 0 до 255, затем сбрасывается в 0 и снова считает до 255 */

/* Output Compare Register А */
/* регистр сравнения таймера/счетчика 0 А */
OCR0A=0b00000000;

/* Output Compare Register В */
/* регистр сравнения таймера/счетчика 0 В */
OCR0B=0b00000000;

Управление работой таймера/счетчика 0 осуществляется путем изменения значения битов регистров управления. У данного таймера/счетчика их два (TCCR0A, TCCR0B). Для того, чтобы таймер/счетчик заработал достаточно определить источник сигнала. Это делается с помощью битов CS02 CS01 CS00 регистра TCCR0B.

CS02 | CS01 | CS00

0 | 0 | 0 - таймер/счетчик остановлен
0 | 0 | 1 - нет предделителя *
0 | 1 | 0 - предделитель 8 **
0 | 1 | 1 - предделитель 64 **
1 | 0 | 0 - предделитель 256 **
1 | 0 | 1 - предделитель 1024 **

* значение счетного регистра TCNT0 изменяется на 1 при каждом такте тактового генератора микроконтроллера
** значение счетного регистра TCNT0 изменяется на 1 после 8 (64, 256, 1024) тактов тактового генератора микроконтроллера

Теперь уже можно работать с таймером/счетчиком 0. Если в программе организовать проверку счетного регистра TCNT0, то можно отмерять промежутки времени.
CODE:

TCNT0 = 0;
while( TCNT0 < 100 ) { /* код */ }
/* код */

Я описал самый простой и не самый лучший способ использования таймера/счетчика. Все возможности таймера/счетчика подробно описаны в datasheet ATtiny2313. На английском языке его можно найти на официальном сайте Atmel http://www.atmel.com/

(Отредактировано автором: 05 Сентября, 2010 - 16:11:31)

 
 Top
cjA
Отправлено: 05 Сентября, 2010 - 01:45:09
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





всё таки тратить два единственных таймера на ШИМ- жалко.

(михаил, вот ведь тебе не лень, пускай бы сидел и читал даташит со словарем в руках, как я. Улыбка Спасибо, всетаки когда по русски и на пальцах- понятнее чем через даташит на английском)
 
 Top
ОЛЕГ Супермодератор
Отправлено: 05 Сентября, 2010 - 04:47:28
Post Id



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


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  





Михаилу вообще респект!
И ведь, действительно, не лень!? Улыбка
 
 Top
zatmenie
Отправлено: 05 Сентября, 2010 - 16:32:58
Post Id



Генерал


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





Михаил большое спасибо, теперь буду сидеть пробовать.
(Добавление)
А как в CVAVR с помощью генератора кода можно настроить Т0
 
 Top
mihail
Отправлено: 05 Сентября, 2010 - 18:54:45
Post Id



Гуру


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





Более интересна работа таймера/счетчика 0 через прерывания. Сразу скажу, что программа на С в которой используются прерывания зависима от компилятора. Нельзя взять программу написанную в CVAVR и откомпилировать в WinAVR.

У таймера/счетчика 0 ATtiny2313 предусмотрено три прерывания: прерывание по переполнению и два прерывания по совпадению.
CODE:

/* Timer/Counter Interrapt Mask Register */
/* регистр маски прерываний таймеров/счетчиков */
/* биты регистра:
TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A */
TIMSK = 0b00000000;

/* *************************************
TOIE0 - разрешает прерывание по переполнению таймера/счетчика 0

OCIE0A - разрешает прерывание по совпадению счетного регистра TCNT0 с регистром сравнения OCR0A таймера/счетчика 0

OCIE0B - разрешает прерывание по совпадению счетного регистра TCNT0 с регистром сравнения OCR0B таймера/счетчика 0
************************************* */

Для того, чтобы прерывания выполнялись необходимо глобальное разрешение прерываний. В CVAVR это делается с помощью
CODE:

#asm("sei")

Обрабатываются прерывания в специальных функциях. Для CVAVR это
CODE:

/* прерывание при переполнении таймера/счетчика 0 */
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
/* код */
}

/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0A таймера/счетчика 0 */
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
/* код */
}

/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0В таймера/счетчика 0 */
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
/* код */
}

И в заключении пример работающей (надеюсь Ухмылка ) с прерываниями программы
CODE:

/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8a Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 05.09.2010
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/

#include <tiny2313.h>

/* прерывание при переполнении таймера/счетчика 0 */
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
/* код */
PORTB ^= 0b00000001;
}

/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0A таймера/счетчика 0 */
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
/* код */
PORTB ^= 0b00000010;
}

/* прерывание при совпадении счетного регистра TCNT0 с регистром сравнения OCR0В таймера/счетчика 0 */
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
/* код */
PORTB ^= 0b00000100;
}

void main(void)
{

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

/* все выводы порта B сконфигурировать как выходы */
DDRB = 0b11111111;
PORTB = 0b00000000;

/* Timer/Counter 0 Control Register A */
/* регистр управления таймером/счетчиком 0 А */
/* биты регистра:
COM0A1 COM0A0 COM0B1 COM0B0 Reserved Reserved WGM01 WGM00 */
TCCR0A = 0b00000000;

/* Timer/Counter 0 Control Register B */
/* регистр управления таймером/счетчиком 0 В */
/* биты регистра:
FOC0A FOC0B Reserved Reserved WGM02 CS02 CS01 CS00 */
TCCR0B = 0b00000010;

/* Timer/Counter 0 */
/* счётный регистр таймера/счетчика 0 */
TCNT0 = 0;

/* Output Compare Register А */
/* регистр сравнения таймера/счетчика 0 А */
OCR0A = 100;

/* Output Compare Register В */
/* регистр сравнения таймера/счетчика 0 В */
OCR0B = 200;

/* Timer/Counter Interrapt Mask Register */
/* регистр маски прерываний таймеров/счетчиков */
/* биты регистра:
TOIE1 OCIE1A OCIE1B Reserved ICIE1 OCIE0B TOIE0 OCIE0A */
TIMSK = 0b00000111;

/* глобальное разрешение прерываний */
#asm("sei")

while (1)
{
/* код */
}
}

Все возможности таймера/счетчика 0 подробно описаны в datasheet ATtiny2313. На английском языке его можно найти на официальном сайте Atmel http://www.atmel.com/

Посмотрите перевод datasheet ATmega128 http://www.gaw.ru/html.cgi/txt/d...arh128/index.htm
(Добавление)
zatmenie пишет:
А как в CVAVR с помощью генератора кода можно настроить Т0

Генератора кода CVAVR не делает ничего сверх естественного. Он просто записывает нужные значения в биты регистров. Назначение регистров и их битов я описал. Создавайте шаблон программы и проверяйте значения битов регистров Улыбка

PS Спасибо за теплые слова.

(Отредактировано автором: 05 Сентября, 2010 - 20:05:38)

 
 Top
zatmenie
Отправлено: 05 Сентября, 2010 - 23:30:51
Post Id



Генерал


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





вот есть же на свете добрые люди. Спасибо большое Михаил. Что бы я без вас делал? Теперь буду вникать и пробовать. Спасибо ещё раз. высший восторг
 
 Top
alex91
Отправлено: 10 Сентября, 2010 - 02:01:09
Post Id



Маршал


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





Извините что влез в эту тему не хотелось открывать другую
У меня такая проблема, весь вечер мучиюсь как сделать чтобы, одна операция в программе не мешала другой в работе, хочу объединить три программы в одну
1программу для объезда препятствий на 3 tcop-ах
2радиоуправление
и 3датчик света в пространстве
что нужно чтобы они независимо работали
в программе я чего только не перепробовал нечего не работает кроме tcop реагируют но робот не едет при включении как должен
очень прошу знающих помогите начинаюшиму
Скачать файл: не рабочая.rar
Скачан раз: 227

(Отредактировано автором: 11 Сентября, 2010 - 20:44:53)

 
 Top
nest Администратор
Отправлено: 11 Сентября, 2010 - 19:04:05
Post Id



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


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






alex91, вот ещё бы запятые в вашем сообщении расставить, а то малопонятная каша какая то
 
 Top
Страниц (17): В начало « ... 3 4 5 6 [7] 8 9 10 11 ... » В конец
« Программирование микроконтроллеров »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown