Hey Leute, ich habe ein Wahnsinnig gutes Tutorial über C gefunden und mich da gestern mal eingearbeitet. Hier mal der Link http://www.peacesoftware.de/ckurs1.html
Jetzt wollte ich ein Programm schreiben. Und zwar eine Art Mini POV aus 5 LED´s. Quasi sowas hier:
http://projects.dimension-x.net/pictures/pov/pov_hello_sm.jpg
Leider muss das ganze aus Platzgründen auf nen Attiny13 passen. Der code steht soweit,ich kann ihn aber nicht testen weil er zu groß ist für den Tiny. Und das liegt nur an der "Zeichen" Funktion. Hier mal der Code
Nach dem Compilieren bekomm ich
Program: 4228 bytes (412.9% Full)
(.text + .data + .bootloader)
Data: 280 bytes (437.5% Full)
(.data + .bss + .noinit)
angezeigt. Das heißt mein code ist leider vier mal zu groß. Es liegt wahrscheinlich an den Case anweisungen. Aber wenn ich die durch IF ersetzte ist er genauso groß.
Hat da jemand ne Idee?
Vielen Dank schonmal, GreenArrow
Jetzt wollte ich ein Programm schreiben. Und zwar eine Art Mini POV aus 5 LED´s. Quasi sowas hier:
http://projects.dimension-x.net/pictures/pov/pov_hello_sm.jpg
Leider muss das ganze aus Platzgründen auf nen Attiny13 passen. Der code steht soweit,ich kann ihn aber nicht testen weil er zu groß ist für den Tiny. Und das liegt nur an der "Zeichen" Funktion. Hier mal der Code
Code:
#include <avr/io.h>
#include <util/delay.h>
uint8_t verzoegerung = 3;
uint8_t verzoegerung2 = 6;
uint8_t a[14]={1,1,1,1,1,1,0,1,0,1,1,1,1,1,1};
int main (void) {
DDRB = (1 <<DDB0)| (1<<DDB1)| (1<<DDB2) | (1<<DDB3) | (1<<DDB4); //PB0-PB4 als Ausgang
zeichen(a);
return 0;
}
void zeichen(uint8_t eingabe_array[15])
{
uint8_t x,y;
// erste Reihe
for (y=0; y<5; y++)
{
x==eingabe_array[y];
switch(y)
{
case 0:PORTB |= (x << PB0);break;
case 1:PORTB |= (x << PB1);break;
case 2:PORTB |= (x << PB2);break;
case 3:PORTB |= (x << PB3);break;
case 4:PORTB |= (x << PB4);break;
}
}
_delay_ms(verzoegerung);
// zweite Reihe
for (y=5; y<10; y++)
{
x==eingabe_array[y];
switch(y)
{
case 5:PORTB |= (x << PB0);break;
case 6:PORTB |= (x << PB1);break;
case 7:PORTB |= (x << PB2);break;
case 8:PORTB |= (x << PB3);break;
case 9:PORTB |= (x << PB4);break;
}
}
_delay_ms(verzoegerung);
// dritte Reihe
for (y=10; y<15; y++)
{
x==eingabe_array[y];
switch(y)
{
case 10:PORTB |= (x << PB0);break;
case 11:PORTB |= (x << PB1);break;
case 12:PORTB |= (x << PB2);break;
case 13:PORTB |= (x << PB3);break;
case 14:PORTB |= (x << PB4);break;
}
}
_delay_ms(verzoegerung);
// nach jedem Buchstaben kurz warten
_delay_ms(verzoegerung2);
}
Nach dem Compilieren bekomm ich
Program: 4228 bytes (412.9% Full)
(.text + .data + .bootloader)
Data: 280 bytes (437.5% Full)
(.data + .bss + .noinit)
angezeigt. Das heißt mein code ist leider vier mal zu groß. Es liegt wahrscheinlich an den Case anweisungen. Aber wenn ich die durch IF ersetzte ist er genauso groß.
Hat da jemand ne Idee?
Vielen Dank schonmal, GreenArrow