Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Gemeinde, > > ich möchte mit dem AD-Multiplexer Art.# 1415 und der Station II 16 Temperatursensoren auslesen. > Ich hab momentan keine Hardware zur Verfügung um das ganze zu testen, evtl. kann mir ja > einer sagen ob das so funktioniert oder ob ich mich auf dem Holzweg befinde. > Ich habe zwei SW Module von Andre Helbig und Malte Alpers kombiniert. > Zum einen das Modul zum Auswerten der Temperatursensoren und zum anderen das > MUX-Abfragemodul thread getmux <b>(kann ich das so einfach kombinieren wie ich das gemacht > habe?)</b>. Zurückgegeben werden sollen T[1] bis T[16] > > Gleich ne Frage zur Array Festlegung: Wieso int T[17]? > Weil ich einmal von 0...15 hab und die Temperaturen von T[1] bis T[16] habe, und von 0..16 > gleich 17 ergiebt? > > Weiter soll function getPT1 für die Abgastemperaturmessung dienen, 4 Sensoren > ca. von 0°C bis 700°C (muss ich noch anpassen, aber wie?) (Auflösung 1°C), > hierfür muss ich den KonstantstromMUX mit 12V versorgen, bleibt mir dann für die anderen > 12 Sensoren eine hohe Auflösung (0,1°C) erhalten? > > <code> > > /*********************************************************************/ > /* Modul zur Auswertung der Temperatursensoren am CC2-Multiplexer */ > /* Vorlage : André Helbig */ > /* Geändert : Malte Alpers (malte.alpers@gmx.de) */ > /* Angepasst für Station: Markus Haidn */ > /* Version : 1.0 */ > /* Datum : 05.07.2005 */ > /*********************************************************************/ > /* WICHTIG: */ > /* - Verwendete Auswertfunktionen müssen angepasst werden, wenn die */ > /* Messadapter für einen anderen Messbereich abgeglichen werden! */ > /* - Im thread "main" muss ggf. der Name der zu verwendende */ > /* Auswertfunktion geändert werden! */ > /* - ggf. individuelle Offsetwerte der einzelnen Sensoren setzen */ > /* (Abweichung von einer Bezugstemperatur) */ > /* - Ausgabewerte T[1]...T[16] der Sensoren 1...16 am Reglerboard */ > /* in 1/10°C (z.B. 21.6°C = 216)! */ > /* - Erkennung von Fühlerbruch und -kurzschluss: */ > /* - bei Wert = -999 : Fühlerkurzschluss */ > /* - bei Wert = 9999 : Fühler unterbrochen oder nicht angeschlossen*/ > /*********************************************************************/ > > int T[17]; // Anzahl der Sensoren (Ports) + 1 (16 + 1 = 17) !!! > > // Setzen der individuellen Offset-Werte in +/- 1/10°C (z.B. Offset 2K = 20) > // Sensor: 1,2,3,4 , 5,6,7,8 , 9,10,11,12 , 13,14,15,16 > const OFFSET[] = 0,0,0,0 , 0,0,0,0 , 0,0,0,0 , 0,0,0,0; > > > /***********************************************************************/ > /* Auswertfunktion für Pt1000 (linearisiert) */ > /* Funktion: y=((y-AD)*TempBereich)/ADBereich +(-) Offset */ > /* TempBereich in K (z.B. +60 bis +80°C = 20 K) */ > /* ADBereich = (oberer AD-Wert MINUS unterer AD-Wert)/10 (integer!) */ > /* Offset in 1/10 K (z.B. Bereich ab -20°C : Offset = -200) */ > /* Rückgabewert in 1/10°C (z.B. 21.6°C = 216)! */ > /***********************************************************************/ > /* WICHTIG: */ > /* - Linearisierung für andere Messbereiche: AD-Werte müssen neu ermit-*/ > /* telt werden! Soll keine Linearisierung erfolgen, siehe 'getAD592'.*/ > /* - Werte in den Berechnungen unten entsprechend ändern! */ > /* - Klammern und Rechenreihenfolge nicht ändern (wg. int, long)! */ > /* - Ausgabewerte mit vorgegebenen Temperaturwerten am Sensoreingang */ > /* für jeden Bereich kontrollieren um Tipp-/Rechenfehler zu bemerken!*/ > /***********************************************************************/ > > function getPT1(int x, byte i) returns int //Abgastemperaturmessung > > /* Temperaturbereiche für Linearisierung > AD-Wert > +280°C = 10230 > +200°C = 7760 > +100°C = 4600 > 0°C = 1340 > -40°C = 0 > */ > { > long y; > y=x; // Datentypwechsel von 'int' auf 'long' > if x==0 return -999; // Fühler Kurzschluß > if x==10230 return 9999; // Fühler unterbrochen > > if x>=7760 y=((y-7760)*80)/247+2000; > else > if x>=4600 y=((y-4600)*100)/316+1000; > else > if x>=1340 y=((y-1340)*100)/326; > else > y=(y*40)/134-400; > > y=y+OFFSET[i]; // Addieren des individuellen Offsets > return y; > } > > > /***********************************************************************/ > /* Auswertfunktion für Pt1000 (linearisiert) */ > /* Funktion: y=((y-AD)*TempBereich)/ADBereich +(-) Offset */ > /* TempBereich in K (z.B. +60 bis +80°C = 20 K) */ > /* ADBereich = (oberer AD-Wert MINUS unterer AD-Wert)/10 (integer!) */ > /* Offset in 1/10 K (z.B. Bereich ab -20°C : Offset = -200) */ > /* Rückgabewert in 1/10°C (z.B. 21.6°C = 216)! */ > /***********************************************************************/ > /* WICHTIG: */ > /* - Linearisierung für andere Messbereiche: AD-Werte müssen neu ermit-*/ > /* telt werden! Soll keine Linearisierung erfolgen, siehe 'getAD592'.*/ > /* - Werte in den Berechnungen unten entsprechend ändern! */ > /* - Klammern und Rechenreihenfolge nicht ändern (wg. int, long)! */ > /* - Ausgabewerte mit vorgegebenen Temperaturwerten am Sensoreingang */ > /* für jeden Bereich kontrollieren um Tipp-/Rechenfehler zu bemerken!*/ > /***********************************************************************/ > > function getPT2(int x, byte i) returns int //Wasser- bzw. Umgebungstemp.-messung > > /* Temperaturbereiche für Linearisierung > AD-Wert > +130°C = 10230 > +100°C = 8360 > +50°C = 5180 > 0°C = 1960 > -30°C = 0 > */ > { > long y; > y=x; // Datentypwechsel von 'int' auf 'long' > if x==0 return -999; // Fühler Kurzschluß > if x==10230 return 9999; // Fühler unterbrochen > > if x>=8360 y=((y-8360)*30)/187+1000; > else > if x>=5180 y=((y-5180)*50)/318+500; > else > if x>=1960 y=((y-1960)*50)/322; > else > y=(y*30)/197-300; > > y=y+OFFSET[i]; // Addieren des individuellen Offsets > return y; > } > > > /***********************************************************************/ > /* Abfrage und Auswertung der Sensorwerte und Speicherung als */ > /* Temperaturen in T[1]...T[16] */ > /* Rückgabewert in 1/10°C (z.B. 21.6°C = 216)! */ > /***********************************************************************/ > /* WICHTIG: */ > /* - Für anderen Sensortyp Funktionsname ändern (s.u.)! */ > /* - Bei Mischbestückung muss eine Abfrage mit 'if' erfolgen, z.B.: */ > /* */ > /* for i=0...15 */ > /* { */ > /* if i%4==2 or i%4==3 T[i+1]=getAD592(rbports.ad(i),i); */ > /* else T[i+1]=getPT1(rbports.ad(i),i); */ > /* } */ > /* */ > /* Im Beispiel werden Messadapter 'C' + 'D' mit der Auswertfunktion */ > /* für AD592 und die anderen Messadapter mit 'PT1' ausgewertet. */ > /* */ > /* i%4==0 (Messadapter A) Wasser- bzw. Umgebungstemp. */ > /* i%4==1 (Messadapter B) Wasser- bzw. Umgebungstemp. */ > /* i%4==2 (Messadapter C) Wasser- bzw. Umgebungstemp. */ > /* i%4==3 (Messadapter D) Abgasmessung */ > /***********************************************************************/ > > /******************************************************************/ > /* Ansteuerung für den AD-Multiplexer */ > /* Author : André Helbig (andre.h@cc2net.de) */ > /* Vorlage : André Helbig (andre.h@cc2net.de) */ > /* Versionen : 1.0 */ > /* Datum : 30. August 2002 */ > /* Getestet : ja */ > /* Benötigt : ports.c2 */ > /******************************************************************/ > > > const PortA=14; //(P1H.6) Steuerports für den AD-Multiplexer > const PortB=15; //(P1H.7) > > int AD[16]; //Integer-Array für alle 16 Portwerte > > //--------- > thread getmux > //--------- > > { > byte i,j; > for i=0...3 > { > ports.set(PortA,i and 0b01); > ports.set(PortB,i and 0b10); > sleep 25; > run 255; > yield; > for j=0...3 > { > AD[i*4+j]=ports.adc(j); > } > resume; > } > } > > //-------------- > thread main > //-------------- > > { > byte i; > run getmux; > loop > { > for i=0...15 > > { > if i%4==3 > T[i+1]=getPT1(AD[i],i); > > else > T[i+1]=getPT2(AD[i],i); > } > > sleep 250; > } > } > > </code> > > Vielen herzlichen Dank für Eure Hilfe, > Markus
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB