Veranstaltungsreihe/Mikrocontroller Workshop: Unterschied zwischen den Versionen
Aus LaborWiki
Tixiv (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
|||
Zeile 172: | Zeile 172: | ||
Wenn die mitleren 4 LED's nicht gehen, dann liegt das wahrscheinlich daran, dass das jtag debugging aktiv ist, was diese 4 Pins benutzt. Um das aus zu schalten kann man uisp den Parameter --wr_fuse_h=0xD9 geben. Achtung! Setzten der Fuses auf dumme Werte kann den Controller unbrauchbar machen - also nur verstellen, wenn ihr wisst, was ihr tut!!! | Wenn die mitleren 4 LED's nicht gehen, dann liegt das wahrscheinlich daran, dass das jtag debugging aktiv ist, was diese 4 Pins benutzt. Um das aus zu schalten kann man uisp den Parameter --wr_fuse_h=0xD9 geben. Achtung! Setzten der Fuses auf dumme Werte kann den Controller unbrauchbar machen - also nur verstellen, wenn ihr wisst, was ihr tut!!! | ||
==Demo Programm== | |||
Hier der Quelltext fr das Demo Programm: | |||
<nowiki> | |||
//This is a simple Demo for the Labor Board. | |||
//It displays 2 different light patterns on the LEDs, | |||
//and allows the pattern to be selected, and the speed to be controled | |||
//with the 4 keys. | |||
#include <inttypes.h> | |||
#include <avr/io.h> | |||
int | |||
main (void) | |||
{ | |||
DDRB = 0; //Port B all inputs | |||
PORTB = 0x0F; //Internal Pullups on on key inputs | |||
DDRC = 0xFF; //Port C all outputs | |||
PORTC = 0x01; //1 LED on to start of Patterns | |||
int x, delay=10000; char mode=0, ud=0; | |||
for ( ;; ){ //for ever | |||
//this is a time delay loop | |||
for(x=0; x< delay; x++){ | |||
//The volatile qualifier tells the compiler not to optimize | |||
//it away. | |||
volatile int y = 0; | |||
}; | |||
if(!mode){ | |||
//knight rider mode | |||
switch (ud){ | |||
case 0: //shift light left | |||
if( (PORTC<<=1) == 0x80 ){ //until bit7 is reached | |||
ud = 1; | |||
}; | |||
break; | |||
case 1: //shift bit right | |||
if( (PORTC>>=1) == 0x01 ){ //until bit0 is reached | |||
ud = 0; | |||
}; | |||
break; | |||
}; | |||
}else{ | |||
//scroll mode | |||
switch (ud){ | |||
case 0: | |||
PORTC|=(PORTC<<1);//shift additional ones in from left | |||
if(PORTC & 0x80) //until bit7 is reached | |||
ud = 1; | |||
break; | |||
case 1: | |||
PORTC<<=1; //shift zeros in | |||
if (PORTC == 0){//until all zeros | |||
ud = 0; | |||
PORTC = 0x01;//start over | |||
} | |||
break; | |||
}; | |||
} | |||
switch(PINB&0x0f){ | |||
case 0x0E: //Button 1 pressed | |||
if (delay<30000){ | |||
delay += 100; | |||
} | |||
break; | |||
case 0x0D: //Button 2 pressed | |||
if (delay>1000){ | |||
delay -= 100; | |||
} | |||
break; | |||
case 0x0B: //Button 3 pressed | |||
mode = 0; | |||
break; | |||
case 0x07: //Button 4 pressed | |||
mode = 1; | |||
break; | |||
}; | |||
}; | |||
} | |||
</nowiki> | |||
[[Category:Veranstaltungen]] | [[Category:Veranstaltungen]] |