Hi!
Ich habe max. sieben AVR µC und überwache die anliegende Spannung mit
Hilfe des Bandgap-Wertes der µC. Sechs der µC senden per Funk ihren
ADC-Wert der Spannungsüberwachung an den siebenten µC der sozusagen die
Zentrale bildet.
Jetzt ist es so, daß diese Bandgap-Spannung sehr stark differiert von µC
zu µC und ich muß für jeden µC seine spezielle Bandgap-Spannung in die
Berechnung mit einbeziehen.
Ich habe mich außerdem an den Artikel Festkommaarithmetik gehalten damit
ich nicht mit float-Variablen arbeiten muß und habe von dort den Tipp
übernommen Dinge, soweit sie zu berechnen sind mal zu berechnen und als
Konstante abzulegen.
Das führt bei mir zu folgender Codezeile:
1 | const uint32_t spannungsfaktor = ((uint32_t)ADC_RESOLUTION*(uint32_t)BANDGAP_ZENTRALE);
|
Wenn ich jetzt alle anderen Bandgap-Werte auch als Const abspeichere
etwa in der Form
1 | const uint32_t spannungsfaktor[7];
|
2 | spannungsfaktor[0] = ((uint32_t)ADC_RESOLUTION*(uint32_t)BANDGAP_ZENTRALE);
|
3 | ...
|
frage ich mich:
1. Darf man Array-Werte überhaupt zu Konstanten erklären?
2. Ist es gescheit so viele uint32 Variablen zu definieren? Ich denke,
da wird der µC bald anfangen eine Menge hin und her zu schieben.
Alternativ könnte ich die ganze Berechnung samt Umwandlung in einen
String auf den einzelnen µC machen lassen und ich übertrage dann ein
Array bestehend aus 12Byte.
Zeit hätten die einzelnen µC genug. In der Zentrale kommt doch einiges
an Code zusammen da die Zentrale herausfinden muß welcher Datenstrom von
welchem µC kommt, die Umrechnungen der ADC-Werte und Umwandlungen in
String und die Anzeige fürs LCD aufbereiten.
Ich sehe es aber als Nachteil an 12 Bytes zu übertragen statt nur zwei
Bytes für den ADC-Wert. Wie ist da das typische Vorgehen in so einem
Fall? So wenig Daten wie möglich übertragen und alles was geht in der
"Zentrale" berechnen oder lieber die Last verteilen?
LG
Ernst