|
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
|
|
نشاط [ مشتاق الله ]
قوة السمعة:
|
|
15-12-2015, 02:46 PM
المشاركة 117
|
|
مشاركة ب addressable led ws2801
السلام عليكم ورحمة الله و بركاته
اليكم برنامج للتحكم في addressable led باستخدام ic ws2801 و هي تتحكم في ال RGB LED باستخدام بروتوكول I2C او SPI . لكن قمت باختبار شكل الخرج على بروتيوس و نجحت لكن ليس عندى وحدة الليدات للتجربة , ارجو من يستطيع تجربتها يطمنى على شغلها و طريقة توصيلها سهلة و موضحة بالداتا شيت لل IC .
البروسيسور : ATMEGA 8 or 16 - التردد 8mhz مذبذب داخلى
برنامج : ميكروسي
من اراد سؤال او اراد التعديل عليه او ينتفع به فهو ملك لكم ...
كود:
// NOTE : when color array start with elemnt =255 it makes error in I2C. so make it =254 .
// But in spi commu. no errors
// led addressable control by ic WS2801
// processor ATMEGA any one , pins==> SDA , SCL , PULL UPpins by 10k resistor
//******************************************************************
char White[]={254,255,255} , Red[]= {254,0,0} , Green[]={0,128,0} , Blue[]={0,0,255} ,Yellow[]={254,255,0} , Lime[]= {0,255,0} ;
char pink[]= {254,20,147} , violet[]= {138,43,226} , aqua[]= {0,255,255} , orange[]= {254,165,0} , chocolate[]= {210,105,30} ;
const int total_led = 3; // total leds
//******************************************************************
void F_L ( char RED ,char GREEN ,char BLUE){
int k ;
TWI_Start();
for( k=1 ; k<=total_led ; k++){
TWI_Write(RED);
TWI_Write(GREEN);
TWI_Write(BLUE);
DELAY_ms(300);
}
TWI_Stop();
}
//******************************************************************
void all (char RED ,char GREEN ,char BLUE){
int k ;
TWI_Start();
for( k=1 ; k<=total_led ; k++){
TWI_Write(RED);
TWI_Write(GREEN);
TWI_Write(BLUE);
}
TWI_Stop();
}
//******************************************************************
void L_F (char RED ,char GREEN ,char BLUE , char MOV_RED ,char MOV_GREEN, char MOV_BLUE){
int k , m ,n ;
all(RED,GREEN,BLUE);
delay_ms(300);
TWI_Start();
for(k=1 ; k<=total_led ; k++){
for(m=1 ; m<=k ; m++){ TWI_Write( MOV_RED); TWI_Write( MOV_GREEN); TWI_Write( MOV_BLUE);}
for( n=1 ; n<=(total_led-k) ; n++){
TWI_Write(RED);
TWI_Write(GREEN);
TWI_Write(BLUE);
}
delay_ms(300);
}
TWI_Stop();
}
//******************************************************************
void arms (char arms_num ,char RED,char GREEN , char BLUE){
char arm_len[]={1,2,3} ; // arm_len= no. of led/arm , arms_num= no. of total arms = no. of array element .
char k , m , LEN ;
TWI_Start();
for(m=0 ; m<arms_num ; m++){
LEN=arm_len[m];
for(k=1; k<=LEN; k++){
TWI_Write(RED);
TWI_Write(GREEN);
TWI_Write(BLUE);
}
}
TWI_Stop();
}
//******************************************************************
void main() { TWI_Init(100000);
F_L(chocolate[0],chocolate[1],chocolate[2]);
all(orange[0],orange[1],orange[2]); delay_ms(500);
L_F(white[0],white[1],WHITE[2],GREEN[0],GREEN[1],GREEN[2]);
ARMS(3,pink[0],pink[1],pink[2]) ;
// SPI1_init_advanced( _SPI_MASTER , _SPI_FCY_DIV4 , _SPI_CLK_LO_LEADING ) ;
// SPI1_WRITE(ORANGE[0]);SPI1_WRITE(ORANGE[1]);SPI1_WRITE(ORANGE[2]);
}
و الله الموفق و المستعان
اول مراحل تغيير النفس هو تغيير افكارها
|