Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Программный ШИМ на Attiny13

Непрочитано 26.09.2017, 08:45  
Дмитрий_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  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

1. Отредактируйте исходное сообщение с использованием тэга CODE.
2. В данном случае, без конкретной схемы - нельзя говорить о конкретной плавности.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 26.09.2017, 12:56  
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  
Georg77
Прописка
 
Регистрация: 11.04.2009
Сообщений: 233
Сказал спасибо: 11
Сказали Спасибо 109 раз(а) в 66 сообщении(ях)
Georg77 на пути к лучшему
По умолчанию Re: Программный ШИМ на Attiny13

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

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

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

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

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

Сообщение от j-Roger Посмотреть сообщение
Тут имеется простор для творчества
а если написать "аппарат"
jump вне форума  
Непрочитано 27.09.2017, 07:14  
Дмитрий_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, время: 14:31.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.