Hallo
"Mehrere" ist relativ, ich spiele zur Zeit mit 12 LEDs an 4 AVR-Ports. Die "Technik" dazu wird hier ganz gut beschrieben:Wenn man mehrere LEDs ansteuern will...
http://www.josepino.com/pic_projects...ntrol_leds.jpc
Es wird dabei die Tri-State-Fähigkeit der AVR-Ausgänge genutzt. Da immer nur eine LED eingeschaltet wird ist der Strom unkritisch:
http://www.youtube.com/watch?v=ZPYhrQl-d4M
http://www.youtube.com/watch?v=r54xOzr0VDA
Das Programm dazu gibt per Interrupt ein Bitmuster aus, die ISR sieht so aus:
Nicht wirklich elegant, funktioniert aber zufriedenstellend.Code:ISR (TIMER0_COMP_vect) { static uint8_t bit=0; if((bitmuster & (1<<bit))==1){ DDRC|=SL1; PORTC|=SL1; //SL1 high DDRC|=SL2; PORTC&=~SL2; //SL2 low DDRB&=~SL4; PORTB&=~SL4; //SL4 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==2){ DDRC|=SL1; PORTC|=SL1; //SL1 high DDRB|=SL4; PORTB&=~SL4; //SL4 low DDRC&=~SL2; PORTC&=~SL2; //SL2 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==4){ DDRC|=SL1; PORTC|=SL1; //SL1 high DDRB|=SL5; PORTB&=~SL5; //SL5 low DDRC&=~SL2; PORTC&=~SL2; //SL2 off DDRB&=~SL4; PORTB&=~SL4; //SL4 off } if((bitmuster & (1<<bit))==8){ DDRC|=SL2; PORTC|=SL2; //SL2 high DDRC|=SL1; PORTC&=~SL1; //SL1 low DDRB&=~SL4; PORTB&=~SL4; //SL4 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==16){ DDRC|=SL2; PORTC|=SL2; //SL2 high DDRB|=SL4; PORTB&=~SL4; //SL4 low DDRC&=~SL1; PORTC&=~SL1; //SL1 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==32){ DDRC|=SL2; PORTC|=SL2; //SL2 high DDRB|=SL5; PORTB&=~SL5; //SL5 low DDRC&=~SL1; PORTC&=~SL1; //SL1 off DDRB&=~SL4; PORTB&=~SL4; //SL4 off } if((bitmuster & (1<<bit))==64){ DDRB|=SL4; PORTB|=SL4; //SL4 high DDRC|=SL1; PORTC&=~SL1; //SL1 low DDRC&=~SL2; PORTC&=~SL2; //SL2 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==128){ DDRB|=SL4; PORTB|=SL4; //SL4 high DDRC|=SL2; PORTC&=~SL2; //SL2 low DDRC&=~SL1; PORTC&=~SL1; //SL1 off DDRB&=~SL5; PORTB&=~SL5; //SL5 off } if((bitmuster & (1<<bit))==256){ DDRB|=SL4; PORTB|=SL4; //SL4 high DDRB|=SL5; PORTB&=~SL5; //SL5 low DDRC&=~SL2; PORTC&=~SL2; //SL2 off DDRC&=~SL1; PORTC&=~SL1; //SL1 off } if((bitmuster & (1<<bit))==512){ DDRB|=SL5; PORTB|=SL5; //SL5 high DDRC|=SL1; PORTC&=~SL1; //SL1 low DDRC&=~SL2; PORTC&=~SL2; //SL2 off DDRB&=~SL4; PORTB&=~SL4; //SL4 off } if((bitmuster & (1<<bit))==1024){ DDRB|=SL5; PORTB|=SL5; //SL5 high DDRC|=SL2; PORTC&=~SL2; //SL2 low DDRC&=~SL1; PORTC&=~SL1; //SL1 off DDRB&=~SL4; PORTB&=~SL4; //SL4 off } if((bitmuster & (1<<bit))==2048){ DDRB|=SL5; PORTB|=SL5; //SL5 high DDRB|=SL4; PORTB&=~SL4; //SL4 low DDRC&=~SL1; PORTC&=~SL1; //SL1 off DDRC&=~SL2; PORTC&=~SL2; //SL2 off } if(bit<11) bit++; else bit=0; }
Gruß
mic







Zitieren

Lesezeichen