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 FF, (<- guter Name ;-) ) > > > > > > > > > > ich möchte mit der CC2-Station Daten aus einer Wetterstation (Elsner P02-RS465) verarbeiten. > > > > Die Wetterstation ist an einen Wandler RS485 nach RS232 angeschaltet. > > > > Wenn ich nun den bisherigen Aufbau an eine COM-Schnittstelle eines PC's anschliesse und > > > > 19200baud 8N1 einstelle, kann ich auf dem Monitor (mittels Programm, das den Eingang an COMx > > > > auf den Bildschirm zaubert) jede Sekunde einen neuen 40Byte langen Ausdruck sehen. > > > > Schliesse ich das ganze an die I2CCOM an, gelingt es mir nur 16Byte unterschiedliche Bytes > > > > zu empfangen, bevor wieder mit dem Inhalt des ersten Byte begonnen wird. > > > > > > > > Bei der I2CCOM habe ich den TL16C550C gegen TL16C750 ausgetauscht. > > > > => initCOM(1,0,1) > > > > > > > > Ich kann mit get() das Endzeichen 0x03 des 40Byte langen Protokolls separieren. > > > > Danach setze ich ein flush() um den Empfangspuffer zu leeren für den nächsten Datensatz. > > > > Danach ist es egal, ob ich receive(DATA[]) mit DATA[40] verwende oder über eine > > > > Schleife die 40 Zeichen versuche einzeln mit get(DATA[i]) einzulesen. > > > > Ich erhalte nur 16 von den 40 Zeichen. > > > > > > > > Hat jemand eine Idee, wo das Problem liegen könnte oder einen Lösungsvorschlag ??? > > > > > > Poste am besten einmal kurz Deine Routinen. > > > Denn, der 64Byte-Fifo ist von mir natürlich gestestet und funktioniert ohne Probleme. > > > Darum vermute ich, daß es irgendeine Kleinigkeit an den Routinen ist. > > > (z.B. versehentliches Zurücksetzen des 64Byte-FiFo-Modes etc.) > > > > > > Du kannst das Bit auch mit <code>i2ccom.getReg(comport,i2ccom.IIR)</code> wieder auslesen. > > > Beim Rückgabewert muß dann Bit 5 gesetzt sein. > > > > > > MfG André H. > > > > > Hallo zurück und vielen DANK für den Tipp, > > > > ich muss meine Aussage z.T. revidieren. Es können tatsächlich mehr als 16 Byte von der I2CCOM > > gelesen werden. Aber nach 28 bzw. 29 Zeichen (Byte) gibt es eine Überlagerung, so dass die Zeichen > > 29-40 eine Wiederholung der Zeichen 1-12 darstellen. Dies ist unabhängig davon, welche Methode > > ich zur Selektion des Anfangs zum Lesen wähle. Im folgenden Beispiel triggere ich das Einlesen > > des 40Byte-Arrays der Wetterstation,in dem ich den Puffer der I2CCOM so lange leere, bis eine > > Sendepause der Wetterstation erreicht ist. Dann wird versucht, über i2ccom.receive() das nächste > > 40Byte Array einzulesen. Als zusätzlicher Effekt ist noch zu nennen, dass bei dem Beispielcode > > die Anzahl der eingelesenen Byte's zwischen 16 und 40 pro funktionsdurchlauf differiert. > > Hier der Beispielcode mit Initialisierung, Einlesen und Ausgabe am LCD-Displ. der Station II: > > > > <code> > > //-----------------I2CCOM initialisieren und einstellen ----------------------// > > function i2ccom_init() returns int > > { > > int i2ccom_erkannt; > > i2ccom_erkannt=0; // = nicht erkannt > > i2ccom.setDataPCF(7); //I2C-Adresse 7 > > i2ccom.defineCOM(1,6,0); //Com1,I2C-Adresse Ctrl 6, Sub-Adre. 0 > > i2ccom_erkannt=i2ccom.initCOM(1,0,1);//Com1,Autoflow = aus 0/ 64Byte-Puffer = 1 > > i2ccom.setFormat(1,i2ccom.set8N1); //Com1,Datenformat 8 Daten no par. 1 Stopp > > i2ccom.setspeed(1,6); //Com1, 19200 Baud > > return i2ccom_erkannt; > > } > > > > //-----------------Wetterdaten von I2CCOM COM1 lesen -------------------------// > > function get_wetter() returns int > > { > > int anzahl_daten; > > byte I, J,DATA[40], s1[16], s2[16], s3[8]; //s1, s2, s3 für lcd-Ausgabe > > > > for I=0...39 > > { > > DATA[I]=35; //Belegung alle Felder DATA mit '#' > > if I<16 > > { > > s1[I]=36; //Belegung Ausgabestrings S1-S3 mit '$' > > s2[I]=36; > > if I<8 s3[I]=36; > > } > > } > > i2ccom.flush(1);//leeren des Eingangspuffers der I2CCOM COM1 > > anzahl_daten = 0; > > while i2ccom.rxd(1); //den Puffer so lange leeren, bis keine Daten > > { // mehr gesendet werden (beginn Sendepause) > > i2ccom.flush(1); > > sleep 10; > > } > > //0x57= 1.Zeichen des Protokolls der Wetterstation > > //0x03 = Endekenneung des 40Byte langen Datensatzes der Wetterstation > > anzahl_daten=i2ccom.receive(1,DATA,40, 999); //es wird 1x pro Sekunde gesendet > > for J=0...16 > > { > > s1[J]=DATA[J]; //Gelesene Daten in Ausgabestring s1-s3 übertragen > > s2[J]=DATA[J+16]; > > if J<8 s3[J]=DATA[J+32]; > > } > > lcdext.clear(); > > lcdext.line(1); > > lcdext.printlength(s1,16); > > lcdext.line(2); > > lcdext.printlength(s2,16); > > sleep 3000; > > lcdext.clear(); > > lcdext.line(1); > > lcdext.printlength(s3,8); > > sleep 2000; > > lcdext.clear(); > > lcdext.print("anz_daten="); > > lcdext.zahl3p(anzahl_daten); > > sleep 1500; > > > > if anzahl_daten < 40 return 0; > > else return -1; > > } > > > > //-----------------Hauptprogramm -------------------------// > > > > thread main > > { > > int status_i2ccom_init, status_get_wetter; > > > > > > lcdext.init(); > > pcf.init(); > > stports.init(); > > lcdext.clear(); > > > > status_i2ccom_init = i2ccom_init(); > > if status_i2ccom_init > > { > > while get_wetter(); > > lcdext.clear(); > > lcdext.print("kein Wetter "); > > sleep 3000; > > } > > else lcdext.print("keine I2CCOM "); > > sleep 3000; > > } > > </code> > > > > Habe ich da irgend einen Denkfehler beim Einlesen oder Ausgeben drin ??? > > > > Gruss FF > > Hallo nochmal an die CC2-Experten, > > ich habe zum testen die I2CCOM SDA/SCL direkt mit der CC2-Station verbunden ohne irgend welche > Widerstände gegen +5V. Im Baustein sind ja bereits die 2 Stk. 330 Ohm Widerstände SDA+SCL > eingebaut. Die Leitungslänge beträgt 20 CM. Könnte ggf. der fehlende Pullup Widerstand mein Problem > sein ??? > > Zusatzfrage: Wenn ich den Interrupt-Ausgang der I2CCOM zum Triggern des Lesevorgangs > verwenden will, kann ich diesen einfach direkt auf einen (Interrupt)-Eingang der CC2 schalten und mit > getcount() abfragen ? > > DANKE für die HHHIIILLLFFFEEE !!! und Gruss FF
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB