die asuro bücher nutzen die lib von der cd. tie timebase ist da nicht 36khz, sondern 72 khz was alles zeitkritischen dinge versuat
Druckbare Version
die asuro bücher nutzen die lib von der cd. tie timebase ist da nicht 36khz, sondern 72 khz was alles zeitkritischen dinge versuat
hi damaltor,
ich habe jetzt die ausgabe in der funktion geändert, schlau werde ich daraus nicht...
die ausgabe:Code:void batt_abfrage(void)
{
int batt_1,batt_2, batt_3, spannung;
float spannung_1;
batt_1=Batterie();
batt_2=Batterie();
batt_3=Batterie();
if (batt_1<(batt_2-batt_2/100)) batt_1=Batterie();
if (batt_2<(batt_3-batt_3/100)) batt_2=Batterie();
if (batt_3<(batt_1-batt_1/100)) batt_3=Batterie();
spannung_1=(batt_3 + batt_2 + batt_1)/535.1;
spannung=(batt_3 + batt_2 + batt_1)*100/535;
SerWrite("\r\n batt_1: ",11);
PrintInt(batt_1);
SerWrite(" batt_2: ",9);
PrintInt(batt_2);
SerWrite(" batt_3: ",9);
PrintInt(batt_3);
SerWrite(" spannung: ",11);
PrintInt(spannung);
SerWrite(" spannung_1: ",13);
PrintFloat(spannung_1, 1, 5);
}
wie erkenne ich woher bei der spannung die 37, bzw. 36 kommen? ich dachte es werden dann (auch wenn evtl. di falschen) aber immerhin ein paar stellen von dem float spannung_1 ausgegeben? ](*,)Code:batt_1: 941 batt_2: 940 batt_3: 940 spannung: 37 spannung_1: 5.27191
batt_1: 941 batt_2: 941 batt_3: 941 spannung: 37 spannung_1: 5.27564
batt_1: 940 batt_2: 940 batt_3: 941 spannung: 37 spannung_1: 5.27191
batt_1: 941 batt_2: 941 batt_3: 941 spannung: 37 spannung_1: 5.27564
batt_1: 941 batt_2: 941 batt_3: 941 spannung: 37 spannung_1: 5.27564
batt_1: 941 batt_2: 940 batt_3: 941 spannung: 37 spannung_1: 5.27378
batt_1: 940 batt_2: 941 batt_3: 940 spannung: 37 spannung_1: 5.27191
batt_1: 941 batt_2: 941 batt_3: 940 spannung: 37 spannung_1: 5.27378
batt_1: 940 batt_2: 939 batt_3: 940 spannung: 36 spannung_1: 5.26817
batt_1: 940 batt_2: 940 batt_3: 940 spannung: 37 spannung_1: 5.27004
batt_1: 939 batt_2: 940 batt_3: 940 spannung: 36 spannung_1: 5.26817
3*941*100=282300!Zitat:
int batt_1,batt_2, batt_3, spannung;
...
spannung=(batt_3 + batt_2 + batt_1)*100/535;
(282300-4*65536)/535=(282300-242144)/535=37,67476635514018691588785046729
spannung muss float sein
[Edit]
ach Quatsch, die Formel ist falsch:
spannung=(batt_3 + batt_2 + batt_1)*10/535;
3*941*10/535=28230/535=52(,76635514018691588785046728972)
mic
hmm da stimmt irgendwas nich so ganz... so hab ich das nicht gemeint =)
versuch mal: spannung=(batt_3 + batt_2 + batt_1)*1000/5351;
das sollte 2 kommastellen ergeben. das ziel war, von der 535.1 das komma zu entfernen, da wir jetzt durch 5351 teilen würde das ergebnis nur 1/10 der wirklcihen spannung darstellen. also nur zahlen hinter dem komma, das wäre nicht das ziel gewesen da die komma stellen ja abgeschnitten werden.
wenn wir die zahl jedoch vorher mit 1000 multiplizieren, bekommen wir anstatt 0.527 jetzt 527, also 5,27 volt.
batt_1 = 941
batt_2 = 941
batt_3 = 940
batt_1+2+3 = 2822
2822*1000 = 2822000 (...hier könnte ganz evtl ein problem mit dem int überlauf entstehen... probiers trotzdem mal)
2822000 / 5351 = 527.37806
dabvei wird 527 gespeichert, also 5.27 volt. das kannst du dann entweder bei der ausgabe beachten dass an passender stelle ien punkt eingefügt wird, oder du arbeitest einfach mit diesem wert und sparst dir den umstand.
Natürlich gibt die erste Version mit Faktor 100 einen Int-Überlauf, habe ich doch oben vorgerechnet. Die Formel für spannung sieht so aus:
Es sollte aber so aussehen:Code:spannung_1=(batt_3 + batt_2 + batt_1)/535.1;
spannung=(batt_3 + batt_2 + batt_1)*100/535;
Zähler und Nenner mal 10, dann stimmts auch mit dem Komma im Ergebniss...Code:spannung_1=(batt_3 + batt_2 + batt_1)/535.1;
spannung=(batt_3 + batt_2 + batt_1)*10/5351;
Ach, ich Depp, ihr wollt doch gar keine Kommas haben, blöd wenn man nicht alles liest. Sorry. Wäre vielleicht das die richtige Lösung:
micCode:spannung_1=(batt_3 + batt_2 + batt_1)/535.1;
spannung=(int) spannung_1*100;
die erst elösung hilft nicht, weil keine kommastellen gewollt sind, ist wahr. und die zweite lösung hilft auch nicht, wel in der zwischenvariable spannung_1 trotzdem wieder kommas sind =) es geht darum die floats völlig zu vermeiden. mehr ideen? das problem ist wenn man erst teilt und dann mit 100 multipliziert ohne floats zu nutzen, bekommt man nur ne null... :(
Hallo inka,
das LCD aus dem Asuro Buch II funktioniert erst, wenn man im Header FileZitat:
was habe ich bei der initialisierung des lcd vergessen? Zumindest in der lcd.c habe ich weiter nichts gefunden?
i2c.h die beiden Defines für den I2C Bus folgendermaßen ändert.
De AsuroLib und die Programme müssen dann natürlich anschließend neu übersetzt werden.Code:#define SDA PC2
#define SCL PC3
hi m.a.r.v.i.n.
damit habe ich wohl immer noch probleme: mit AVR studio heisst "neu übersetzen":Zitat:
Zitat von m.a.r.v.i.n
- ändern
- rebuilt all
- flash...???
ausser dass die status-led beim starten von asuro von gelb in grün wechselt passiert aber leider nix :-(
rebuild all =) alle neu aufbauen
ok,
hatte noch einen fehler drinn, immerhin kann ich jetzt die hintergrundbeleuchtung des diaplays einschalten, ausschalten geht komischerweise mit "BacklightLCD(OFF);" nicht :-(