Сб дек 05, 2020 17:14:43
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON // RA3/MCLR pin function select (RA3/MCLR pin function is MCLR)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#define _XTAL_FREQ 4000000
#include <pic.h>
#include <xc.h>
#define OUT_R RC4
#define OUT_G RC3
#define OUT_B RC2
#include <stdlib.h>
unsigned int rgb_r=0,rgb_g=0,rgb_b=0;
unsigned int count=0;
unsigned int r=0,g=0,b=0;
unsigned int step=0;
// Timer 0 overflow interrupt service routine
void __interrupt() Timer0_ISR(void){
count++;
//канал красного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_r = r; //сохранием значения в буфер
OUT_R =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_r == count) { OUT_R = 0;}//по достижении заданной скважности выводим 0
// канал зелёного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_g = g; //сохранием значения в буфер
OUT_G =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_g == count) { OUT_G = 0;}//по достижении заданной скважности выводим 0
// канал синего
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_b = b; //сохранием значения в буфер
OUT_B =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_b == count) { OUT_B = 0;}//по достижении заданной скважности выводим 0
}
void main(void)
{
PORTC=0b000000;
TRISC=0b000000;
OPTION_REG=0x01;
INTCON=0b101000;
while (1)
{
/*
По-умолчанию формулу R-G-B начнем с красного цвета 255-0-0.
1) Наращивается зеленый цвет 255-1-0, 255-2-0 ... 255-255-0.
2) Уменьшается красный цвет 254-255-0, 253-255-0 ... 0-255-0.
3) Наращивается синий цвет 0-255-1, 0-255-2 ... 0-255-255.
4) Уменьшается зеленый цвет 0-254-255, 0-253-255 ... 0-0-255.
5) Наращивается красный цвет 1-0-255, 2-0-255 ... 255-0-255.
6) Уменьшается синий цвет 255-0-254, 255-0-253 ... 255-0-0.
*/
if(step==0)
{
step=1;
}
if(step==1)
{
r++; g=0;b=0;
if(r>=255){step=2;}
}
if(step==2)
{
g++;
if(g>=255){step=3;}
}
if(step==3)
{
r--;
if(r<=0){step=4;}
}
if(step==4)
{
b++;
if(b>=255){step=5;}
}
if(step==5)
{
g--;
if(g<=0){step=6;}
}
if(step==6)
{
r++;
if(r>=255){step=7;}
}
if(step==7)
{
b--;
if(b<=0){step=0;}
}
__delay_ms(30);
}
}
Сб дек 05, 2020 17:42:39
Сб дек 05, 2020 17:45:10
Сб дек 05, 2020 17:59:41
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>
#define OUT_R PORTB.3
#define OUT_G PORTB.4
#define OUT_B PORTB.2
#include <stdlib.h>
unsigned char rgb_r =0,rgb_g=0,rgb_b=0;
unsigned char count = 0;
unsigned char r=0,g=0,b=0;
unsigned char step=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
count++;
//канал красного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_r = r; //сохранием значения в буфер
OUT_R =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_r == count) { OUT_R = 0;}//по достижении заданной скважности выводим 0
// канал зелёного
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_g = g; //сохранием значения в буфер
OUT_G =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_g == count) { OUT_G = 0;}//по достижении заданной скважности выводим 0
// канал синего
if (count == 0)
{ //если счетчик переполнился и принял значение 0
rgb_b = b; //сохранием значения в буфер
OUT_B =1; //выставляем ноги, отвечающие за ШИМ в логическую 1
}
if (rgb_b == count) { OUT_B = 0;}//по достижении заданной скважности выводим 0
}
void main(void)
{
// 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=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State5=P State4=T State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;
// Global enable interrupts
#asm("sei")
srand(6);
while (1)
{
/*
По-умолчанию формулу R-G-B начнем с красного цвета 255-0-0.
1) Наращивается зеленый цвет 255-1-0, 255-2-0 ... 255-255-0.
2) Уменьшается красный цвет 254-255-0, 253-255-0 ... 0-255-0.
3) Наращивается синий цвет 0-255-1, 0-255-2 ... 0-255-255.
4) Уменьшается зеленый цвет 0-254-255, 0-253-255 ... 0-0-255.
5) Наращивается красный цвет 1-0-255, 2-0-255 ... 255-0-255.
6) Уменьшается синий цвет 255-0-254, 255-0-253 ... 255-0-0.
*/
if(step==0)
{
//step = rand() % 6 + 1;
step=1;
}
if(step==1)
{
r++; g=0;b=0;
if(r>=255){step=2;}
}
if(step==2)
{
g++;
if(g>=255){step=3;}
}
if(step==3)
{
r--;
if(r<=0){step=4;}
}
if(step==4)
{
b++;
if(b>=255){step=5;}
}
if(step==5)
{
g--;
if(g<=0){step=6;}
}
if(step==6)
{
r++;
if(r>=255){step=7;}
}
if(step==7)
{
b--;
if(b<=0){step=0;}
}
delay_ms(30);
}
}
Сб дек 05, 2020 19:00:52
CMCON0 = 0b111; // Disable COMPARATOR
ANSEL = 0x00; // Disable ADC
Сб дек 05, 2020 19:56:56
Сб дек 05, 2020 20:14:57
Сб дек 05, 2020 23:26:43
Чт янв 07, 2021 16:57:55
Чт янв 07, 2021 17:03:33
Чт янв 07, 2021 17:13:33
Сб июл 03, 2021 13:57:14
Сб июл 03, 2021 14:13:35
#pragma config MCLRE = ON // RA3/MCLR pin function select (RA3/MCLR pin function is MCLR)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#define _XTAL_FREQ 4000000
#include <pic.h>
#include <xc.h>
#include <stdio.h>
#include <stdint.h>
#define OUT_R RC0
#define OUT_G RC1
#define OUT_B RC2
unsigned int rgb_r=0,rgb_g=0,rgb_b=0;
unsigned char count=0;
unsigned int r=0,g=0,b=0;
unsigned char step=0;
void __interrupt() Timer0(void){
if (count == 0)
{
rgb_r = r;
OUT_R =1;
}
if (rgb_r == count) { OUT_R = 0;}
if (count == 0)
{
rgb_g = g;
OUT_G =1;
}
if (rgb_g == count) { OUT_G = 0;}
if (count == 0)
{
rgb_b = b;
OUT_B =1;
}
if (rgb_b == count) { OUT_B = 0;}
count++;
T0IF = 0;
}
int main(void)
{
ANSEL = 0x00;
CMCON=0x00;
PORTC=0b000000;
TRISC=0b000000;
OPTION_REG=0x02;
INTCON=0xA0;
TMR0=0;
while (1)
{
if(step==0)
{
step=1;
}
if(step==1)
{
r++; g=0;b=0;
if(r>255){step=2;}
}
if(step==2)
{
g++;
if(g>255){step=3;}
}
if(step==3)
{
r--;
if(r<=0){step=4;}
}
if(step==4)
{
b++;
if(b>255){step=5;}
}
if(step==5)
{
g--;
if(g<=0){step=6;}
}
if(step==6)
{
r++;
if(r>255){step=7;}
}
if(step==7)
{
b--;
if(b<=0){step=0;}
}
__delay_ms(30);
}
}
Сб июл 03, 2021 15:44:57
в протеусе проверил, а в железе работает он как-то странно.
Сб июл 03, 2021 16:06:04
Сб июл 03, 2021 19:04:38
Сб июл 03, 2021 20:26:13
Вс июл 04, 2021 10:42:05
Вс июл 04, 2021 15:36:46
Вс июл 04, 2021 18:28:38