Hello folks, I am building a LED Cube so far I've finished my 3x3x3 led cube and programmed it I had just 1 problem with the LED Cube... the 2kb Memory was just not enough for me it worked with 1 or 2 patterns but than it would be full after programming to about 98%. Anyways, it worked and now I wanted to build a 5x5x5 led cube I finished the schematic, the layout, etched and assembled it, but now I have just one problem with my program. I used the program for my 3x3x3 LED cube and just changed a few things. I get an error from terminal which tells me some weird things I think it has a problem with the interrupt but it is the same as the last one I used. I hope you guys can help me. Thanks for the help :D HERE IS MY PROGRAM // // main.c // AT-Mega 16/32 // LED Cube // Created by Nikan on 2015-10-01. // //############################## //#####[00][01][02][03][04]##### //#####[05][06][07][08][09]##### => LED_Layer_x = 0b[24]-[0] //#####[10][11][12][13][14]##### //#####[15][16][17][18][19]##### //#####[20][21][22][23][24]##### //############################## #include <interrupt.h> #include <io.h> #define Layer0 0b00000001 #define Layer1 0b00000010 #define Layer2 0b00000100 #define Layer3 0b00001000 #define Layer4 0b00010000 unsigned long layer_pattern = 0b00000001; // Definiert das Pattern muss mit Layer0 anfangen unsigned short cntr = 0; // Stellt counter auf 0 volatile long LED_Layer_0=0x00; // Stellt alle bits in Layer0 auf 0 volatile long LED_Layer_1=0x00; // Stellt alle bits in Layer1 auf 0 volatile long LED_Layer_2=0x00; // Stellt alle bits in Layer2 auf 0 volatile long LED_Layer_3=0x00; // Stellt alle bits in Layer3 auf 0 volatile long LED_Layer_4=0x00; // Stellt alle bits in Layer4 auf 0 //Interrupt ISR(TIMER0_COMPA_vect){ if(layer_pattern == Layer0){ //Layer0 PORTA = ((LED_Layer_0 << 6) & 0b00000001) | ((LED_Layer_0 << 4) & 0b00000010) | ((LED_Layer_0 << 12) & 0b00000100) | ((LED_Layer_0 << 10) & 0b00001000) | ((LED_Layer_0 << 8) & 0b00010000) | ((LED_Layer_0 << 6) & 0b00100000) | ((LED_Layer_0 << 4) & 0b01000000) | ((LED_Layer_0 << 12) & 0b10000000); PORTB = ((LED_Layer_0 << 0) & 0b00000001) | ((LED_Layer_0 << 0) & 0b00000010) | ((LED_Layer_0 << 0) & 0b00000100) | ((LED_Layer_0 << 0) & 0b00001000) | ((LED_Layer_0 << 0) & 0b00010000) | ((LED_Layer_0 << 4) & 0b00100000) | ((LED_Layer_0 << 2) & 0b01000000) | ((LED_Layer_0 << 0) & 0b10000000); PORTC = ((LED_Layer_0 << 11) & 0b00000001) | ((LED_Layer_0 << 11) & 0b00000010) | ((LED_Layer_0 << 11) & 0b00000100) | ((LED_Layer_0 << 11) & 0b00001000) | ((LED_Layer_0 << 21) & 0b00010000) | ((LED_Layer_0 << 21) & 0b00100000) | ((LED_Layer_0 << 21) & 0b01000000) | ((LED_Layer_0 << 21) & 0b10000000); PORTD = ((LED_Layer_0 << 13) & 0b10000000); // layer_pattern = layer_pattern <<1; } else if(layer_pattern == Layer1){ //Layer1 PORTA = ((LED_Layer_0 << 6) & 0b00000001) | ((LED_Layer_0 << 4) & 0b00000010) | ((LED_Layer_0 << 12) & 0b00000100) | ((LED_Layer_0 << 10) & 0b00001000) | ((LED_Layer_0 << 8) & 0b00010000) | ((LED_Layer_0 << 6) & 0b00100000) | ((LED_Layer_0 << 4) & 0b01000000) | ((LED_Layer_0 << 12) & 0b10000000); PORTB = ((LED_Layer_0 << 0) & 0b00000001) | ((LED_Layer_0 << 0) & 0b00000010) | ((LED_Layer_0 << 0) & 0b00000100) | ((LED_Layer_0 << 0) & 0b00001000) | ((LED_Layer_0 << 0) & 0b00010000) | ((LED_Layer_0 << 4) & 0b00100000) | ((LED_Layer_0 << 2) & 0b01000000) | ((LED_Layer_0 << 0) & 0b10000000); PORTC = ((LED_Layer_0 << 11) & 0b00000001) | ((LED_Layer_0 << 11) & 0b00000010) | ((LED_Layer_0 << 11) & 0b00000100) | ((LED_Layer_0 << 11) & 0b00001000) | ((LED_Layer_0 << 21) & 0b00010000) | ((LED_Layer_0 << 21) & 0b00100000) | ((LED_Layer_0 << 21) & 0b01000000) | ((LED_Layer_0 << 21) & 0b10000000); PORTD = ((LED_Layer_0 << 13) & 0b10000000); // layer_pattern = layer_pattern << 1; } else if(layer_pattern == Layer2){ //Layer2 PORTA = ((LED_Layer_0 << 6) & 0b00000001) | ((LED_Layer_0 << 4) & 0b00000010) | ((LED_Layer_0 << 12) & 0b00000100) | ((LED_Layer_0 << 10) & 0b00001000) | ((LED_Layer_0 << 8) & 0b00010000) | ((LED_Layer_0 << 6) & 0b00100000) | ((LED_Layer_0 << 4) & 0b01000000) | ((LED_Layer_0 << 12) & 0b10000000); PORTB = ((LED_Layer_0 << 0) & 0b00000001) | ((LED_Layer_0 << 0) & 0b00000010) | ((LED_Layer_0 << 0) & 0b00000100) | ((LED_Layer_0 << 0) & 0b00001000) | ((LED_Layer_0 << 0) & 0b00010000) | ((LED_Layer_0 << 4) & 0b00100000) | ((LED_Layer_0 << 2) & 0b01000000) | ((LED_Layer_0 << 0) & 0b10000000); PORTC = ((LED_Layer_0 << 11) & 0b00000001) | ((LED_Layer_0 << 11) & 0b00000010) | ((LED_Layer_0 << 11) & 0b00000100) | ((LED_Layer_0 << 11) & 0b00001000) | ((LED_Layer_0 << 21) & 0b00010000) | ((LED_Layer_0 << 21) & 0b00100000) | ((LED_Layer_0 << 21) & 0b01000000) | ((LED_Layer_0 << 21) & 0b10000000); PORTD = ((LED_Layer_0 << 13) & 0b10000000); // layer_pattern = layer_pattern << 1; } else if(layer_pattern == Layer3){ //Layer3 PORTA = ((LED_Layer_0 << 6) & 0b00000001) | ((LED_Layer_0 << 4) & 0b00000010) | ((LED_Layer_0 << 12) & 0b00000100) | ((LED_Layer_0 << 10) & 0b00001000) | ((LED_Layer_0 << 8) & 0b00010000) | ((LED_Layer_0 << 6) & 0b00100000) | ((LED_Layer_0 << 4) & 0b01000000) | ((LED_Layer_0 << 12) & 0b10000000); PORTB = ((LED_Layer_0 << 0) & 0b00000001) | ((LED_Layer_0 << 0) & 0b00000010) | ((LED_Layer_0 << 0) & 0b00000100) | ((LED_Layer_0 << 0) & 0b00001000) | ((LED_Layer_0 << 0) & 0b00010000) | ((LED_Layer_0 << 4) & 0b00100000) | ((LED_Layer_0 << 2) & 0b01000000) | ((LED_Layer_0 << 0) & 0b10000000); PORTC = ((LED_Layer_0 << 11) & 0b00000001) | ((LED_Layer_0 << 11) & 0b00000010) | ((LED_Layer_0 << 11) & 0b00000100) | ((LED_Layer_0 << 11) & 0b00001000) | ((LED_Layer_0 << 21) & 0b00010000) | ((LED_Layer_0 << 21) & 0b00100000) | ((LED_Layer_0 << 21) & 0b01000000) | ((LED_Layer_0 << 21) & 0b10000000); PORTD = ((LED_Layer_0 << 13) & 0b10000000); // layer_pattern = layer_pattern << 1; } else{ //Layer4 PORTA = ((LED_Layer_0 << 6) & 0b00000001) | ((LED_Layer_0 << 4) & 0b00000010) | ((LED_Layer_0 << 12) & 0b00000100) | ((LED_Layer_0 << 10) & 0b00001000) | ((LED_Layer_0 << 8) & 0b00010000) | ((LED_Layer_0 << 6) & 0b00100000) | ((LED_Layer_0 << 4) & 0b01000000) | ((LED_Layer_0 << 12) & 0b10000000); PORTB = ((LED_Layer_0 << 0) & 0b00000001) | ((LED_Layer_0 << 0) & 0b00000010) | ((LED_Layer_0 << 0) & 0b00000100) | ((LED_Layer_0 << 0) & 0b00001000) | ((LED_Layer_0 << 0) & 0b00010000) | ((LED_Layer_0 << 4) & 0b00100000) | ((LED_Layer_0 << 2) & 0b01000000) | ((LED_Layer_0 << 0) & 0b10000000); PORTC = ((LED_Layer_0 << 11) & 0b00000001) | ((LED_Layer_0 << 11) & 0b00000010) | ((LED_Layer_0 << 11) & 0b00000100) | ((LED_Layer_0 << 11) & 0b00001000) | ((LED_Layer_0 << 21) & 0b00010000) | ((LED_Layer_0 << 21) & 0b00100000) | ((LED_Layer_0 << 21) & 0b01000000) | ((LED_Layer_0 << 21) & 0b10000000); PORTD = ((LED_Layer_0 << 13) & 0b10000000); // layer_pattern = Layer0; } PORTD = PORTD & 0b01111100; // Alle bits auf 1 stellen außer die Layer bits, die müssen auf 1 sein. PORTD = PORTD | layer_pattern; // Bestimmt das es nur auf den layern wechseln soll und nirgendwo anders } //Initialising void init (void){ DDRA = 0b11111111; // (Output +) All Pins DDRB = 0b11111111; // (Output +) All Pins DDRC = 0b11111111; // (Output +) All Pins DDRD = 0b11111100; // (Output +) Pins 2-7 / Pins 0-1 Are Set As Input // Configure Timer 0 TCCR0A = (1<<WGM01); // CTC Modus TCCR0B |= (1<<CS02) | (1 << CS00); OCR0A = 20; // Allow Compare Interrupt TIMSK |= (1<<OCIE0A); // Activate Global Interrupts sei(); } // Main int main(void){ init(); while(1){ for(cntr=0;cntr<60000;cntr++){ LED_Layer_0 = 0b0000000000000000000000000; LED_Layer_1 = 0b0000000000000000000000000; LED_Layer_2 = 0b0000000000000000000000000; LED_Layer_3 = 0b0000000000000000000000000; LED_Layer_4 = 0b0000000000000000000000000; } } } HERE IS TERMINALS STATEMENT -------- begin -------- avr-gcc (GCC) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling C: main.c avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o In file included from main.c:9:0: main.c: In function 'TIMER0_COMPA_vect': main.c:29:5: warning: 'TIMER0_COMPA_vect' appears to be a misspelled signal handler [enabled by default] ISR(TIMER0_COMPA_vect){ ^ ./interrupt.h:126:10: note: in definition of macro 'ISR' void vector (void) ^ main.c: In function 'init': main.c:132:5: error: 'TCCR0A' undeclared (first use in this function) TCCR0A = (1<<WGM01); // CTC Modus ^ main.c:132:5: note: each undeclared identifier is reported only once for each function it appears in main.c:133:5: error: 'TCCR0B' undeclared (first use in this function) TCCR0B |= (1<<CS02) | (1 << CS00); ^ main.c:134:5: error: 'OCR0A' undeclared (first use in this function) OCR0A = 20; ^ main.c:137:18: error: 'OCIE0A' undeclared (first use in this function) TIMSK |= (1<<OCIE0A); ^ make: *** [main.o] Error 1
Dein io.h kommt nicht aus avr/ Das Programm ist ungefähr 20 mal so lang wie nötig. Du solltest vielleicht mal kernen, was ein Array ist und eie man es indiziert. Hoffen wir, dass die 6000er Schleife bloss ein Platzhalter ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.