ich hab mir ein Hex-bot gebaut. ein Roboter mit 6 Beinen und je 3
servos.
die servos werden über ein Servo-Bord(slave) angesteuert, welches über
I2C(TWI) mit einem ATMega32(Master) verbunden ist.
die sollwinkel der servos stehen in ein array von
1 | struct movement_struckt{ float pos[21];uint8_t step;}; // move.h
|
wobei pos die winkel aller ansteuerbaren servos enthält und sep die
Wartezeit ist bis die servos die Position erreichen. siehe main.c
Anfang
die Funktion
1 | int movement(const struct movement_struckt *move_x);
|
führt alle Bewegungen eines solchen array nacheinander aus. siehe move.c
mein Problem: die arrays
1 | const struct movement_struckt move_up[6];
|
2 | const struct movement_struckt move_down[6];
|
lassen sich beide richtig ausführen, wenn ich jeweils das andere array
auskommentiere. wenn ich jedoch beide in meinem Programm habe und sie
hintereinander ausführen möchte, spielen alle servos verrückt und fahren
sogar an Positionen außerhalb meiner programmierten Begrenzung
ich habe zuerst vermutet das der Speicher voll ist. habe es mir daher
mit avr-size angeschaut:
1 | ...:~/projekte/hexbot$ avr-size --mcu=atmega32 -C bin/Release/hexbot.elf
|
2 | AVR Memory Usage
|
3 | ----------------
|
4 | Device: atmega32
|
5 |
|
6 | Program: 7152 bytes (21.8% Full)
|
7 | (.text + .data + .bootloader)
|
8 |
|
9 | Data: 1450 bytes (70.8% Full)
|
10 | (.data + .bss + .noinit)
|
daraus entnehme ich das noch platz ist.
Hat jemand eine Idee wo mein Fehler liegt? ich komme echt nicht weiter.