Hallo,
ich möchte Elko-Kapazitäten mit einem µC messen. Dabei wird der Elko
über einen bekannten Ladewiderstand geladen und nach einer bestimmten
Zeit wird die Spannung mit Hilfe des ADC gemessen. Die gemessene
Spannung muss dann auf die Kapazität umgerechnet werden.
Ich benutze AVR Studio 4 und einen Atmega 644, die math.h habe ich
eingebunden.
Mein Problem ist, dass ich immer Fehler mit den Datentypen bekomme.
Ich habe das selbe mal in VB ohne Probleme gemacht, dort lautete meine
Formel:
C = (-t_load / (resistor * (Math.Log(1 - c_mess / V_real)))) * 1000000
Das Ergebnis wurde in µF angezeigt.
Zur Zeit habe ich mir in Excel eine Tabelle angefertigt, und diese als
Datenarray eingebunden. Das soll aber nur die Notlösung sein, Ich würde
lieber die Kapazität direkt im µC berechnen.
Wie müssen meine Datentypen deklariert sein, und wie muss die Formel
dann geschrieben werden?
vielen Dank für eure Bemühungen im vorraus,
Grüße
Michael
saxosun schrieb:> Mein Problem ist, dass ich immer Fehler mit den Datentypen bekomme.
Das wird an deiner Variablendeklaration oder an deiner Umsetzung der
Formel liegen. Guck mal in Zeile 42.
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(floatsisf.o): In function `__floatunsisf':
2
(.text.avr-libc.fplib+0x0): multiple definition of `__floatunsisf'
3
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_usi_to_sf.o):c:\avrdev\gcc\build-avr\avr\avr5\libgcc/../../.././gcc/fp-bit.c:1391: first defined here
saxosun schrieb:> multiple definition of `__floatunsisf'
Und was sagt uns diese Fehlermeldung?
Es liegt nicht an den Variablen, sondern an dem, was du geschrieben
hast.
Hast du die math.h vielleicht mehrfahr eingefügt?
Vielleicht dadurch, dass eine andere header-Datei eingefügt hast?
Ohne deinen Quellcode, wird niemand außer dir den Fehler finden können.
Hallo,
ich habe den Code jetzt soweit reduziert, dass die Fehlermeldung immer
noch erscheint. Der Code macht natürlich keinen Sinn mehr.
Setze ich z.B. in _delay_ms(v_s) einen festen Wert ein, verschwindet die
Fehlermeldung. Genauso wenn ich den Code aus der Funktion get_in direkt
in die mainloop einfüge, oder um eine Bedingung reduziere....
Ich verstehe das Problem leider nicht, und würde mich über Hilfe freuen.
Grüße
Michael
saxosun schrieb:> Setze ich z.B. in _delay_ms(v_s) einen festen Wert ein, verschwindet die> Fehlermeldung.
Dann soltest du dir mal angucken, wie "_delay_ms()" funktioniert.
1
t_fk=1;
Wenn ich das richtig interpretiere, steht da:
1
SBIT(Flag,0)=1;
ist wohl Blödsinn, oder?
"_delay_ms()" mit einem Char aufzurufen fällt unter die gleiche
Kategorie...
Also,
wenn ich bei _ms_delay() einen Übergabewert als double einsetze
verschwindet die Fehlermeldung, das hat geholfen, danke.
Aber warum funktioniert es dann ohne die log Berechnung, und was
bedeutet die Fehlermeldung?
Und, warum ist es ein Problem (Blödsinn), wenn ich mir ein vorher
deklariertes Flag in einer Bedingung auf 1 setze?
Grüße
Michael