INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Durchgangsprüfung
06.01.2015, 11:51
Beitrag #9
RE: Durchgangsprüfung
(06.01.2015 10:43)isow schrieb:  Danke für die Antworten,
ich werde jetzt erstmal auf die Widerstände warten, um sicher zu gehen daß ich der Platine nicht schade und dann weitermachen.

Moin,
hmm...wozu auf Widerstände warten ?... Bei den Digitaleingängen kann man den Pull Up Widerstand per Befehl einfach einschalten:

pinMode(Eingang, INPUT);
digitalWrite(Eingang, HIGH); // das schaltet den Pull Up ein

oder wie der Kollege schreiben würde:
pinMode(Eingang, INPUT_PULLUP);

mehr benötigst du zum Leitungstest nicht.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2015, 18:06
Beitrag #10
RE: Durchgangsprüfung
Hallo,
mittlerweile zweifel ich an meiner Methode einen digitalen Pin (23) als Output zu deklarieren (dh. er bekommt 5V) und nachzuschauen ob an einem anderen digitalen Pin (22) die Spannung ankommt.
Testläufe mit diversen Änderungen LOW/HIGH an verschiedenen Stellen haben keinen Erfolg gebracht.
Mir ist der Sinn von digitalInput-Pins immer noch nicht ganz klar.
Alle Beispiele die ich über Buttons gefunden habe (weil das etwa vergleichbar ist) gehen über eine Verbindung GND mit Input.
Daher die Frage: Kann ein Pin mit digital Output überhaupt über ein Signal den Zustand (LOW/HIGH) am Pin mit digtalInput steuern??
Oder muß ich grundsätzlich anders herangehen?

Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2015, 18:44
Beitrag #11
RE: Durchgangsprüfung
(07.01.2015 18:06)isow schrieb:  mittlerweile zweifel ich an meiner Methode einen digitalen Pin (23) als Output zu deklarieren (dh. er bekommt 5V) und nachzuschauen ob an einem anderen digitalen Pin (22) die Spannung ankommt.
Testläufe mit diversen Änderungen LOW/HIGH an verschiedenen Stellen haben keinen Erfolg gebracht.
Mir ist der Sinn von digitalInput-Pins immer noch nicht ganz klar.
Alle Beispiele die ich über Buttons gefunden habe (weil das etwa vergleichbar ist) gehen über eine Verbindung GND mit Input.
Daher die Frage: Kann ein Pin mit digital Output überhaupt über ein Signal den Zustand (LOW/HIGH) am Pin mit digtalInput steuern??
Oder muß ich grundsätzlich anders herangehen?
Wo genau ist Dein Problem? Du musst doch Deine Logik nur umdrehen.
Vielleicht nochmal zur Erklärung: Ein digitaler Pin (ob jetzt Eingang oder Ausgang) kann entweder LOW oder HIGH sein. Wenn Du einen Eingang offen lässt, dann ist es Zufall, welchen Zustand er annimmt. Du kannst also Prinzipiell an einem digitalen Eingangspin nicht sehen, ob er "offen" ist.
Ein Ausweg ist ein Pullup- oder Pulldown-Widerstand. Der zieht einen offenen Pin auf einen definierten Wert. Am einfachsten ist das mit Pullup, da das im Arduino schon eingebaut ist. Wenn Du den Pin jetzt mit +5V verbindest, dann kannst Du keine Aussage treffen, da sowieso in beiden Fällen ("offen" oder "ok") HIGH ist. Entweder durch den Pullup oder durch die +5V.
Deshalb musst Du für eine Durchgangsprüfung mit GND verbinden (was dasselbe ist wie an einen Output-Pin, der auf LOW ist). Dann geht der Pin nur auf LOW, wenn eine Verbindung vorhanden ist. Ansonsten würde der Pullup-Widerstand zuschlagen und das ganze auf HIGH ziehen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2015, 05:54
Beitrag #12
RE: Durchgangsprüfung
@kurti

eventuell wären 2 verschieden Spannungen günstiger, da dann auch Kurzschlüsse zwischen den beiden Leitern in einem Messvorgang sofort auffallen.

Gruß Rainer
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2015, 14:29
Beitrag #13
RE: Durchgangsprüfung
Hallo zusammen,
das Problem lag in einem Knoten im Kopf.
Dieser ist jetzt gelöst. Out-Pins vorher einzeln an-/ausschalten.
Es klappt alles wie erwartet.

Nochmals besten Dank für die Hilfe.
isow
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 23:22
Beitrag #14
RE: Durchgangsprüfung
Hallo,
ich greife das Thema nochmal auf.
Ich habe ein ähnliches Projekt vor, allerdings will ich nicht nur zwei Leitungen sondern einen ganzen Kabelbaum prüfen. Insgesamt komme ich auf 69 Ausgänge und 97 Eingänge.
Im kleinen (2 Aus- und 3 Eingänge) habe ich das ganze schon getestet und es funktioniert wunderbar. Jetzt stellt sich mir aber das Problem das auch der Arduino Mega "nur" 54 DIOs hat. Meine erste Idee war 4 Megas mittels I2C zu verbinden, das finde ich aber unschön.
Nachdem ich mich kurz mit dem MCP23017 beschäftigt habe, ist momentan mein Plan mit Schieberegistern 9x 74HC595 und 13x 74HC165 zu arbeiten. Kann man größere Mengen von Schieberegistern einfach hintereinander hängen oder benötigt man da noch irgendwelche Treiber Schaltungen?
Gibt es noch "bessere" Möglichkeiten dem Arduino mehr Ein-/Ausgänge zu verpassen?

Und falls es jamenden Interessiert, mein Test Sketch:
Code:
//---- Pins
// Starttaster
int startPin = 13;
// Ausgänge
int outPin[] = {8, 9};
int outPins = sizeof(outPin) / sizeof(outPin[0]);
// Eingänge
int inPin[] = {2, 3, 4};
int inPins = sizeof(inPin) / sizeof(inPin[0]);
// RGB LED
int LED_R = 5;
int LED_G = 6;
int LED_B = 7;
#define COMMON_ANODE;

//---- Messschema
String messschema[] = {
  "100",
  "011"
};

//---- Status und Fehlermeldungen
String status[] = {
  "out1 -> in1",
  "out2 -> in2 -> in3"
};
String fehler[] = {
  "Fehler in Verbindung out1 -> in1",
  "Fehler in Verbindung out2 -> in2 -> in3",
};

//---- Variablen
int delayTime = 100;
String messergebnis = "";
int i, j;
boolean run = false;

void setup() {
//---- Serielle Konsole starten
  Serial.begin(9600);

//---- pinModes setzen
// Start Taster
  pinMode(startPin, INPUT_PULLUP);
// RGB LED
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
// Eingänge
  for(i=0; i < inPins; i++) {
    pinMode(inPin[i], INPUT_PULLUP);
  }
// Ausgänge
  for(i=0; i < outPins; i++) {
    pinMode(outPin[i], OUTPUT);
    // Ausgang auf HIGH setzen
    digitalWrite(outPin[i], HIGH);
  }
// RGB LED blau machen
  setColor(0, 0, 255);

}

void loop() {
  if (run) {
    Serial.println(status[i]);
    digitalWrite(outPin[i], LOW);
    delay(delayTime);
    messergebnis = "";
    for(j = 0; j < inPins; j++) {
      if (digitalRead(inPin[j]) == LOW) {
        messergebnis = messergebnis + "1";
      } else {
        messergebnis = messergebnis + "0";
      }
    }
    if (messergebnis == messschema[i]) {
      digitalWrite(outPin[i], HIGH);
      if (i >= outPins - 1) {
        setColor(0, 255, 0);
        Serial.println("Pruefung abgeschlossen - alles OK");
        i = 0;
        run = false;
      } else {
        // nächster Prüfschritt
        i++;
      }
    } else {
      setColor(255, 0, 0);
      Serial.println("Messung nicht in Ordnung");
      Serial.println(fehler[i]);
      run = false;
    }
    delay(delayTime);
  } else if (digitalRead(startPin) == LOW) {
    //---- Starttaster gedrückt, neuen Testlauf starten
    Serial.println("neuer Testlauf");
    run = true;
    digitalWrite(outPin[i], HIGH);
    i = 0;
    setColor(0, 0, 0);
  }
}

void setColor(int red, int green, int blue) {
  #ifdef COMMON_ANODE
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogWrite(LED_R, red);
  analogWrite(LED_G, green);
  analogWrite(LED_B, blue);  
}

Gruß Bob

Elektronische Torwand
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 08:51
Beitrag #15
RE: Durchgangsprüfung
(31.10.2015 23:22)MeisterBob schrieb:  Hallo,
ich greife das Thema nochmal auf.
Ich habe ein ähnliches Projekt vor, allerdings will ich nicht nur zwei Leitungen sondern einen ganzen Kabelbaum prüfen. Insgesamt komme ich auf 69 Ausgänge und 97 Eingänge.
Im kleinen (2 Aus- und 3 Eingänge) habe ich das ganze schon getestet und es funktioniert wunderbar. Jetzt stellt sich mir aber das Problem das auch der Arduino Mega "nur" 54 DIOs hat. Meine erste Idee war 4 Megas mittels I2C zu verbinden, das finde ich aber unschön.
Nachdem ich mich kurz mit dem MCP23017 beschäftigt habe, ist momentan mein Plan mit Schieberegistern 9x 74HC595 und 13x 74HC165 zu arbeiten. Kann man größere Mengen von Schieberegistern einfach hintereinander hängen oder benötigt man da noch irgendwelche Treiber Schaltungen?
Gibt es noch "bessere" Möglichkeiten dem Arduino mehr Ein-/Ausgänge zu verpassen?
...

Hallo Bob,
also bei der dazu erforderlichen Hardware kannst du dann zeigen was ein Meister ist...Big Grin
Nun die aktuellen Mikrocontroller verfügen hier über SPI ind I2C als Erweiterungsmöglichkeit die dann auch die von dir aufgeführten Schieberegister bedienen. Hier ist es dann der einfachste Fall wenn man die Schieberegister Kaskadieren tut. Dies erfordert dann aber in deinem Fall 9 oder 13 I/O Befehle um z.B. einen Port zu lesen oder zu schreiben was dann in Summe wohl viel Zeit kostet. Früher als die Controller noch nackt unterwegs waren wurden auch I/O Vorgänge über den Datenbus abgewickelt der je nach System 8/16 Bit breit war. Dies könnte man mit einem Mega auch nachvollziehen nur das der Datenbus dann eben über einen 8 Bit Port simuliert wird und man sich dann den Datentransfer über einen Assemblerbefehl organisiert da die Arduino IDE das nicht unterstützt. Dann kämen hier 8 Bit Latches wie der 74HCT573, 8 Bit Buffer wie der 74HCT540 und der Adressdecoder 74HCT138 zum Einsatz, letzterer müßte dann kaskadiert werden um die 13 Enable Signale zu erreichen. Und sollte man nicht mit dem R/W Signal zwischen Ein und Ausgang sicher umschalten können müßte man den Adressdecoder doppelt ausführen. Insgesamt benötigt die Chose dann an Ports: 8 f. Datenbus, 4 f. Adressen, 2 f. Steuersignale R + W....bei letzterem könnte auch noch das dazukommen...habs gerade nicht ganz aufgelöst..
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 11:10 (Dieser Beitrag wurde zuletzt bearbeitet: 04.11.2015 12:30 von MeisterBob.)
Beitrag #16
RE: Durchgangsprüfung
Den Programmablauf stelle ich mir so vor:
- alle Ausgänge auf HIGH zu schalten
- ein LOW in die Ausgangsregister schieben
- das Bitmuster an den Eingängen einlesen und mit den erwarteten Werten vergleichen
- das LOW einen Pin weiter schieben
- zurück zu Schritt 3
- wenn irgendwo ein Fehler auftritt: Ausgabe auf Display / rote LED
- wenn alle Ausgänge durchgetestet sind und kein Fehler aufgetreten ist: grüne LED

Ich habe das ganze mal in einen Schaltplan gezeichnet, ich hoffe da sind keine groben Schnitzer drin. Der Kabelbaum hängt dann zwischen den ganzen Jumpern (bzw. werde ich da passende Stecker montieren)

Kann mir jemand sagen wie es mit der Belastbarkeit der Ausgänge des 74HC595 aussieht, wie viele LEDs kann ich da maximal dran hängen?


Angehängte Datei(en) Thumbnail(s)
   

Gruß Bob

Elektronische Torwand
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste