cable545 Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 ich habe folgendes problem. ich habe eine schleife und möchte diese verlassen, wenn ich von einem board ein low-high-low signal per dip switch bekomme. mir geht es garnicht um die befehle um daten mit dem board auszutauschen. lediglich das verlassen der schleife, wenn der schalter von low auf high und dann von high auf low geschaltet wird, bereitet mir probleme. wäre nett wenn mir jemand helfen kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 Du musst Dir in der Schleife immer die letzten zwei Flankenänderungen speichern und dann entsprechend darauf prüfen und via break aus der Schleife springen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 26. November 2010 Autor Teilen Geschrieben 26. November 2010 ja genau. aber mein problem ist, in was fuer einem konstrukt ich die flankenaenderung ueberpruefe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 Das kommt darauf an, was Du von der Hardware für Signale bekommst und wie sie gesampled sind, denn Du musst ja passend die Signale abtasten, damit Du den Flankenwechsel korrekt findest. Ist die Abtastfrequenz zu hoch, bekommst Du ggf einen Flankenwechsel, der durch Rauschen verursacht wird, ist die Frequenz zu klein, siehst Du den Wechsel nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 26. November 2010 Autor Teilen Geschrieben 26. November 2010 while(!raus) //grosse hauptschleife { if(dipswitch) { while(1) { if(!dipswitch) { raus=1; break; } } } } is das so ok? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 26. November 2010 Autor Teilen Geschrieben 26. November 2010 ja, ich verstehe. in dieser hauptschleife wird die ganze zeit ueberprueft ob sich die stellung der insgesamt acht schalter aendert. wenn sich ein schalter aendert wird der neue wert in eine variable uebernommen. beendet wurde die schleife sonst durch einen kbhit(). nun soll jedoch die schleife durch ein low high low signal vom achten schalter beendet werden. so ist die aufgabenstellung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 Da Dein Code wenig aussagekräftig ist, kann man nicht viel dazu sagen. Ich meine Du hast nur zwei inernander geschachtelte Schleifen, ohne dass man z.B. etwas über die Typen der Variablen aussagen kann. Wie schon gesagt, Du musst den Flankenwechsel detektieren und dazu musst Du eben entsprechende Infos über die Frequenzen und das Sampling haben. Das Board wird in irgendeiner Form die Dip-Schalter-Positionen an den Rechner übermitteln, diese musst Du entsprechend verarbeiten. Ohne genaue technische Spezifikation der Datenübertragung kann man nicht wirklich große Informationen liefern. Je nach Schnittstelle musst Du ggf die Daten kontinuierlich verarbeiten, wobei Du dann in den Bereich des Echtzeitprozesses kommst bzw. Du musst eine Multithreading-Lösung entwickeln und die Daten ggf auch zwischen speichern, so dass Du auf sie innerhalb der Schleife zugreifen kannst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. November 2010 Teilen Geschrieben 26. November 2010 Der Schalter wird von einem Menschen betätigt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cable545 Geschrieben 27. November 2010 Autor Teilen Geschrieben 27. November 2010 (bearbeitet) ok...ich hätte vielleicht mal die schleife mit dem ganzen inhalt laden sollen. hier ist sie.in iDIPswMirror ist immer der letzte wert der dipswitches gespeichert. in der schleife werden erst die aktuellen stellungen der dip-switches gelesen und in iDIPswA gespeichert. anschließend wird in der if-anweisung geprüft ob iDIPswA ungleich iDIPswMirror. wenn ja wird iDIPswMirror aktuallisiert und der status der dipswitches auf ein paar LEDs abgebildet. die LEDs befinden sich ebenfalls auf dem board. unterbrochen wird die schleife momentan durch ein kbhit(). sie soll aber unterbrochen werden wenn der achte dip-switch von low auf high und von high auf low geschaltet wird. int iDIPswA, iDIPswMirror; // Build DIP-Switch Status Mirror outportb (CSCIR, PBDR); // Set IndexPtr. to IndexRegister A8h iDIPswMirror= inportb (CSCDR); // Read IndexRegister A8h enable (); while (kbhit==0) { // Read current DIP-Switch Status. disable (); outportb (CSCIR, PBDR); // IndexPtr.= A8h iDIPswA= inportb (CSCDR); // Read IndexRegister A8h enable (); // Compare current Status with last Status if (iDIPswA != iDIPswMirror) { // DIP-Switch Status change... iDIPswMirror= iDIPswA; printf ("\b\b%02x", iDIPswA & 0xff); // Update Msg. disable (); outportb (CSCIR, PADR); // Update LED´s outportb (CSCDR, iDIPswA & 0xff); enable (); } } ach so. ja die dip schalter werden per hand geschaltet Bearbeitet 27. November 2010 von cable545 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.