Der Mega8 bekommt über RS232 ein Startsignal und sendet den gemessenen Spannungswert gleich zurück. Am PC zeigt ein Excelblatt den Messwert an. Alles schön kurz.
Und dies ist das Excel-Blatt mit dem Makro. Viel Spaß!
Bei mir gibs unter Excel 2003 folgenden fehler : MSComm1 -> Projekt oder Prcedure nicht gefunden. Fehlermeldung kommt beim Compelieren
Hallo Frank, danke für das interessante Projekt. Leider läuft es bei mir trotz der installierten "ioTrix.dll" nicht und meldet: Laufzeitfehler '8002' Die Methode 'PortOpen' für das Objekt 'IMSComm' ist fehlgeschlagen. Gruß Marcus
1. Die ioTrix.dll braucht ihr nicht, ich hab nur leider vergessen, den Verweis wegzuklicken. Sorry. 2. Für die serielle Schnittstelle brauchst Du MSCOMM32.OCX, hat M$ leider normalerweise nicht im Office-Paket dabei. Eine Alternative ist hier: http://www.timesoft.ch/down/msxmcom.exe Ein anderer feiner Trick: das OCX per Hand nach ...\system32\ kopieren, unter Access (Extras/ActiveX) von Hand registrieren (so hab ichs gemacht, funktioniert)
So bei mir läuft es jetzt ;o) Ich musste noch den CommPort umstellen da ich Com1 nehme. Cooles Teil!
Ich freue mich, dass du dich freust. Bei mir läuft das über einen USB-Konverter, daher die exotische Portnummer.
Ich bekomme in Excel leider nur Laufzeitfehler 429 "Objektdarstellung durch ActiveX - Komponente nicht möglich". Zu Hause habe ich leider nur OpenOffice ...
An Marcel: 1.Die verwendete Komponente (MSCOMM32) beschreibt ein COM-Objekt. Im beiliegenden Demo habe ich eine ActiveX-DLL (die auch ein COM-Objekt beschreibt) unter OO-Basic verwendet. Dafür muss sie in ein sog. UNO-Objekt umgemodelt werden, das ist die entsprechende Technologie im Open Office. Wie das geht siehst Du im Anhang. Wenn es dabei Probleme gibt, kann ich dir im Moment aus Zeitgründen nicht helfen. Aber im OO-Forum gibt es hervorragenden Support. 2. Hast Du die Alternative aus dem Posting von oben denn schon probiert? Viel Erfolg Frank
Hi, irgendwie stimmt etwas mit dem Quellcode. Die Zeile "out ADCSRA, temp" sollte nicht definiert sein? Fehlermeldung: Undefined variable referenced? Falsche Bezeichnung ? Danke
An Mirko, dessen Posting fälschlicherweise ganz vorne eingefügt wurde: ADCSRA hat anscheinend manchmal auch den Namen ADCSR, das ist für die Megas, die nur ein Statusregister haben. Bei mir gabs übrigens verwirrenderweise keine Fehlermeldung. Andere Version des Includefiles? Versuch einfach mal den anderen Namen.
Hallo, sehr interessantes Projekt! Läuft das auch auf einem Mega32, bzw was muss ich im Source anpassen um das einfach mal verwenden zu können um es anschließend zu verstehen zu lernen? Grüße Christopher
Hallo Christopher, hab leider keinen 32er hier. Laut Atmel-Übersicht hat der 32er nur ein paar Features mehr als der 8er: Speicher, Beine, PWM, Interrupts. Ich würd es also mit neuer Include-Zeile .include "m32def.inc" probieren, dann mit Atmel-Studio assemblieren. Ich denke, das muss klappen. Falls es ein paar Fehlermeldungen gibt, dann wegen umbenannter Register oder Flags, die musst du dann in der Docu nachschlagen. Viel Erfolg! Frank Simon
Hallo. Hab ein kleines Problem. Arbeite zum ersten mal mit dem AVR Atmega8 und möchte über den ADC0 Eingang eine Spannung einlesen und über 7-SegmentAnzeige ausgeben lassen. Spannung kommt am Eingang an und ich denke das der ADC im frei laufenden Betrrieb läuft, aber er spuckt komische Zahlen auf der Anzeige aus. Meine MEinung ist, dass es an der Ergebnisroutine liegt. Wenn wir in meine VAriable "value" einen Wert definieren rechnet er den entsprechenden Wert aus und gitb ihn auch richtig auf der Anzeige aus. Aber wenn er sich die Werte über den Eingang ADC0 holen soll und diese dann in ADCL und ADCH reinschreibt kommt nur Null raus. Kannst du mir vielleicht helfen?
Hallo, ich lese erst das Hi-Byte, ist m.E. in dieser Reihenfolge nötig. Guck mal, obs daran liegt. Bei mir sieht das so aus: U = ((ADCL+(ADCH<<8))<<6); Good luck
Pardon, war falsch, seh ich gerad selber. Weiß nicht, worans bei Dir liegt.
Habe Problem mit Excel-Sheet: Kommt immer Fehlermeldung "Laufzeitfehler 429" Objekterstellung durch ActiveX-Komponente nicht möglich Liegt es vielleicht daran das ich einen USB-Konverter verwende!
Hallo, der Comport muss die passende Nummer haben. Du erfährst sie im Gerätemanager.
Habe ihn richtig eingestellt!!Verwende IOTrix und MScomm! kommt immer der selbe Fehler "429......"
1.) Ist "Microsoft Comm Control 6.0" unter Extras/Verweise angeklickt? Bei mir steht dann unten "Pfad: C:\Windows\System32\MSCOMM32.OCX" 2.) Ich weiß mittlerweise, wie man mögliche Registrierungsprobleme mit dem OCX elegant umgeht. Du musst einen bestimmten Schlüssel in die Registry importieren, das geht z.B. durch einen Doppelklick auf die im Anhang liegende Datei. Sag bitte Bescheid, ob's das war. Good luck!
Wie genau kann ich die Excel datei (Voltmeter) ausfuehren ?! Kommt immer nen Fehler das die Bibliothek oder das Projekt nicht gefunden wurden
Hallo, schau mal unter Extras/Verweise nach, welcher Verweis fehlt. Dann googelst Du danach oder liest hier weiter oben.
Hallo zusammen, habe das Excelblatt heute an meine Bedürfnisse (Entladekurvenerfassung für Akkus) angepasst und es sechskanalig gemacht -- ein Kanal kann jeweils groß dargestellt werden (ist für Lehrerexperimente in der Schule ganz praktisch). Das Programm erwartet einen sekündlichen String im Format V;0000;0000;0000;0000;0000;0000; wobei die Nullen für einen Ascii-String mit Werten zwischen "0000" und "1024" steht. Im Anhang der Screenshot...
... und hier das Excel-Blatt. Der erste Versuch in VBA, aber ich weiß nicht, ob ich mir das noch einmal antue. Ziemliches Gemurkse, entsprechend sieht auch der Code aus... Wenn's jemand noch verbessern / korrigieren würde, würde ich mich freuen. Gruß, Dirk
Ach ja, speichern kann man die Werte jetzt auch automatisch. Im Anhang noch der C-Code für den verwendeten ATMega88. (auch das geht schöner, ich weiß. Aber es läuft wie es soll ;))
Hallo zusammen, ich habe das Einkanal-Voltmeter auf mein µController-System angepasst. Ich verwende aber leider keinen Atmel sondern einen PIC. Mein Testprogramm sendet in 1 Sekunden abständen die Dezimalzahl 255. Auf meinem Excel Blatt erscheint dann 99,213 Volt und nach kurzerzeit die Fehlermeldung Laufzeitfehler '6' Überlauf. Wäre sehr nett wenn mir jemand weiter helfen könnt. mfg Lukas
Hallo Dirk, war auf der Suche nach einem Programm zur Anzeige von mit µC per RS232 zum PC gesendeten ASCII Zeichen. Eigentlich ging es um graphische Ausgabe (ähnlich Plot bzw. Logger oder "Langzeit-Oszi"). Wollte mir Dein 6-Kanal-Voltmeter.xls mal anschauen. Habe XP Pro ohne jeden SP und jetzt schon Office97 mit Visual Basic neu installiert. Vorher noch VB Runtime 6.0 . vbe6.dll existiert nicht auf meinem Rechner, dafür eine vbe.dll und eine vbeext1.olb, beide vom 14.12.1996 (von der Office Installation?). Ich weiß, alles etwas wild, aber ich habe keine Ahnung. Bin jetzt schonmal so weit, daß der "Laufzeitfehler 429" nicht mehr kommt, dank der mscomm32.reg von Frank. Jetzt kommt aber "Fehler beim Compilieren des Codes" und er bleibt hängen in der Zeile z = Split(s, ";") Offensichtlich kennt (mein Visual Basic ? "er"?) den Befehl split nicht. Was kann ich tun? Danke!
Hallo Dirk, die Laufzeitfehlermeldung liegt bestimmt daran, dass die Funktion z=Split(s,";") den falschen string erhält. Was macht die Funktion denn? Wenn du einen string s hast, der wie folgt aussieht s="V;255", dann wird mit z=Split(s,";") daraus z="255". Es wird also der vordere Teil des strings s="V;" abgehackt und übrig bleibt dein Wert. Du musst also mit deinem PIC einen string "V;255" senden oder die zeile z=Split(s,";") einfach auskommentieren. Gruss der grosse
Hallo ich habe das Programm noch ein bisschen "aufgebohrt". Neu: -Auswahl des COM-port -analoge Balkenanzeige aufgehübscht -Spannungsbereiche 2,5V,5V,10V,20V als "1023"-Wert -Für jeden Kanal einen eigenen Spannungsbereich Viel Spass
Hallo nochmal, habe gerade gemerkt, dass der Testmodus in meinem Programm noch aktiv ist. '***************************************************** '** Test '** Mit test=1 wird der Empfang von Daten simuliert '***************************************************** test = 0 test = 1 '***************************************************** Das sollte eigentlich so aussehen. '***************************************************** '** Test '** Mit test=1 wird der Empfang von Daten simuliert '***************************************************** test = 0 'test = 1 '***************************************************** Also bitte ändern oder eben nochmal downloaden.
Fehler beim Compilieren, mit Excel 97. "Dim MSComm1 As MSComm"
Hallo Gatsby, vielen Dank, daß Du noch einmal reingeschaut und Dich der Sache angenommen hast! Ich glaube, ich muß jetzt mal mein System etwas genauer beschreiben: Ich arbeite derzeit mit einem Picaxe 28X1 (picaxe.com, basiert auf Pic, ist so eine Art Basic-Briefmarke. Suuuper einfach, ging sofort und fand ich daher toll). Der sendete früher sekündlich einfach munter komma-separierte ASCII-Strings an COM1 (z.B "10bit-Wert,10bit-Wert2,...10-bit-Wert4,cr,lf"). Klappte ganz hervorragend mit dem Terminalprogramm im Picaxe-IDE-Editor, Hyperterminal und dem Programm Stampplot von Selmaware http://www.selmaware.com/stampplot/index.htm . Habe den zu sendenden String jetzt so abgeändert, wie Dein Programm ihn sehen möchte: "V;10-bit-Wert". Klappt aber immer noch nicht. Glaube auch nicht, daß es daran lag, es ist wohl eher etwas Grundsätzlicheres. Ich arbeite mit XP, Office97, "Microsoft Visual Basic Copyright 1987-1996" und einem zuvor installierten "Visual Basic 6.0 Runtime und Controls.exe". Beim Starten Deiner Excel-Datei erscheinen nacheinander folgende Meldungen von Visual Basic: zuerst "Fehler bei Laden", dann "Projekt oder Bibliothek nicht auffindbar". Unter Verweise springt er diesmal an die Stelle mit der Refedit.dll . Habe bei mir eine solche unter \system32 gefunden und bei Verweise eingetragen. Beim Laufenlassen kommt dann: "Fehler beim Kompilieren - Sub oder Function nicht gefunden" und der Befehl "split" ist schwarz markiert. Habe das noch ein paarmal probiert, mit und ohne abspeichern nach dem neuen .dll Verweis, keine Änderung. Ich habe KEINE AHNUNG von Visual Basic, ist für mich absolut kryptisch und viel zu komplex. Wäre vielleicht anders, wenn ich schonmal ein paar Beispielprogramme oder so gesehen hätte. Dachte mir also laienhaft: o.K., kommt also mit "split" nicht klar, nimmst Du also split raus und weist den einkommenden String direkt an z (so: z=s) und passt den gesendeten String an (sertxd "10-bit-Wert" - ohne "V" und ";"). Diesmal kam dann natürlich die Meldung: "Keine Zuweisung an Datenfeld möglich". Hätte ich mir auch denken können, das eine ist ein Text, das andere eine Zahl, logisch. Kenne aber den Umwandlungsbefehl "Variable = MACHNEZAHLAUSASCII(ASCII)" in VB nicht, finde auch nichts in der Hilfe. Keine Doku, kein Handbuch, nichts da. Für mich eben kryptisch. Wollte eigentlich auch gar nicht soo tief da einsteigen, weil es einfach nach viel Zeit aussieht. Würde daher sagen, wenn Du sofort weißt, wo bei mir der Fehler liegt: Super! Wenn es aber bedeutet, daß ich jetzt erst noch drei VB Bücher lesen muß und meinen Rechner neu installieren, dann ist mir das, glaube ich, zuviel (und auch schade um Deine Zeit). "fundamentalistische" Grüße (ob nun visuell oder nicht) von Lars
Nachtrag: habe jetzt mal noch etwas weiter rumgespielt und bin die Zeile z = split() usw. ganz umgangen, indem ich sie auskommentiert habe und anstelle von z im weiteren Verlauf s eingetragen habe. Habe auch das "V" als Anforderung und nötiges Format rausgenommen und sende erstmal nur noch jeweils einen Wert zwischen 0 und 1023. Jetzt meckert VB zwar nicht mehr rum, es kommt aber über ein 0,00V auch nicht hinaus. Es scheint jetzt nur noch an Inkompatibilitäten im Sende- und erwartetem Empfangsformat zu liegen, oder? Kann ich nicht einfach (wie ganz früher bei Stampplot) senden: sertxd (#AD0,",",#AD1,",",#AD2,",",#AD3,cr,lf) senden (wobei "#" für die Umwandlung in eine Zeichenkette steht, das Komma von den meisten anderen Programmen sehr gut als Separator verstanden wird und cr und lf für den nötigen Neuanfang und Zeilenumbruch sorgen)? Wie müßte Dein VB Programm dann aussehen? Der Vorteil dieser Version wäre, daß der gesendete String dann von den unterschiedlichsten PC-Programmen aus verstanden und verwertet werden könnte! - Lars
Hallo Lars, dann probier mal das angehängte Programm. Wenn ich dich richtig verstanden habe, dann sieht dein String so aus "64,128,796,1005" + CR + LF Wichtig !! Die Werte sind ASCII-Zeichen und keine Hex Werte !!! Ich habe mal das empfangene Telegramm simuliert mit der Zeile s = "64,128,196,255" + vbCrLf Programmbeschreibung: Hier werden die Zeichen von der seriellen Schnittstelle aufgesammelt bis ein Linefeed empfangen wird. s = "" Do DoEvents a = MSComm1.Input s = s + a Loop Until a = vbLf Danach sollte der string wie oben simuliert aussehen. Dann gehts weiter mit 'hier wird das CR und das LF gelöscht s = Left(s, Len(s) - 2) 'hier werden 2 dummy Werte an den string angehängt 'weil das Programm ja auf 6 Kanäle ausgelegt ist s = s + ",0,0" Dann geht das Programm normal weiter. Du kannst es ja mal im Simulations modus im single step testen. Wenn es richtig laufen soll, dann einfach wieder im Programm '***************************************************** '** Test '** Mit test=1 wird der Empfang von Daten simuliert '***************************************************** test = 0 'test = 1 '***************************************************** die Zeile auskommentieren. Viel Erfolg
Hallo Gatsby, mensch, tolles Forum hier! Ehe ich heute reingeschaut habe, wurde Dein Programm schon 3x runtergeladen! Bei mir hat es aber leider wieder nicht funktioniert. Können aber nur noch kleine Sachen sein. Zunächst hat VB bei mir bei der Variable a (bei "a = MSComm1.Input") rumgemeckert; daß diese nicht definiert sei obwohl irgendwas mit "Option explicit" angegeben worden sei usw. Habe a daher erstmal bei "Dim ..." zu den String-Variablen gestellt. War doch richtig, oder? Zumindest hörte dann das Meckern auf. Bleibt nach wie vor der Fehler mit der Anweisung "split". Da meldet er immer einen "Fehler beim Kompilieren". Habe dann mal mit F1 nachgeschaut: "Split-Eigenschaft: True, wenn das Fenster geteilt ist. Boolean Schreib-Lese-Zugriff. Anmerkungen: FreezePanes kann den Wert True haben und gleichzeitig kann Split den Wert False haben und umgekehrt. Diese Eigenschaft ist nur für Tabellenblätter und Makroblätter gültig." Heißt das, das Split bei mir gar nicht für die von Dir gewünschte Separierung verwendet werden kann? Habe dann im "Objektkatalog" die "Refedit" aufgerufen, "split" ist dort gar nicht dabei?! Wo ist split denn drin, bzw. wie kann ich ihm das "alte split" ausreden und das neue reinnehmen? Wie gesagt (auch für die, die neu dazu gestoßen sind) Ich habe eigentlich KEINE AHNUNG von Visual Basic und Makros! Kann bisher höchstens in BASCOM-AVR oder Picaxe-Basic ein paar kleine Programme schreiben. - Lars
Hallo Lars, dann eben auf die harte Tour mit dem Split-Befehl. 'das ersetzt Split(s, ",") count = 1 For n = 1 To Len(s) b = Mid(s, 1, 1) If b = "," Then count = count + 1 Else z(count) = z(count) + b End If s = Mid(s, 2) Next n Das mit dem "DIM a as STRING" war richtig. Bei meiner VB version brauchte ich es nicht explizit anzugeben. Ich hoffe, dass ich diesmal keine DIMs mehr vergessen habe. Und wieder gilt, wenn das Programm nicht mehr im Test modus laufen soll, die Zeile '***************************************************** '** Test '** Mit test=1 wird der Empfang von Daten simuliert '***************************************************** test = 0 'test = 1 '***************************************************** auskommentieren. Ich hoffe es funzt jetzt.
Hallo gatsby, hat immer noch nicht funktioniert. "Fehler beim Laden". Sagte aber nicht, was es war bzw. was fehlte. "Bitte schauen sie in der Fehlerprotokolldatei nach". Habe den ganzen Rechner nach evtl.en Dateien abgesucht - nichts. Auch unter VB selbst konnte ich keine solche finden. Habe daher schrittweise Teile Deines Codes (voltmeter_C) in die letzte mir bekannte Version (modifizierte voltmeter_6kanal) überspielt, die genau diesen Fehler eben noch nicht zeigt. Das Resultat (Vorsicht, kein fertiges Programm!!!) hängt hier dran. Bin jetzt zumindest soweit gekommen, daß er überhaupt erst einmal eine order mehrere Datenpakete empfängt. Mit "loop until s = vbcrlf" konnte er leider nichts anfangen, daher meine Rumprobiererei mit der Zeichenanzahl. Mit diesen Änderungen empfängt er hin und wieder etwas und zeigt dies erstmal mit Message-Boxen an (was anderes fiel mir nicht ein zur Kontrolle). Hier sieht man, daß er manchmal auch ganze "Zeilenpakete", d.h. mehr als eine Zeile, gleichzeitig empfängt und versucht, diese zu verarbeiten. Hierbei springt er danach dann natürlich oft in der Zeile "z(count) = z(count) + b" raus. Außerdem meckerte er auch mehrmals über die Zeile mit dem " ... Left(...". Offensichtlich versteht mein VB unter dem Befehl "Left" etwas anderes (Du meintest doch bestimmt sowas wie Linksschieben, oder? Ich könnte es sehr gut verstehen, wenn Du jetzt langsam keine Lust mehr hast! Wenn aber doch, so wäre es sicherlich sinnvoll, ausgehend von meiner angehängten Datei, die Punkte: - zuverlässige Erkennung einer gesendeten Zeile mit mindestens vier kommaseparierten Meßwerten (0..1023) und "evtl. noch etwas mehr" - Abtrennung des "evtl. etwas mehr" in der empfangenen Zeile - Rausspringen bei z(count)... zu klären. Außerdem würde mich ja außerdem noch interessieren, warum er bei Deinem voltmeter_C einen "Fehler beim Laden" anzeigte, bei der hier jetzt angehängten Datei hingegen nicht! Liegt es vielleicht daran, daß mein Excel und/oder VB älter als Deines ist und nicht so viele Funktionen/Anweisungen kennt? Danke! Lars
Habe hier noch mal angehängt, wie meine Ausgabezeile im Picaxe-Editor aussieht (# steht für Umwandlung in ASCII-Zeichen) und was im Hyperterminal empfangen wird (gemessen: zwei leere 1,5Volt-Batterien an Kanal 1).
Oh, oh, oh, oh, Da geht jetzt aber viel durcheinander!! Hallo Lars, so wird das nichts mit deinem angehängten Testprogramm. ' "Fehler beim Laden". Sagte aber ' nicht, was es war bzw. was fehlte. "Bitte schauen sie in der ' Fehlerprotokolldatei nach". Ich habe keine Ahnung was da los ist. 1. Fehler 'If test = 0 Then 'If MSComm1.Input = "V" Then s = MSComm1.Input <---- das löscht dir ein Zeichen DoEvents Da später der Befehl s="" folgt, fehlt dir ein Zeichen aus deinem Telegramm. 2. Fehler Die Zeile "loop until s = vbcrlf" hiess eigentlich mal "loop until a = vblf". Deine Zeile prüft s ab, was ein string mit mehreren Zeichen ist und daher so gut wie nie ausgerechnet nur cr+lf werden kann. Meine Zeile prüft genau 1 Zeichen ab, ob es lf (ascii 10) ist. Wenn du Schwierigkeiten mit der Konstanten vblf hast, so macht diese Zeile das Gleiche "loop until a = Asc(10)" 3. Fehler Das ist Schrott!! Do DoEvents a = MSComm1.Input s = s + a Loop Until MSComm1.InBufferCount > 6 's = vbCrLf Die MSComm ist so eingestellt, dass sie sich bei jedem Zeichen meldet ( siehe MSComm1.RThreshold = 1 in UserForm_Initialize()). Dieses eine Zeichen wird in der Zeile a = MSComm1.Input sofort abgeholt. Damit kann Loop Until MSComm1.InBufferCount > 6 höchstens mal 1 aber niemals > 6 werden, es sei denn, das Programm wird durch deine MsgBox Ausgabe ausgebremst während der PIC fröhlich weitersendet. Nur dann Laufen einmal Zeichen im InBuffer auf, die nicht abgeholt wurden. 4. Fehler Wenn du diese Zeilen ' Else 'z(count) = z(count) + b auskommentierst, dann geht natürlich der ganze Rest des Programms nicht mehr. Ich kann dir jetzt nur noch Hilfestellung zur Selbsthilfe geben. Setze einen Haltepunkt auf die FOR Zeile und wenn dein PIC ein vollständiges Telegramm gesendet hat, dann sollte das Programm dort anhalten. 'das ersetzt Split(s, ",") count = 1 For n = 1 To Len(s) b = Mid(s, 1, 1) If b = "," Then count = count + 1 Else z(count) = z(count) + b End If s = Mid(s, 2) Next n Nun solltest du im single step mal prüfen, welche Daten du empfangen hast in s und wie die z(count) zusammengesetzt werden und wie sie schliesslich aussehen. Hier nochmal das Programm, das sich vielleicht jetzt wieder starten lässt. Damit möchte ich mich nun aus dem Thread abmelden. Vielleicht informierst du aber noch die Gemeinde, wie das Projekt geendet hat und stellst dein schliesslich lauffähiges Programm hier ein. Das würde mich rein persönlich noch interessieren. Oder vielleicht äussert sich ja mal einer der vielen "Downloader" über seine Erfahrungen. Viel Erfolg Gatsby
Hallo Gatsby, habe wieder ausführlich getestet. Hauptfehler: "Fehler beim Laden". Bei Einzelschritt springt er dann immer wieder zur Sub nocomm. Findet also den Com-Port nicht? Vielleicht probiere ich es irgendwann noch einmal mit einem neueren Excel. Gebe jetzt auch erst einmal auf. Als (schlechtere) Alternative habe ich jetzt ein RS232 (oder I2C) LCD-Display. Damit kann ich mir die Werte auch seriell anzeigen lassen. Die Umrechnung muß dann natürlich der Pic machen. Trotzdem vielen vielen Dank, daß Du Dir so große Mühe gegeben hast! Ich wünsche Dir Frohe Ostern und viel Spaß beim weiteren Programmieren und Löten! Lars
Super Thread, vielen Dank für die gute Idee und Umsetzung! Ich habe das Grundgerüst des Excel-Files verwendet, um die Messdaten eines preiswerten 2-Kanal-Thermometers (TCM320 von Voltcraft, zu beziehen beim großen C***) aufzuzeichnen und auch grafisch online anzuzeigen. Und das Ganze läuft dann als Langzeitaufzeichnung, um Vor- und Rücklauftemperaturen einzelner Heizkörper im Haus aufzuzeichnen, damit man zu sinnhaften Parametern für den hydraulischen Vor-Abgleich der Ventile kommt. Ich versuche mal, die Datei anzuhängen...
Hallo Reinhard, ich habe noch eine kleine Änderung in dein Programm eingefügt, sodass sich die UserForm nun rechts oben in dem Tabellenblatt einblendet. Ist nur für die Optik. Kannst du bitte mal den string posten, den der uC sendet? Sieht es so aus? "xx1234567890123456" .||..||....|+-------- Nachkommastelle 2.Messwert .||..||....+--------- Vorkommastelle 2.Messwert .||..|+-------------- Nachkommastelle 1.Messwert .||..+--------------- Vorkommastelle 1.Messwert .|+------------------ chr(170) .+------------------- chr(170) Gruss Gatsby
Oh, eine Antwort mit herzlicher Anteilnahme, vielen Dank, damit hatte ich ja gar nicht gerechnet! Danke, Gatsby! Sorry, ich war lange nicht hier... Ja, gerne poste ich den String, der sieht in Hex folgendermaßen aus: AA AA 19 09 18 08 20 02 17 03 16 05 18 04 Startkenner ist AA AA 19 Kanal1, akt.Temp. Vorkomma (19°C) 09 Kanal1, akt.Temp. Nachkomma (,9°C), dementsprechend geht's weiter mit 18 Kanal1, Min.Temp. Vorkomma 08 Kanal1, Min.Temp. Nachkomma 20 Kanal1, Max.Temp. Vorkomma 02 Kanal1, Max.Temp. Nachkomma 17 Kanal2, akt.Temp. Vorkomma 03 Kanal2, akt.Temp. Nachkomma 16 Kanal2, Min.Temp. Vorkomma 05 Kanal2, Min.Temp. Nachkomma 18 Kanal2, Max.Temp. Vorkomma 04 Kanal2, Max.Temp. Nachkomma keine Endekennung Der kleine Controller liefert 9600, 8, N, 1. Vielleicht hat noch jemand Antworten auf 2 Fragen: 1. Ich möchte die Aufzeichnung der Messwerte gleich beim Aufruf der Excel-Datei automatisch starten und nicht erst die beiden Click-Boxes aktivieren müssen. Wie kann ich das bewerkstelligen? Wenn ich in der Form die beiden Values mit TRUE vorbelege, läuft das Script ja nicht in die Routine chk1_Click... Ich habe das zwar schon realisiert, aber nur quick&dirty, indem ich chk1_Click gleich aus der init-Routine aufrufe (dann erscheint das Form nicht). Die Datei soll nachts über den Taskplaner gestartet werden und sich nach 23,5h selbst beenden (das funzt, ist aber sehr unsauber). Wenn es hier reinpasst, hänge ich die Datei mal dran. 2. Ich habe an dem uralten Aufzeichnungs-PC noch eine weitere COM(2) zur Verfügung. Ein weiteres Thermometer damit einzulesen und die Daten in dasselbe Tabellenblatt zu schreiben wäre mein Wunsch. Hat jemand dazu auch eine Idee? Vielen Dank für weiterführende Impulse, schönen Gruß Reinhard
Reinhard schrieb: > Ich habe an dem uralten Aufzeichnungs-PC noch eine weitere COM(2) zur > Verfügung. Ein weiteres Thermometer damit einzulesen und die Daten in > dasselbe Tabellenblatt zu schreiben wäre mein Wunsch. Hat jemand dazu > auch eine Idee? Machst du eben zwei MSCOMM-Objekte und holst von denen Wechselweise Daten ab. Wenn beim einen Comport-Objekt keine Daten im Lesepuffer sind, dann wird eben versucht, den Lesepuffer des anderen Comport-Objekts zu lesen. Es gibt doch sicher eine Methode(ich meine damit eine Funktion des Objekts), mit der man feststellen kann, ob und wieviele Zeichen im jeweiligen Lesepuffer sind. Wenn von einem Comport-Objekt genügend Daten eingetrudelt sind, dass man sie verarbeiten kann, dann wird das getan. Und weiter gehts in der Schleife... mfg mf
Danke, MiniFloat, das schaue ich mir demnächst einmal an. Klar, da gibts ne Abfragemöglichkeit für die InBuf-Länge, müsste gehen. Schöne Grüße Reinhard
Beitrag #5107590 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.