- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: Mehr als eine "if" Abfrage. Programm friert ein?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke HaWe,
    habe ich probiert.Negativ.
    Wahrscheinlich nicht wie Du meintest.

    Code:
    if (Temp1) {digitalWrite (x1,HIGH);}
    
    else
    if (Temp2) {digitalWrite(x2,HIGH);}
    
    else
    if (Temp3) {digitalWrite(x1,HIGH);}
    else
    if (Temp4) {digitalWrite(x1,HIGH);}
    Hallo Ceos,
    Sind die Codes nicht überall gleich?
    Ich teste immer mit einem Uno. Der ist fertig auf einem Steckbrett.
    Das läuft dann auch auf dem Promini oder ATTYNI.
    Habe ich damit nur Glück gehabt?
    Die Temperaturen habe ich gewählt, damit ich mit der Hand die Temperaturen ändern kann.
    Der Frequenzumrichter hat mehrere Eingänge.
    Nur fand ich den Multiblock so einfach. Ich kann jeder der 16 Möglichkeiten eine Frequenz zuweisen.
    Zuerst versuchte ich ihn mit Spannung zu regeln.
    10 oder 5 Volt sind möglich. Leider bekam ich die PWM vom Arduino nicht so gut glatt. Dem Frequenzumrichter war es zu rauh.
    Spannungsgesteuert macht für mich mehr Sinn(Das begreife ich so halb)
    Bei diesem Max 6675 Typ K Auswerter, brauchte ich ewig, bis ich überhaupt wusste, auf welchen Wert ich mich beziehen muss. (Auf "temperatur", hoffe das stimmt).

    Nun hatte ich heute Zeit und den Wärmetauscher des Ofens modifiziert.
    Soweit ich das sehe, läuft er jetzt schon ohne Zutun mit 160°C.
    Dann bräuchte ich nur eine if. Einmal über 140°C= 50Hz. Einmal unter 140°C = 30Hz.
    Das geht ja mit der einen if.
    Trotzdem noch eine Frage:

    digitalWrite(x2,x3,x4, LOW);

    Wenn mehrere Ausgänge das Gleiche machen sollen. Wie fasse ich das zusammen?
    Ich mache keinen Hehl draus, ich komme mit dem Programmieren ganz schlecht klar.

    Das Ganze hat wohl überhaupt keinen Zweck. Wenn ich den TYP K Fühler auf über 100°C erhitze, habe ich wenn es unter 100°C werden, 3 Stellen hinterm Punkt. Also 98.345°C zum Beispiel.
    Geändert von achso (24.01.2019 um 15:39 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Es hat geklappt.
    Dadurch, dass ich den Wärmetauscher umgebaut habe, erübrigt sich eine ausgiebige elektronische Steuerung.
    Der Code funktioniert, aber benutzen kann ich ihn nicht.
    Das K Modul schwimmt zu stark.
    Das schein normal zu sein.
    Einen PID REX 100FK02 hatte ich mir zum Testen bestellt.
    Den habe ich nur an den Oszi gehängt.
    Auch hier schwingt es zwischen LOW und HIGH nur so rum. Solange die Temperatur 2°C vor dem Schaltpunkt und 6° hinter dem Schaltpunkt liegt, schalte er sauber durch. Aber in diesem Bereich ist es eine Katastrophe. Merkwürdigerweise gibt es meinem Metrawatt Thermometer (TYP-K) sowas nicht.

    Also warte ich, bis Pollin meinen Kram geschickt hat und baue das mit dem PT1000 auf.

    Danke für Eure Anregungen und Tipps!
    Achim


    Code:
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    const int numRows = 2;
    const int numCols = 16;
    
    #include "max6675.h" //Die MAX6675 Bibliothek
    
    const int max6675SO = 9; // Serial Output am PIN 8
    const int max6675CS = 10; // Chip Select am PIN 9
    const int max6675CLK = 13; // Serial Clock am PIN 10
    
    
    
    // Initialisierung der MAX6675 Bibliothek mit
    // den Werten der PINs
    MAX6675 ktc(max6675CLK, max6675CS, max6675SO);
    const double x1 = A1; //Prog 105 Ausgänge über Transistor
    const double x2 = A2; //Prog 106 zum Umrichter
    const double x3 = A3; //Prog 108
    const double x4 = A4; //Prog 112
    const double x6 = 6;
    //Abgastemperatur
    const float Temp1 = 30;//über 150°
    const float Temp2 = 28;//145°-150°
    const float Temp3 = 26;//140°-145°
    const float Temp4 = 24;//unter 140°
    
    
    
    const long oneSecond = 1000;
    const long oneMinute = oneSecond * 60;
    
    void setup() {
      lcd.begin(numCols, numRows);//Start
      Serial.begin(9600); // Begin der Seriellen Kommunikation mit 9600 Baud
      delay(500); // eine kleine Pause damit der Sensor sich kalibriert
      pinMode(x1, OUTPUT); //Programm 105 Ausgang
      pinMode(x2, OUTPUT);//Programm 106
      pinMode(x3, OUTPUT);
      pinMode(x4, OUTPUT);//Programm 108
      pinMode(x6, OUTPUT);//FWD=Start
    }
    
    void loop()
    {
    
      lcd.setCursor(0, 0); //1. Reihe 1.Zeichen
      lcd.print("Abgastemperatur");  //Schreibt das Wort
      lcd.setCursor(10, 1); //2. Reihe
      lcd.print("Grad");
      lcd.setCursor(2, 1); //2. Reihe 4.Zeichen
      lcd.print(ktc.readCelsius());  //Schreibt den Wert
    
      digitalWrite(x6, HIGH);//Startet den Umrichter
    
    
      // Lesen des Temperaturwertes in Grad Celsius
      double temperatur = ktc.readCelsius();
    
      if (temperatur > Temp1) //über 155°C
    
      {
        digitalWrite(x1, HIGH);//Ist Programm 105 soll auf 40HZ
      }
      else
      {
        digitalWrite(x1, LOW);
    
      }
    
      if ((temperatur < Temp2) ||  (temperatur > Temp1)) //über 145°, aber
        //unter 150°
    
      {
        digitalWrite(x2, LOW);// Programm 106, ca 43 HZ
      } else {
        digitalWrite(x2, HIGH);
      }
      if ((temperatur < Temp3) ||  (temperatur > Temp2)) //über 140°, aber
        //unter 145°
    
      {
        digitalWrite(x3, LOW);// Programm 106, ca 46 HZ
      } else {
        digitalWrite(x3, HIGH);
      }
      if ((temperatur < Temp4) ||  (temperatur > Temp3)) //über 135°, aber
        //unter 140°
    
      {
        digitalWrite(x4, LOW);// Programm 106, ca 50 HZ
      } else {
        digitalWrite(x4, HIGH);
      }
      if (temperatur < Temp4) // unter 135°
      {
        digitalWrite(x4, HIGH);//Programm 108,weniger als 25HZ
    
      }
      else
      {
        digitalWrite(x4, LOW);
    
      }
      Serial.print(temperatur);
      Serial.println("C");
    
    
    
      // 500ms Pause bis zum nächsten Durchlauf
      delay(1000);
    }

  3. #3
    shedepe
    Gast
    Wenn es schwimmt verpass ihm doch einen Tiefpassfilter z.b. in Form eines gleitenden Mittelwerts.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke shedepe,
    das ist es!
    Habe ich auch gleich was drüber gefunden.
    Bisher habe ich es mit Pausen versucht. Es geht fast.
    Ein anderes Problem:
    Der Frequenzumwandler hat auf seinen Eingängen eine Spannung von ca 16V. Wenn man diese gegen gnd legt, macht er dass, was ihm eingegeben wurde.
    Aber auf den offenen Ausgängen liegt eine Restwelligkeit. Nun hatte ich schon die Ausgänge(Sind die A1-A4, D`s ist nicht frei.) mit NPN Trans. versorgt. Diese schalten gegen GND.(In meiner grenzwertigen Dösigkeit hoffte ich, dass die NPN so träge reagieren, dass das Problem weg ist. War wohl nichts.)
    Trotz puffern mit 100n. Das muß doch vom flatterigen MAX6675 kommen??
    Das Beste wäre wohl, ich würde Optokoppler verwenden. Dann wäre der Nano total vom Frequenzumrichter getrennt?
    Heute nicht mehr.
    Dankeschön!
    Achim

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Nur noch mal als Rückmeldung.
    Getestet hatte ich ja am Schreibtisch. Kurze Leitungen, Arduino auf dem Steckbrett.
    Spannungsquelle USB oder auch Netzteil.
    Hier schwamm die Anzeige wie beschrieben.
    Dann hatte ich nur am Schluß ein 15 Sekunden Delay eingefügt und den Nano in einen DIN-A4 Blatt großen Kasten gesetzt. Hier sind noch 6 x SSD Relais, Ein Meanwell Netzteil und diverse Bauteile eng verbaut.
    Dadrüber im extra Gehäuse der Frequenzumrichter. Der Fühler im Rauchrohr des Holzvergasers.
    Das verückte ist, nichts schwimmt mehr. Der Nano steuert 1/4° genau, ohne zu zittern, den Umrichter.
    Ich bin natürlich begeistert. Auch wenn es rätselhaft ist.
    Danke für eure Hilfe.
    Es ist schön, nicht alleine da stehen zu müssen.

    Alles Gute und helft weiter so toll.
    Achim

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 31.05.2011, 08:35
  2. Linux SerialStream.h friert ein bei Open("/dev/ttyUSB0")
    Von TomSawer im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 19.04.2011, 09:42
  3. Antworten: 10
    Letzter Beitrag: 19.03.2009, 19:13
  4. 20x4Display: Abfrage "Busy-Flag" reagiert nicht
    Von Dolfo im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 17.10.2007, 21:56
  5. Stückliste "Mehr Spass mit ASURO Band II"
    Von gandalfsz im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 25.02.2007, 18:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test