Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 26.09.2017, 08:45   #1
Дмитрий_58
Частый гость
 
Регистрация: 14.10.2016
Сообщений: 21
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий_58 на пути к лучшему
По умолчанию Программный ШИМ на Attiny13

Подскажите как дальше делать для плавного включения светодиода:
//Chip type : ATtiny13
//AVR Core Clock frequency: 9,600000 MHz
#include ‹tiny13.h›
#include ‹delay.h›


// Declare your global variables here

void main(void)
{
//;
//;
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1‹‹CLKPCE);
CLKPR=(0‹‹CLKPCE) | (0‹‹CLKPS3) | (0‹‹CLKPS2) | (0‹‹CLKPS1) | (0‹‹CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
DDRB=(0‹‹DDB5) | (0‹‹DDB4) | (0‹‹DDB3) | (0‹‹DDB2) | (0‹‹DDB1) | (1‹‹DDB0);
// State: Bit5=T Bit4=P Bit3=P Bit2=T Bit1=T Bit0=0
PORTB=(0‹‹PORTB5) | (1‹‹PORTB4) | (1‹‹PORTB3) | (0‹‹PORTB2) | (0‹‹PORTB1) | (0‹‹PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Phase correct PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
// Timer Period: 3,4 ms
// Output Pulse(s):
// OC0A Period: 3,4 ms Width: 0 us
TCCR0A=(0‹‹COM0A1) | (1‹‹COM0A0) | (1‹‹COM0B1) | (1‹‹COM0B0) | (1‹‹WGM01) | (1‹‹WGM00);
TCCR0B=(1‹‹WGM02) | (1‹‹CS02) | (0‹‹CS01) | (1‹‹CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0‹‹OCIE0B) | (0‹‹OCIE0A) | (0‹‹TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=(0‹‹INT0) | (0‹‹PCIE);
MCUCR=(0‹‹ISC01) | (0‹‹ISC00);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1‹‹ACD) | (0‹‹ACBG) | (0‹‹ACO) | (0‹‹ACI) | (0‹‹ACIE) | (0‹‹ACIS1) | (0‹‹ACIS0);
ADCSRB=(0‹‹ACME);
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR0=(0‹‹AIN0D) | (0‹‹AIN1D);

// ADC initialization
// ADC disabled
ADCSRA=(0‹‹ADEN) | (0‹‹ADSC) | (0‹‹ADATE) | (0‹‹ADIF) | (0‹‹ADIE) | (0‹‹ADPS2) | (0‹‹ADPS1) | (0‹‹ADPS0);


while (1)
{

}

}
Реклама:
Дмитрий_58 вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 12:49   #2
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,069
Сказал спасибо: 3,054
Сказали Спасибо 3,223 раз(а) в 2,188 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

1. Отредактируйте исходное сообщение с использованием тэга CODE.
2. В данном случае, без конкретной схемы - нельзя говорить о конкретной плавности.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 12:56   #3
CAIG
Частый гость
 
Регистрация: 20.05.2015
Сообщений: 45
Сказал спасибо: 41
Сказали Спасибо 26 раз(а) в 14 сообщении(ях)
CAIG на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Не всё реализовано из описания, но ШИМ в этом примере рабочий, с плавным нарастанием по сигналу включения.

Код:
;*************************************************  ****************
;* Программа предназначена для приёма сигнала от датчика 		 *
;* присутствия человека, аналогового датчика уровня освещённости *
;* и плавного изменения заполнения ШИМ от 0% до значения в 		 *
;* соответствии с уровнем освещённости для плавного включения	 *
;* и выключения светодиодного освещения					 		 *
;*  															 *
;* Программа рассчитана на работу от внутреннего осциллятора на  *
;* 128 кГц (CKSEL="11"). 										 *
;* Тактовая частота ядра 32 кГц (CLKPR=CLKPS1) 					 *
;* Частота дискретизации АЦП = 1 кГц							 *
;*************************************************  ****************
.nolist
.include "tn13Adef.inc"		;Define chip particulars
.list

;***** Global register variables
.def	wreg1	=R16		;General use working register
.def	light	=R17
.def	counter1	=R18
.def	wreg3	=R19

.equ	l_min	= 0x50

	rjmp RESET_handler ; Reset Handler
	rjmp EXT_INT0_handler ; IRQ0 Handler
	rjmp PCINT0_handler ; PCINT0 Handler
	rjmp TIM0_OVF_handler ; Timer0 Overflow Handler
	rjmp EE_RDY_handler ; EEPROM Ready Handler
	rjmp ANA_COMP_handler ; Analog Comparator Handler
	rjmp TIM0_COMPA_handler ; Timer0 CompareA Handler
	rjmp TIM0_COMPB_handler ; Timer0 CompareB Handler
	rjmp WATCHDOG_handler ; Watchdog Interrupt Handler
	rjmp ADC_handler ; ADC Conversion Handler

RESET_handler:
	ldi wreg1, low(RAMEND); Main program start
	out SPL,wreg1 ; Set Stack Pointer to top of RAM
	ldi		wreg1,1‹‹ACD
	out		ACSR, wreg1		;Отключение аналогового компаратора, чтобы не ел питание

;*************************************************  ****************
;	ldi wreg1, (0‹‹CS00)|(1‹‹CS02)
;	out TCCR0B,wreg1

;CS02	CS01	CS00	Description
; 0		 0		 0		No clock source (Timer/Counter stopped)
; 0		 0		 1		clkI/O/(No prescaling)
; 0		 1		 0		clkI/O/8 (From prescaler)
; 0		 1		 1		clkI/O/64 (From prescaler)
; 1		 0		 0		clkI/O/256 (From prescaler)
; 1		 0		 1		clkI/O/1024 (From prescaler)
;*************************************************  ****************

	ldi wreg1,(1‹‹CLKPCE)	;Timer/Counter Clock Select
	out CLKPR,wreg1	;Clock Prescaler Change Enable

;*************************************************  ****************
	ldi wreg1,(1‹‹CLKPS1)	;Timer/Counter Clock Select
	out CLKPR,wreg1	;Clock Prescale
;CLKPS3 	CLKPS2 	CLKPS1 	CLKPS0 	Clock Division Factor
;  0 		  0 	  0 	  0				1
;  0 		  0 	  0 	  1				2
;  0 		  0 	  1 	  0				4
;  0 		  0 	  1 	  1				8
;  0 		  1 	  0 	  0				16
;  0 		  1 	  0 	  1				32
;  0 		  1 	  1 	  0				64
;  0 		  1 	  1 	  1				128
;  1 		  0 	  0 	  0				256
;*************************************************  ****************

; Define pull-ups and set outputs high
; Define directions for port pins
	ldi wreg1,(0‹‹PB4)|(0‹‹PB1)|(0‹‹PB0)
	out PORTB,wreg1
	ldi wreg1,(1‹‹DDB0)
	out DDRB,wreg1
	clr counter1
	clr wreg3
;*************************************************  ****************
;	ISC01	 ISC00	 Description
;	  0 		0 	 The low level of INT0 generates an interrupt request.
;	  0 		1 	 Any logical change on INT0 generates an interrupt request.
;	  1 		0 	 The falling edge of INT0 generates an interrupt request.
;	  1 		1 	 The rising edge of INT0 generates an interrupt request.
;*************************************************  ****************
	ldi	wreg1,(1‹‹SE)|(1‹‹SM1)|(0‹‹SM0)|(0‹‹ISC01)|(1‹‹ISC00)
	out MCUCR,wreg1				; sleep enable, power-down, any logical change on INT0 generates an interrupt request.
	ldi	wreg1,(1‹‹INT0)
	out GIMSK,wreg1				; External Interrupt Request 0 Enable, Pin Change Interrupt Disable
    ldi wreg1,(1‹‹CS02)
    out TCCR0B, wreg1			; clkI/O/256 (From prescaler)
	sei

main_loop:
;	sei
;	sleep
	
;	in wreg1,PINB
;	andi wreg1,1
;	swap wreg1
;ml02:
;	cpi	counter1,5 ; For 10 minutes counter1=90
;	brne ml01
;	ldi wreg3,0x02
;	clr counter1
;	out TIMSK0,counter1	; Timer/Counter0 Overflow Interrupt Disable
;ml01:
;	or wreg1,wreg3
;	out	PORTB,wreg1
	rjmp main_loop

EXT_INT0_handler:
    ldi wreg1,0
    out GIMSK,wreg1             ; External Interrupt Request 0 Disable
    ldi wreg1,(1‹‹COM0A1)|(1‹‹WGM00)|(1‹‹WGM01)
    out TCCR0A, wreg1			; Clear OC0A on Compare Match, set OC0B at TOP, Fast PWM
    ldi wreg1,(1‹‹TOIE0)
    out TIMSK0,wreg1    		; Timer/Counter0 Overflow Interrupt Enable
    clr wreg1
	in	wreg3,PINB
	set
	sbrs wreg3,1				; пропустить следующую команду, если бит 1 в wreg1 установлен
	clt
	sbrs wreg3,1				; пропустить следующую команду, если бит 1 в wreg1 установлен
	dec wreg1
    out TCNT0,wreg1     		; обнуляем значение счётчика таймера
    ldi counter1,0
	sbrs wreg3,1				; пропустить следующую команду, если бит 1 в wreg1 установлен
	dec counter1
    out OCR0A,wreg1
	reti

PCINT0_handler:
EE_RDY_handler:
ANA_COMP_handler:
TIM0_COMPA_handler:
ADC_handler:
TIM0_COMPB_handler:
WATCHDOG_handler:
	reti

TIM0_OVF_handler:
	brtc t1						; если ширину импульса уменьшать, то переходим на t1
	cpi	counter1,0xff			; если ШИМ отработал на включение, то выставляем флаг
	brne t0
	ldi wreg1,0
    out TCCR0A, wreg1			; Normal port operation, OC0A disconnected
	out TIMSK0,wreg1			; Timer/Counter0 Overflow Interrupt Disable
	out GIFR,wreg1				; General Interrupt Flag Register Reset
	inc wreg1
	out	PORTB,wreg1
    ldi wreg1,(1‹‹INT0)
    out GIMSK,wreg1             ; External Interrupt Request 0 Enable
	reti
t0:	
	inc counter1
	out OCR0A,counter1
	reti
t1:	cpi counter1,0				
	brne t2
	ldi wreg1,0
    out TCCR0A, wreg1			; Normal port operation, OC0A disconnected
	out TIMSK0,wreg1			; Timer/Counter0 Overflow Interrupt Disable
	out	PORTB,wreg1
	out GIFR,wreg1				; General Interrupt Flag Register Reset
    ldi wreg1,(1‹‹INT0)
    out GIMSK,wreg1             ; External Interrupt Request 0 Ensable
	reti
t2:
	dec counter1
	out OCR0A,counter1
	reti

Последний раз редактировалось CAIG; 26.09.2017 в 13:06.
CAIG вне форума   Ответить с цитированием
Сказали "Спасибо" CAIG
aleksw7 (27.09.2017)
Непрочитано 26.09.2017, 16:14   #4
Georg77
Прописка
 
Регистрация: 11.04.2009
Сообщений: 233
Сказал спасибо: 11
Сказали Спасибо 109 раз(а) в 66 сообщении(ях)
Georg77 на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

что такое (по - Вашему) аппаратный ШИМ? И где здесь программный?
Georg77 вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 20:01   #5
Дмитрий_58
Частый гость
 
Регистрация: 14.10.2016
Сообщений: 21
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий_58 на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Программный это шим который вы пишите программно, а аппаратный тот который вы настроили аппаратно.
Дмитрий_58 вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 20:04   #6
Дмитрий_58
Частый гость
 
Регистрация: 14.10.2016
Сообщений: 21
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий_58 на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

CAIG, доброго дня!
Подскажите как отредактировать сообщение с использованием тэга CODE?Т.к. я еще новичок, ваш код можно адаптировать под компилятор кодэвижн?Т.к. я в нем начал свой проект, на счет схемы то мне нужно управлять полевиком и я хочу плавно зажечь лампу и что бы она просто потом горела.
Дмитрий_58 вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 21:31   #7
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Сообщение от Дмитрий_58 Посмотреть сообщение
Программный это шим который вы пишите программно, а аппаратный тот который вы настроили аппаратно
аппаратно - с помощью своего аппарата? или все ж программно, настроив регистры счетчика?
jump вне форума   Ответить с цитированием
Непрочитано 26.09.2017, 23:17   #8
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 748
Сказал спасибо: 365
Сказали Спасибо 822 раз(а) в 386 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Сообщение от jump Посмотреть сообщение
аппаратно - с помощью своего аппарата?
Тут имеется простор для творчества. Сумматор уже ж существует; для плавного включения светодиода
осталось буквально запилить модуль (читайте 'аппарат') ШИМ из того же материала
j-Roger вне форума   Ответить с цитированием
Непрочитано 27.09.2017, 00:19   #9
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Сообщение от j-Roger Посмотреть сообщение
Тут имеется простор для творчества
а если написать "аппарат"
jump вне форума   Ответить с цитированием
Непрочитано 27.09.2017, 07:14   #10
Дмитрий_58
Частый гость
 
Регистрация: 14.10.2016
Сообщений: 21
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий_58 на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

Все уже настроено давно, а на счет даташита то читайте его сами, там не сказано как конкретно написать цикл, что тут не ясного или думаете здесь глупее вас сидят.
Дмитрий_58 вне форума   Ответить с цитированием
Ответ

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программный ШИМ. Теоретический вопрос Janush AVR 9 22.10.2013 21:59
мега8 программный 8и канальный ШИМ? Sany81 AVR 12 18.10.2013 19:35
ШИМ на attiny13 ev_genui AVR 15 30.05.2013 16:51
Fast ШИМ на ATTiny13 с переменным TOP ajsn AVR 2 23.04.2013 18:40
ШИМ на Attiny13 Daget Микроконтроллеры, АЦП, память и т.д 8 03.04.2011 00:29


Часовой пояс GMT +4, время: 23:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot