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

Re: Neuanfang mit Station2 die Zweite Kategorie: Programmierung (von André H. - 30.04.2007 0:54)
Als Antwort auf Re: Neuanfang mit Station2 die Zweite von newcommer - 29.04.2007 20:02
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo newcommer,

> hab das oben versucht komme aber nicht weiter,
> ein Temp 1631 wird am diÃ?play aktuallisiert angezeigt der 2 wird
> erst nach einem reset aktuell.
> anbei mein programm was mache ich falsch, danke
> Kann man das Programm Station 1 auf Station2 umkompilieren und wenn ja wie ?
> Bitte um kleine Hilfe wie man dan differenz

Dein Programm ist auch kein Programm, sondern - sorrydas ich das sagen muÃ? -
ein zusammengewürfeltes etwas.

Ich füge mal die Code-Tags ein. Vielleicht fällt es Dir dann auf: (Erläuterungen siehe unten)
(Bitte nutze für Quellcode immer die Code-Tags)

> int temp[6];
> thread main
> {
> stports.init(); //Initialisierung der Station-spezifischen Ports
> lcdext.init(); //LCD initialisieren
> ds1631.init(6); //DS1631 initialisieren an Sub-Addr.6 (A0auf GND A1A2 auf5V)
> lcdext.goto(2,0);
> lcdext.print("Boil:");
> loop
> {
> lcdext.goto(2,5);
> temp=ds1631.readb(6);//DS1631(addr.0) mit zwei Nachkommastellen auslesen
> lcdext.zahl2(temp); //ausgelesenen Festkommaintegerwert auf LCD ausgeben.
> lcdext.put(0xDF); //Gradzeichen ausgeben
> sleep 2000; //1 Sekunde warten (1000ms)
>
>
> int temp[0];
> {
> stports.init(); //Initialisierung der Station-spezifischen Ports
> ds1631.init(0); //DS1631 initialisieren an Sub-Addr.0 (A0-A2 auf GND)
> lcdext.goto(2,8);
> lcdext.print("Heiz:");
> loop
> {
> lcdext.goto(2,13);
> temp=ds1631.readb(0);//DS1631(addr.0) mit zwei Nachkommastellen auslesen
> lcdext.zahl2(temp); //ausgelesenen Festkommaintegerwert auf LCD ausgeben.
> lcdext.put(0xDF); //Gradzeichen ausgeben
> sleep 1000; //1 Sekunde warten (1000ms)
> }
> }


Du hast scheinbar per Copy&Paste einfach das ganze Programm kopiert und für den
Sensor in die Schleife des ursprünglichen Thread reinkopiert.
Das kann nicht funktioneren.
Man sollte auch verstehen, was man programmiert.

Auch die Definition int temp[0]; macht keinen Sinn.
Es gibt keine Arrays mit null Elementen.
Auch definierst Du ein Globales Array temp[] mit 6 Elementen, willst aber
temp nicht als Array, sondern als einzelne Variable verwenden.
Das kann nicht funktionieren.

Ich denke Du verwechselst das mit dem expliziten Definieren von Variabeln
in CC-Basic bei der CC1, um eine Variabel auf einen bestimmten Speicherplatz zu legen.
Bei der CC1 mit Ihren 24 Byte bei der V1.1 war diese Möglichkeit sehr sinnvoll.
Bei der CC2 ist dies aber so nicht möglich. Warum auch?
Sie hat über 2700mal mehr RAM. ;-)

Auch hast Du hier etwas nicht verstanden:
> temp=ds1631.readb(0);//DS1631(addr.0) mit zwei Nachkommastellen auslesen
> lcdext.zahl2(temp); //ausgelesenen Festkommaintegerwert auf LCD ausgeben.

ds1631.readb() liest nur die ganzzahlige Temperatur, also ohne
irgendeine Nachkomastelle aus. Zwei Nachkommastellen erhälst Du mit readi2().
Auch wird mit lcdext.zahl() keine Festkommazahl ausgegeben, sondern
einfach nur eine max. zweistellige ganze Zahl.
Zahl-Funktionen in lcdext.c2 haben z.b. das Format lcdext.zahl4n1().
Das steht hier für eine 4-stellige Zahl, wovon eine Stelle hinter dem Komma steht.


Ich schlage vor, Du liest im Handbuch nochmal die Grundlagen zur
Programmiersprache C2 durch. Auch solltest Du die Beispiele im Ordner "Samples"
der IDE durcharbeiten.
Auch könnte das Buch MSR mit C-Control II evtl. nicht schaden.

Da Du vorher mit der CC1 gearbeitet hast, ist die umgewöhnung von Basic auf C2
sicher nicht leicht.
Halte Dir aber bitte immer vor Augen, daÃ? C2 kein Basicdialekt, sondern ein C-Dialekt ist.
Dafür steht das C in C2.
Und, nein, man kann keine Programme der CC1 für die CC2 konvertieren.
Es sind zwei völlig unterschiedliche Systeme, die nur den Namen C-Control gemeinsam haben.
Die Virtuelle Maschine der CC2 funktioniert anders als das OS der CC1.

Der Vollständigkeit halber mal das Programm, damit es das macht, was Du
wahrscheinlich wolltest.

int temp1, temp2; // Variabeln temp1 und temp2 definieren
thread main
{
 stports.init();
 lcdext.init();
 ds1631.init(0); //DS1631 initialisieren an Sub-Addr.0
 ds1631.init(6); //DS1631 initialisieren an Sub-Addr.6

 lcdext.print("Heiz:      xDF""C");
 lcdext.goto(2,0);
 lcdext.print("Boil:      xDF""C");
 loop
 {
  temp1=ds1631.readi2(0);
  temp2=ds1631.readi2(6);
  lcdext.goto(1,5);
  lcdext.zahl4n2(temp1);
  lcdext.goto(2,5);
  lcdext.zahl4n2(temp2);
  sleep 1000; //1 Sekunde warten
 }
}



MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: