mikrocontroller.net

Forum: Projekte & Code Mega8, ADC, UART. Excelblatt als Voltmeter


Autor: Frank Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Frank Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dies ist der Assemblertext.

Autor: Frank Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und dies ist das Excel-Blatt mit dem Makro.
Viel Spaß!

Autor: dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir gibs unter Excel 2003 folgenden fehler :
MSComm1 -> Projekt oder Prcedure nicht gefunden.
Fehlermeldung kommt beim Compelieren

Autor: zotos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: zotos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dirk: Du benötigst die 'ioTrix.dll' von http://www.ioproz.de

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: zotos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So bei mir läuft es jetzt ;o) Ich musste noch den CommPort umstellen da
ich Com1 nehme.

Cooles Teil!

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich freue mich, dass du dich freust.
Bei mir läuft das über einen USB-Konverter, daher die exotische
Portnummer.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bekomme in Excel leider nur Laufzeitfehler 429 "Objektdarstellung
durch ActiveX - Komponente nicht möglich". Zu Hause habe ich leider
nur OpenOffice ...

Autor: Frank Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

irgendwie stimmt etwas mit dem Quellcode.

Die Zeile "out ADCSRA, temp" sollte nicht definiert sein?

Fehlermeldung: Undefined variable referenced?
Falsche Bezeichnung ?

Danke

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christopher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Norbert Lukoski (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pardon,
war falsch, seh ich gerad selber. Weiß nicht, worans bei Dir liegt.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, der Comport muss die passende Nummer haben. Du erfährst sie im
Gerätemanager.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ihn richtig eingestellt!!Verwende IOTrix und MScomm! kommt immer
der selbe Fehler "429......"

Autor: Frank Simon (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat geklappt!Danke!

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, dann viel Spass beim Messen!

Autor: Daniel Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie genau kann ich die Excel datei (Voltmeter) ausfuehren ?! Kommt immer
nen Fehler das die Bibliothek oder das Projekt nicht gefunden wurden

Autor: Frank Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
schau mal unter Extras/Verweise nach, welcher Verweis fehlt. Dann
googelst Du danach oder liest hier weiter oben.

Autor: Dirk W. (bastelator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Dirk W. (bastelator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... 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

Autor: Dirk W. (bastelator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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 ;))

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: gatsby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler beim Compilieren, mit Excel 97.

"Dim MSComm1 As MSComm"

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lars (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lars (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Reinhard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Reinhard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und hier noch ein Bild.

Autor: Gatsby (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Reinhard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Reinhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.