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


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

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



Генерал


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



так даже в младших АВэРках есть два аналоговых входа.
Вы спросили про расстояние.
 
 Top
zatmenie Post Id



Генерал


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



вопрос не в темы: как надо подключить лампочку что бы узнать зарядился конденсатор или нет?
 
 Top
zatmenie Post Id



Генерал


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



Люди объясните мне как настроить таймер/счётчик Т0 на tiny2313? никак не могу въехать
 
 Top
mihail Post Id



Гуру


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



Что именно должен делать таймер/счетчик 0 ?
 
 Top
zatmenie Post Id



Генерал


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



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

1 вариант: он должен делать задержку в ?? сек/милисек
2 вариант: использовать его как шим
 
 Top
nest Администратор Post Id



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


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



zatmenie пишет:
1 вариант: он должен делать задержку в ?? сек/милисек
2 вариант: использовать его как шим
поподробнее расскажите. А то тут почти взаимоисключающие варианты :)
 
 Top
zatmenie Post Id



Генерал


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



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

ну это мне для освоения мк. сначала хочу сделать задержку на таймере, потом хочу сделать шим(но скорее всего на другом таймере).
поэтомы для начала объясните как сделать задержку, че куда тыкать, какие где цифры ставить и зачем все это нужно
 
 Top
mihail 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 Post Id



Генерал


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



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

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



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


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



Михаилу вообще респект!
И ведь, действительно, не лень!? Улыбка
 
 Top
zatmenie Post Id



Генерал


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



Михаил большое спасибо, теперь буду сидеть пробовать.
(Добавление)
А как в CVAVR с помощью генератора кода можно настроить Т0
 
 Top
mihail 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 Post Id



Генерал


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



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



Маршал


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



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

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

 
 Top
nest Администратор 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
  Яндекс.Метрика   Рейтинг@Mail.ru