Forum: Mikrocontroller und Digitale Elektronik Excel-Tabelle als Voltmeter, STK500, Atmega88


von Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Hi Jungs

erstmal wünsche ich euch alle ein frohes neues Jahr

zu meinem Problem, ich versuche über den ersten  analog- digital 
wandlerkanal eine Spannung umwandlen, soweit so gut.wenn ich versuche 
nun die  spannung an der Excel Tabelle weiterzugeben klappt das 
überhaupt nicht. Das Programm habe ich schon auf mein Atmega88 
gespeichert die rx232 schnittstelle ist mit PD0:1 auf dem Stk500 
verbunden. nun wenn ich die excel tabelle starte kommt entweder die 
Fehlermeldung " die Methode PortOpen für das Objekt 'IMDComm' ist 
fehlgeschlagen. Oder die Meldung "die Methode input für das Objekt 
'IMDComm'ist fehlgeschlagen "

wenn ich versuche die beiden Meldungen zu überspringen in visualbasic, 
kriege ich am ende 2 euro zeichen als Wert :-)

ich wäre euch sehr sehr dankbar, wenn ihr mir hilft, denn allein komm 
ich wirklich nicht weiter.
PS: C-code und Excel-Tabelle als Anhang

Danke im Voraus

von Achim M. (minifloat)


Lesenswert?

Hi

Du hast ein "return(result);" am ende deiner Wandelfunktion vergessen.

Was mit der Excel-Tabelle nicht stimmt, kann ich so nicht sagen.

Dann Teste das ganze mal mit einem Terminalprogramm wie zum Beispiel 
Hyperterminal, minicom...

Und bitte hier über Erfolg/Mißerfolg berichten.

mfg mf

von Sascha W. (sascha_w)


Angehängte Dateien:

Lesenswert?

Anfänger schrieb:
> nun wenn ich die excel tabelle starte kommt entweder die
> Fehlermeldung " die Methode PortOpen für das Objekt 'IMDComm' ist
> fehlgeschlagen. Oder die Meldung "die Methode input für das Objekt
> 'IMDComm'ist fehlgeschlagen "

stammt die Tabelle von Dir?
evl. fehlen bei dir die benötigten ActivX Bibliotheken für die 
COM-Funktionen, wenn ich die Tabelle öffne siehts so wie im Anhang aus.

Sascha

von Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jungs
sorry dass ich erst heute zurückschreibe, eine Erkältung hat mich 
erwischt.

ich habe es nun hingekrigt mit dem Hyperterminal die werte zu lesen. als 
nächster Schritt möchte ich gerne ein Spannungswert an den Hyperterminal 
übergeben . Die Umrechnnungen, die im  Tutorail stehen, habe ich 
übernommen, nund kriege ich kommische werte villeicht kann jemand mich 
erlösen, denn ich find leider kein Fehler. am Eingang habe ich 1v 
Spannung eingestellt, nun möchte ich am Rs232 ungefähr 1 V lesen

Anhang. Main.c und Übertragberischt

Danke im voraus

von Karl H. (kbuchegg)


Lesenswert?

Ein C Buch wäre nicht schlecht

Das hier

test=adc0*(4,8828125 );

ist nicht die Zahl 4 Komma 8828125.
Gleitkommazahlen werden in Programmiersprachen praktisch immer wie im 
englischen Sprachgebrauch geschrieben. Mit einem Punkt und nicht mit 
einem Komma

test = adc0 * 4.8828125;

Lediglich Excel ist da eine (besch...) Ausnahme. Im deutschen Excel muss 
man ein Komma benutzen. Das hat schon für so manche Probleme gesorgt.

von Anfänger (Gast)


Lesenswert?

Hi
du hat recht, ich wiess zwar dass man in C kein Komma sondern Punkt 
schreibt. habe leider dafor mit dem Formel in Excel rumgespielt und beim 
kopieren einfügen nicht darauf geachtet, hut ab :-)

so nun die nächste Frage, ich möchte gerne soweit wie möcglich den 
Messfehler minimieren, gibts dafür irgendwelche Vorschläge!!!
ich messe folgenden

bei 3v   messe ich  2.856/2851

bei 1 v messe  ich  1.899  0.947

von Karl H. (kbuchegg)


Lesenswert?

Anfänger schrieb:

> so nun die nächste Frage, ich möchte gerne soweit wie möcglich den
> Messfehler minimieren, gibts dafür irgendwelche Vorschläge!!!

Du benutzt die interne Referenz

 ADMUX = (1<<REFS1) | (1<<REFS0);


Die hat aber
* weder exakt 2.56 Volt, sondern müsste ausgemessen werden
  (die interne Referenz ist hauptsächlich eines: stabil.
  d.h. sie verändert sich nicht.
  Das heißt aber nicht, dass sie exakt 2.56V beträgt. Sie kann
  auch 2.3V oder irgendwas anderes in diesem Bereich sein,
  solange sie nur eines tut: sich nicht verändern und stabil sein)

* noch hat sie 5V.
  Du rechnest aber offenbar mit 5V als Referenzspannung, denn
  5 / 1024 macht 0.00488.....
  und du hast ja offensichtlich das tausendfache davon genommen


Deine 'Messfehler' sind also in Wirklichkeit deine eigenen 
Programmierfehler :-)

von Anfänger (Gast)


Lesenswert?

Hi Kart
ich benutzte ein STK500 mit einem Atmega88.an Aref messe ich eine 
Spannungg von 5.041 V. Ist es nun richtig oder falsch. der AREF jumper 
auf dem STK500 ist angesteckt.

besten Dank Karl

von Karl H. (kbuchegg)


Lesenswert?

Anfänger schrieb:
> Hi Kart
> ich benutzte ein STK500 mit einem Atmega88.an Aref messe ich eine
> Spannungg von 5.041 V. Ist es nun richtig oder falsch.

Du schaltest REF0 und REF1 auf 1

Schau in dein Datenblatt zum Mega88
Was steht im Datenblatt, was das für den Mega88 bedeutet?

von Karl H. (kbuchegg)


Lesenswert?

Tschuldigung.
Ich hab selber im Datenblatt für den Mega16 nachgesehen, weil ich keines 
für den Mega88 da habe.

Hab ich jetzt nachgeholt.
REF0 und REF1 jewils auf 1, bedeutet 1.1V Referenz und nicht 2.56V wie 
ich weiter oben schrieb. Aber bis auf den anderen Zahlenwert bleibt 
alles andere gleich.


Und erlös bitte deinen Mega88.
Der versucht krampfhaft mit seiner internen Quelle die 1.1V als Referenz 
einzustellen und du bläst ihm da von aussen 5V auf die Schaltung. 
Irgendwann wird da einer nachgeben und kaputtgehen. Und das wird nicht 
deine 5V Versorgung sein.

von Anfänger (Gast)


Lesenswert?

hi Karl

Ich habe es geändert und nehme jetzt die externe Refernzspannung, leider 
bin ich immer noch bei einm Fehler von ungefähr 1%, an Aref messe ich 
eine spannung von 5,049 V. Und für meinen Projekt ist die 
Messgenauigkelt sehr wichtig.

die externe Refernzspannung habe ich so deklariert:

 ADMUX &=~ ((1<<REFS1) | (1<<REFS0));  Richtig???????????????

Vielleicht hat jemand ein Idee wie man das besser hin kriegt

Danke im Voraus

von Lutz (Gast)


Lesenswert?

Anfänger schrieb:
> ADMUX &=~ ((1<<REFS1) | (1<<REFS0));  Richtig???????????????

Ja.

Anfänger schrieb:
> leider
> bin ich immer noch bei einm Fehler von ungefähr 1%

Im Datenblatt sind 2 LSB als absoluter Fehler angegeben, sollte etwa 0,2 
% entsprechen.
Die Frage ist, ob Du einen konstanten Fehler von 1 % hast oder die Werte 
im Bereich 1 % drüber oder drunter liegen, also schwanken. Also einfach 
mal z.B. 1.000 Wandlungen am Stück und mit den Ergebnissen etwas 
Statistik machen.
Bei konstantem Fehler Korrekturwert machen (wobei sich natürlich die 
Frage der Genauigkeit Deines Meßmittels stellt ...), bei Streuung 
Meßsignal und Referenz besser blocken. Aber zu diesen Themen gibt es 
ganz viele Infos in der Suche.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.