@ PcHeRo (Gast)
>Oder kann es sein das der uC zu langsam ist um beides Gleichzeitig zu
>rechnen und sich dann die Interrupts blockieren.
Glaub ich weniger. DMX ist zwar recht flott, aber der AVR ist das auch.
> eine 16 mHz Quarz habe
>ich momentan nicht zur Verfügung zum Testen.
Brauchst du erstmal nicht.
>Aber ich glaube das es ein Softwareproblem ist. Ich finde nur momentan
>keins.
Ich sehe mehrere. Zum einen sind eine Deklaratione und Definitionen der
1 | volatile uint8_t DmxField[50]; //array of DMX vals
|
2 | volatile uint8_t DmxRxField[30]; //array of DMX vals (raw)
|
in den zwei headerfiles NICHT OK. Das muss heissen
1 | extern volatile uint8_t DmxField[50]; //array of DMX vals
|
2 | extern volatile uint8_t DmxRxField[30]; //array of DMX vals (raw)
|
Damit werden die Arrays DEKLARIERT, sprich, der Typ vereinbahrt.
In die jeweiligen Dateien *.c muss dann die DEFINITION von ganz oben, wo
die Arrays wirklich im Speicher angelegt werden. Denn so wie du es jetzt
hast, werden MEHRERE Araays vom gleich Namen angelegt. Da sollte der
Compiler Warnings erzeugen.
F_OSC in mehreren Headerfiles neu definieren ist sehr schlecht. Sowas
gehört EINMAL in main.h oder so. Bei AVR GCC heisst das ausserdem F_CPU
und wird in Hz angegeben. Das sollte man nicht neu erfinden sondern so
nutzen.
MFG
Falk