ШИМ на attyni 13

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

ШИМ на attyni 13

Сообщение Frezerok »

Всем доброго дня.
Вопрос 1: Как отключить самый первый пред делитель на 8, не получается частоты шим болле 4687?

Код: Выделить всё

#define F_CPU 9600000UL
#include <avr/io.h>


int main(void)
{
   DDRB = 0x03;
   PORTB = 0x00; 
      
   TCCR0A = (0 << COM0A1)|(1 << COM0A0)|(0 << COM0B1)|(1 << COM0B0)|(0 << WGM01)|(0 << WGM00);
   TCCR0B = (0 << WGM02) |(0 << CS02) |(0 << CS01) |(1 << CS00);
   TCNT0 = 0x00;	
		
	while(1)
    {
		
		OCR0A = 10;
		OCR0B = 50;
    }
}
Вопрос 2: Как получить шим 25кГц?
Вопрос 3: Возможно ли сделать на одной ноге шим 25Кгц, а на другой 1кГц?

Спасибо.
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ШИМ на attyni 13

Сообщение GP1 »

теоретически можно получить ШИМ с частотой = Fo/2, но шаг при этом будет 0-50%-100%
если ограничится шагом через 1% то можно получить 9.6/100 = 96кГц
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: ШИМ на attyni 13

Сообщение Мастер Ломастер »

самый первый делитель на 8 - это, очевидно, фьюз CKDIV8? так не прошивайте его, и все дела :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ШИМ на attyni 13

Сообщение Engineer_Keen »

1) Его можно сбросить через регистр CLKPR. Нужно записать туда 0x80.
2) Либо подобрать удобный внешний тактовый генератор, либо играться с регистром OSCCAL
3) GP1 ниже сказал...
Последний раз редактировалось Engineer_Keen Пн янв 16, 2012 13:47:01, всего редактировалось 2 раза.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ШИМ на attyni 13

Сообщение GP1 »

Frezerok писал(а): Вопрос 3: Возможно ли сделать на одной ноге шим 25Кгц, а на другой 1кГц?

Спасибо.
аппаратный не получится, у т13 только один таймер, а программно без проблем.
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

Фьюз CKDIV8 я и не трогал. Т.к. еще очень мало понимаю в М.К. Наверное этот косяк из-за proteus'а.
Буду искать откуда он там берется.
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ШИМ на attyni 13

Сообщение Engineer_Keen »

А его никто и не трогает, он по-умолчанию в протеусе стоит, и в новых контроллерах тоже.
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

Прописал в программе CLKPR = 0x80; не помогло.
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

А программный шим, это когда в программе с помощью задержек управлять состояние ножек?
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ШИМ на attyni 13

Сообщение GP1 »

так ты получишь только один ШИМ.
может стоит взять другой камень, с двумя таймерами?
Чем дальше, тем больше становлюсь занудой...
Изображение
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

Frezerok писал(а):
Вопрос 3: Возможно ли сделать на одной ноге шим 25Кгц, а на другой 1кГц?

Спасибо.

аппаратный не получится, у т13 только один таймер, а программно без проблем.
Я так и не понял как это сделать.
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

Задача настолько примитивна, что брать для ее реализации более крупную модель просто жалко.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ШИМ на attyni 13

Сообщение GP1 »

боюсь что получить два разночастотных ШИМа программно не получится.
посмотри на тини24 - стоит копейки но 2а таймера
Чем дальше, тем больше становлюсь занудой...
Изображение
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: ШИМ на attyni 13

Сообщение Alkul »

Frezerok писал(а):Я так и не понял как это сделать.
Ну, ШИМ бывает и программный :)

Пусть Вам нужны 2 ШИМа с периодами, например, 20 и 30 мс
Ставите таймер на отсчет, допустим, 1 мс. Организуете 2 "виртуальных" таймера - счетчики которых инкрементируются в обработчике прерываний по переполнению реального таймера. И там же, в обработчике, проверяете, не пришла ли пора "передернуть ноги" на пинах, соответствующих выходам "виртуальных" таймеров.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ШИМ на attyni 13

Сообщение GP1 »

О :shock:
а я чёт затупил, делал же так совсем недавно :)))
склероз- его нельзя вылечить, о нем можно забыть :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Frezerok
Открыл глаза
Сообщения: 67
Зарегистрирован: Ср мар 17, 2010 21:21:48

Re: ШИМ на attyni 13

Сообщение Frezerok »

Спасибо. Смысл понятен. Буду пробовать.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ШИМ на attyni 13

Сообщение Engineer_Keen »

Как пример для 3-го вопроса:

Код: Выделить всё

	.include "tn13def.inc"
	.equ	PWM1=64
	.equ	PWM2=32
	.macro	OUTI
	LDI	R16,@1
	OUT	@0,R16
	.endm
.cseg
	RJMP	RESET		;RESET
	RETI			;INT0
	RETI			;PCINT
	RETI			;T0_OV
	RETI			;EE_RDY
	RETI			;ANA_COMP
	RETI			;T0=A
	RETI			;T0=B
	RETI			;WDT
	RETI			;ADC
RESET:
	OUTI	CLKPR,0x80	;enable CLKPR change
	OUTI	CLKPR,0x00	;Clear DIV8
L1:	IN	R16,OSCCAL	;load current OSCCAL (9.6MHz)
	DEC	R16 		;slowly change speed
	OUT	OSCCAL,R16	
	CPI	R16,0x01	;to 6.4MHz ?
L2:	BRNE	PC-3
	OUTI	SPL,low(Ramend)	;set stack
	OUTI	PORTB,0x00	;set port
	OUTI	DDRB,0x03	;set direction
	OUTI	TCCR0A,(1<<COM0A1)|(1<<WGM01)|(1<<WGM00)
	OUTI	TCCR0B,(1<<CS00);set timer prescaler
	OUTI	OCR0A,PWM1	;set 1st PWM
	OUTI	ADCSRA,(1<<ADEN)|(1<<ADATE)|(1<<ADSC)|(1<<ADPS0);enable ADC
	LDI	R17,0xFF	;set softPWM counter
LOOOOOP:
	SBIS	ADCSRA,ADIF	;check ADC flag
	RJMP	LOOOOOP		;idle loop
	SBI	ADCSRA,ADIF	;clear ADC flag
	INC	R17		;increment softPWM counter
	BRNE	PC+2		;branch if <>0
	SBI	PINB,PB1	;set pin to 1
	CPI	R17,PWM2	;compare with PWM2
	BRNE	LOOOOOP		;go to idle if <>
	SBI	PINB,PB1	;clear pin if =
	RJMP	LOOOOOP		;go to idle
Для тактовой 9.6. Если использовать 6.4, то строки с L1 по L2 не нужны.
Вместо программного делителя - флаг прерывания АЦП, за счет этого программная ШИМ на ноге PB1 получается как раз в 25 раз медленнее чем аппаратная ШИМ на PB0. Вообще тут использование АЦП не совсем оправдано, но для меньших частот можно использовать прерывание АЦП в качестве второго таймера.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»