Как бы хотелось, что бы работал сей девайс
1. При нажатии кноки, и фиксации её плано нарастает мощость в нагрузке до максимума.
2. По достижении максимума в нагрузке на выходе 6 Мк появлется "1" ( +5 В), срабатывает рееле, коротит транзистор. И так всё остаётся до момента размыкания Копки.
3. При размыкании кнопки, сначала с вывода 6 МК пропадает "1", затем плавно уменьшается мощность нагрузки до нуля. - всё.
В исходнике программы ШИМ уже прописан, и управление кнопкой прописано.
Если честно, не смог я доделать до того, что хочу...
Какое то гадство! Если можете, помогите!!!
Исходник программы.
Code: Select all
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
Project :
Version :
Date : 15.09.2009
Author : XXXXX
Company : Home
Comments:
Chip type : ATtiny13
AVR Core Clock frequency: 9,600000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*****************************************************/
#include <tiny13.h>
#include <delay.h>
int cnt=0;
char Step=0xFF;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFE;
// Place your code here
cnt++;
//Каждый 20-й заход в прерывание
if (cnt==19){
cnt=0;
//254 шага увеличения ширины импульса
if (Step !=0xFE ) {
Step++;
OCR0A=Step;
}
}
}
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
char st; //Состояние кнопки
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=Out Func4=Out Func3=In Func2=Out Func1=Out Func0=Out
// State5=0 State4=0 State3=P State2=0 State1=0 State0=0
PORTB=0x08;
DDRB=0x37;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83; //83=non-inverted, C3=inverted
/* TCCR0A
(10)=Clear OC0A on Compare Match, set OC0A at TOP
|
-- --(11)=Fast PWM + WGM02 in TCCR0B=0
10000011
*/
TCCR0B=0x01;
/* TCCR0B
-(0)=WGM02
00000001
*/
TCNT0=0x10;
OCR0A=0x00;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x06;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")
while (1)
{
#asm("wdr"); //Сброс сторожевого таймера
// Посмотрим состояние кнопки
st=PINB & 0b001000;
delay_us(50);
if (!st) {
//Замкнута
Step=0xFF;
OCR0A=0xFF;
cnt=0;
}
};
}
Добавлено спустя 21 час 29 минут:
Приношу свои извинения, в принципиальной схеме конечно ошибка, исправлю... Контакты реле коротят истоу- сток транзистора, а не нагрузку конечно... Для того, что б и надёжность была повыше, да и при приличных нагрузках транзистор и вовсе не грелся.....