Gast
#4704953
Hallo zusammen :) // Ich bin neu beim programmieren ca. 2 Wochen... Zusammenfassung: Ich habe mich entschieden für mein Berufskollege in MSR einen 5x5x5 würfle zu bauen dazu habe ich einen Atmega32 benutz, ich hatte leider keinen Kristall mehr zur hand also muss ich ihn auf dem inneren 8Mhz kern takten lassen. Problem : Hardware hat keinen Problem! Es ist nur die Software Ich habe jetzt 4 Tage lang an dem Programm gearbeitet jedoch funktioniert sie nicht korrekt aber sie sollte Theoretisch korrekt Funktionieren... Ich lasse euch einfach entscheiden ob ich was falsch gemacht habe oder nicht Ich danke euch für die Hilfe im Voraus!!!!! CODE: // aTmega32 5x5x5 LED-Cube Designed By Nikan Esmailpour /* [5] *21*22*23*24*25* *04*05*29*24*19* [4] *16*17*18*19*20* *03*06*28*23*18* pattern-> [3] *11*12*13*14*15* pinOut-> *02*07*27*22*17* [2] *06*07*08*09*10* *01*31*26*21*16* [1] *01*02*03*04*05* *00*30*25*20*15* ^ Array > [1][2][3][4][5] layer0 = 8 layer1 = 9 layer2 = 10 layer3 = 11 layer4 = 12 button1 = 13 button2 = 14 */ #include "TimerOne.h" //Setting The Counter To Zero/////////////////////////////////////// unsigned long cntr = 0; //Defining layerPattern To The First Layer////////////////////////// unsigned short layerPattern = 0x1; //Setting All The Led's Of All The Layers To Zero/////////////////// volatile unsigned short ledLayer0 = 0b0000000000000000000000000; volatile short ledLayer1 = 0b0000000000000000000000000; volatile short ledLayer2 = 0b0000000000000000000000000; volatile short ledLayer3 = 0b0000000000000000000000000; volatile short ledLayer4 = 0b0000000000000000000000000; //Defining All The Led's To Their Corresponding Pins//////////////// #define allOff 0b0000000000000000000000000 #define led1 0b00000001 //PORTB #define led2 0b01000000 //PORTA #define led3 0b00000010 //PORTA #define led4 0b00010000 //PORTC #define led5 0b10000000 //PORTC #define led6 0b00000010 //PORTB #define led7 0b10000000 //PORTA #define led8 0b00000100 //PORTA #define led9 0b00100000 //PORTC #define led10 0b00000001 //PORTC #define led11 0b00000100 //PORTB #define led12 0b10000000 //PORTB #define led13 0b00001000 //PORTA #define led14 0b01000000 //PORTC #define led15 0b00000010 //PORTC #define led16 0b00001000 //PORTB #define led17 0b01000000 //PORTB #define led18 0b00010000 //PORTA #define led19 0b10000000 //PORTC #define led20 0b00000100 //PORTC #define led21 0b00010000 //PORTB #define led22 0b00100000 //PORTB #define led23 0b00100000 //PORTA #define led24 0b00000001 //PORTA #define led25 0b00001000 //PORTC #define layer0 0x1 //PORTD #define layer1 0x2 //PORTD #define layer2 0x4 //PORTD #define layer3 0x8 //PORTD #define layer4 0x10 //PORTD #define button1 0b00100000 //PORTD #define button2 0b01000000 //PORTD //Defining The Matrix/////////////////////////////////////////////// int led[5][5]{ { led1, led6, led11, led16, led21 }, { led2, led7, led12, led17, led22 }, { led3, led8, led13, led18, led23 }, { led4, led9, led14, led19, led24 }, { led5, led10, led15, led20, led25 }, }; void setup(){ //Initializing The Interrupt////////////////////////////////////////////// Timer1.initialize(50000000); Timer1.attachInterrupt(IsrLayerShift, 10); // (microsecond) //Disabling The JTAG////////////////////////////////////////////////////// MCUCSR|= (1<<JTD); MCUCSR|= (1<<JTD); //Initializing The Inputs And Outputs///////////////////////////////// DDRA = 0xFF; DDRB = 0xFF; DDRC = 0xFF; DDRD = 0x9F; } //Switching The Layers From 0 To 4////////////////////////////////// void IsrLayerShift(){ if(layerPattern == layer0){ PORTA = ((ledLayer0 >> 5) & led2) | ((ledLayer0 << 1) & led3) | ((ledLayer0 >> 1) & led7) | ((ledLayer0 << 5) & led8) | ((ledLayer0 << 9) & led13) | ((ledLayer0 << 13) & led18) | ((ledLayer0 << 17) & led23) | ((ledLayer0 << 23) & led24); PORTB = ((ledLayer0 << 0) & led1) | ((ledLayer0 << 4) & led6) | ((ledLayer0 << 8) & led11) | ((ledLayer0 << 4) & led12) | ((ledLayer0 << 12) & led16) | ((ledLayer0 << 10) & led17) | ((ledLayer0 << 16) & led21) | ((ledLayer0 << 16) & led22); PORTC = ((ledLayer0 >> 1) & led4) | ((ledLayer0 >> 3) & led5) | ((ledLayer0 << 3) & led9) | ((ledLayer0 << 9) & led10) | ((ledLayer0 << 7) & led14) | ((ledLayer0 << 11) & led19) | ((ledLayer0 << 17) & led20) | ((ledLayer0 << 21) & led25); PORTD = ((ledLayer0 << 13) & led15); layerPattern = layerPattern << 1; } else if(layerPattern == layer1){ PORTA = ((ledLayer1 >> 5) & led2) | ((ledLayer1 << 1) & led3) | ((ledLayer1 >> 1) & led7) | ((ledLayer1 << 5) & led8) | ((ledLayer1 << 9) & led13) | ((ledLayer1 << 13) & led18) | ((ledLayer1 << 17) & led23) | ((ledLayer1 << 23) & led24); PORTB = ((ledLayer1 << 0) & led1) | ((ledLayer1 << 4) & led6) | ((ledLayer1 << 8) & led11) | ((ledLayer1 << 4) & led12) | ((ledLayer1 << 12) & led16) | ((ledLayer1 << 10) & led17) | ((ledLayer1 << 16) & led21) | ((ledLayer1 << 16) & led22); PORTC = ((ledLayer1 >> 1) & led4) | ((ledLayer1 >> 3) & led5) | ((ledLayer1 << 3) & led9) | ((ledLayer1 << 9) & led10) | ((ledLayer1 << 7) & led14) | ((ledLayer1 << 11) & led19) | ((ledLayer1 << 17) & led20) | ((ledLayer1 << 21) & led25); PORTD = ((ledLayer1 << 13) & led15); layerPattern = layerPattern << 1; } else if(layerPattern == layer2){ PORTA = ((ledLayer2 >> 5) & led2) | ((ledLayer2 << 1) & led3) | ((ledLayer2 >> 1) & led7) | ((ledLayer2 << 5) & led8) | ((ledLayer2 << 9) & led13) | ((ledLayer2 << 13) & led18) | ((ledLayer2 << 17) & led23) | ((ledLayer2 << 23) & led24); PORTB = ((ledLayer2 << 0) & led1) | ((ledLayer2 << 4) & led6) | ((ledLayer2 << 8) & led11) | ((ledLayer2 << 4) & led12) | ((ledLayer2 << 12) & led16) | ((ledLayer2 << 10) & led17) | ((ledLayer2 << 16) & led21) | ((ledLayer2 << 16) & led22); PORTC = ((ledLayer2 >> 1) & led4) | ((ledLayer2 >> 3) & led5) | ((ledLayer2 << 3) & led9) | ((ledLayer2 << 9) & led10) | ((ledLayer2 << 7) & led14) | ((ledLayer2 << 11) & led19) | ((ledLayer2 << 17) & led20) | ((ledLayer2 << 21) & led25); PORTD = ((ledLayer2 << 13) & led15); layerPattern = layerPattern << 1; } else if(layerPattern == layer3){ PORTA = ((ledLayer3 >> 5) & led2) | ((ledLayer3 << 1) & led3) | ((ledLayer3 >> 1) & led7) | ((ledLayer3 << 5) & led8) | ((ledLayer3 << 9) & led13) | ((ledLayer3 << 13) & led18) | ((ledLayer3 << 17) & led23) | ((ledLayer3 << 23) & led24); PORTB = ((ledLayer3 << 0) & led1) | ((ledLayer3 << 4) & led6) | ((ledLayer3 << 8) & led11) | ((ledLayer3 << 4) & led12) | ((ledLayer3 << 12) & led16) | ((ledLayer1 << 10) & led17) | ((ledLayer1 << 16) & led21) | ((ledLayer1 << 16) & led22); PORTC = ((ledLayer3 >> 1) & led4) | ((ledLayer3 >> 3) & led5) | ((ledLayer3 << 3) & led9) | ((ledLayer3 << 9) & led10) | ((ledLayer3 << 7) & led14) | ((ledLayer3 << 11) & led19) | ((ledLayer3 << 17) & led20) | ((ledLayer3 << 21) & led25); PORTD = ((ledLayer3 << 13) & led15); layerPattern = layerPattern << 1; } else{ PORTA = ((ledLayer4 >> 5) & led2) | ((ledLayer4 << 1) & led3) | ((ledLayer4 >> 1) & led7) | ((ledLayer4 << 5) & led8) | ((ledLayer4 << 9) & led13) | ((ledLayer4 << 13) & led18) | ((ledLayer4 << 17) & led23) | ((ledLayer4 << 23) & led24); PORTB = ((ledLayer4 << 0) & led1) | ((ledLayer4 << 4) & led6) | ((ledLayer4 << 8) & led11) | ((ledLayer4 << 4) & led12) | ((ledLayer4 << 12) & led16) | ((ledLayer4 << 10) & led17) | ((ledLayer4 << 16) & led21) | ((ledLayer4 << 16) & led22); PORTC = ((ledLayer4 >> 1) & led4) | ((ledLayer4 >> 3) & led5) | ((ledLayer4 << 3) & led9) | ((ledLayer4 << 9) & led10) | ((ledLayer4 << 7) & led14) | ((ledLayer4 << 11) & led19) | ((ledLayer4 << 17) & led20) | ((ledLayer4 << 21) & led25); PORTD = ((ledLayer4 << 13) & led15); layerPattern = layer0; } PORTD = PORTD & 0b11100000; PORTD = PORTD | layerPattern; } //Running The Images Over And Over Again//////////////////////////// void loop(){ for(cntr=0;cntr<1000;cntr++){ // Example ledLayer0 = led[][]|led[][]|led[][]|led[][]|led[][]; ledLayer1 = allOff; ledLayer2 = led[][]|led[][]|led[][]|led[][]|led[][]|led[][]|led[][]; ledLayer3 = led[][]|led[][]|led[][]|led[][]; ledLayer4 = allOff; } }