mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kabeltester c++


Autor: momo2905 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute

Ich habe folgendes Problem in C++

Ich will einen Kabeltester mit einem Atemel 128 bauen.
Es sollen 16 Adern eines Kabels auf Ducrchgang und Kurzschluß zu 
benachbarten Pins getestet werde.
Mit Hilfe des Atmels soll eine Bitkombination 0101010101010101 und 
anschliessend anders rum 1010101010101010.
Somit denke ich sind alle nötigen Tests vorhanden.
Meine Frage ist, wie heisst bzw. wie nennt sich die Funktion die in C++ 
diesen Befehl ausführt und mir dann nur die Leitung anzeigt, die defekt 
ist? Ich weiß einfach nicht wie ich das in c++ schreiben soll!!!??


Kann mir da jemand helfen ?!?!?


Danke
111

Autor: Patrick O. (sir-patrick)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich würd deine Kombination nicht anwenden. Wenn du herausfinden 
möchtest, welche Pins kurzgeschlossen sind, solltest du immer nur an 
einen Ausgangspin die Spannung anlegen, und dann für die Inputpins 
abfragen. Sollte dann wo, außer beim selben Eingangs- wie Ausgangspin, 
eine Spannung anliegen, weißt du, dass er an jenem Pin eine Spannung 
bekommt, die nicht dem Eingang entspricht - kurz ein Kurzschluss.
Bei deiner Idee könntest du dir dann quasi aussuchen, welchen Outputpin 
du als Fehlerquelle nimmst - wenn ich das alles richtig verstanden habe.

z.B

Ausgang
       0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
       | | | | | | |_| | | |  |  |  |  |  |
       | | | | | | | | | | |  |  |  |  |  |
       | | | | | |_| | | | |__|  |  |__|
       | | | | | | | | | | |  |  |  |  |  |
       |_| | | | | | | | | |  |__|  |  |  |
       | | | | | | | | |_| |  |  |  |  |  |
       | | | | | | | | | | |  |  |  |  |  |
       | | | | | | | | | | |  |  |  |  |  |
Eingang0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Zuerst hoffe ich mal, dass keines deiner Kabel mal so aussehen würde.

                             Pins  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Wenn Vcc bei Pin1 -> Eingangsport: 1 1 0 0 0 0 0 0 0 0 0  0  0  0  0  0

Wenn Vcc bei Pin12-> Eingangsport: 0 0 0 0 0 0 0 0 0 0 1  1  1  0  0  0

Zum Beispiel halt. Solch eine Abfrage müsstest du Pin für Pin machen
Du könntest dich spielen, und die Kombinationen auslassen, die du 
bereits ausgemessen hast.

Wenn du also alle Kombinationen von Ausgangspin 2 z.B. durch hast, 
kannst du bei der Messung aller I-Pins bei Vcc->O-Pin3 die I-Pins0 bis 2 
auslassen, da du sie ja schon ausgemessen hast. Sollte aber bei 16Pins 
nicht den Aufwand Wert sein.

Ich hoffe, du verstehst jetzt, weshalb ich deine 1010101 Kombination 
nicht empfehle.

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Meine Frage ist, wie heisst bzw. wie nennt sich die Funktion die in C++
diesen Befehl ausführt und mir dann nur die Leitung anzeigt, die defekt
ist?"

Wenn ihr den gefunden habt, dann sagt mir bitte den Befehl, der einen 
beliebigen hex-record auf die page size eines AVR umbiegt. Das müßte 
eigentlich ein Standardbefehl sein aber ich komm im Moment nicht drauf 
;)

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie schaut es aus mit selberschreiben?

In der Zeit, die du hier wartest hat man das ganze 3x programmiert

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Horst
Ich glaub Du hast meinen Smily übersehen.
Also für den Parser habe ich heute schon den ganzen Tag investiert. Wenn 
Du 3xmal so schnell bist, warum hast Du dann heute morgen nicht gleich 
die Ärmel aufgekrempelt. Dann hätte ich den fertigen Code ja schon vor 8 
Stunden kriegen können. Ich glaube für Dich brauche ich keinen Smily 
setzen. Der wird eh wieder übersehen.


Gruß Matthias

Autor: Sebastian Mazur (izaseba)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Meine Frage ist, wie heisst bzw. wie nennt sich die Funktion die in C++
>diesen Befehl ausführt und mir dann nur die Leitung anzeigt, die defekt
>ist?

Das kann C nicht, darür würde ich Bascom nehmen ;-)

Autor: momo2905 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick

Danke für deine Infos, klingt supi!
Ich habe ein 100 adriges Flachbandkabel, die Abfrage wäre "denke ich " 
in C++ sehr lang oder ?!?
Ich bin ein absoluter C++ Neuling! Kannst du mir ein Tip geben, wie die 
Abfrage für die ersten 8 Pins lautet?!?!?!

Danke schon mal!!!!

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da reichen zwei verschachtelte Schleifen!

Ausgangspin
   Eingangspin lesen

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bastler wrote:
> Da reichen zwei verschachtelte Schleifen!
>
> Ausgangspin
>    Eingangspin lesen

Hallo das fertige Ergebniss, sollte mir dann schon über C++ mitteilen, 
welcher Pin defekt ist.

Gruß und Danke

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Meine Frage ist, wie heisst bzw. wie nennt sich die Funktion die
> in C++ diesen Befehl ausführt und mir dann nur die Leitung anzeigt,
> die defekt ist?

Das ist einfach. Die Funktion lautet:
  extern int ueberpruefe_kabel();

Rückgabewert "0" bedeutet, alles in Ordnung. Ansonsten welche Ader 
defekt ist.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Rückgabewert "0" bedeutet, alles in Ordnung.
>Ansonsten welche Ader defekt ist.

Allerdings mit negativem Vorzeichen.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hallo das fertige Ergebniss, sollte mir dann schon über
> C++ mitteilen, welcher Pin defekt ist.

Ach so, da habe ich Dich falsch verstanden. Diese Funktion heisst:
  extern char * fertiges_ergebnis_kabeltest();

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Allerdings mit negativem Vorzeichen.

Ja, negatives Vorzeichen bedeutet natürlich "Verpolt". Aber ich dachte, 
das ist allgemein bekannt.

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo klingt supi! Danke
aber wie schreibe ich das dann in C++ für zum Beispiel die ersten 8 
Pins???
Denn ich schalte über Chipselect jeweils 8 Pins von 100 zu?!?
Wäre über Hilfe in C++ Schreiben sehr dankbar.

Danke

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber wie schreibe ich das dann in C++ für zum Beispiel
> die ersten 8 Pins???

Na, das ist nicht schwer:
  int pin_nummer(int pin, int anzahl)
  {
    return pin * anzahl < 8 ? 0 : 0;
  }


> Denn ich schalte über Chipselect jeweils 8 Pins von 100 zu?!?

Ja, das ist klar. Am besten folgendes verwenden:
  extern void chip_select( int pingruppe, int signal );

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dabei ist morgen erst der Erste...

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
> Und dabei ist morgen erst der Erste...


LOL
Sorry aber ich habe keine Ahnung von C++ ! :o)

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unbekannter wrote:
>> aber wie schreibe ich das dann in C++ für zum Beispiel
>> die ersten 8 Pins???
>
> Na, das ist nicht schwer:
>
>
>   int pin_nummer(int pin, int anzahl)
>   {
>     return pin * anzahl < 8 ? 0 : 0;
>   }
> 
>
>
>> Denn ich schalte über Chipselect jeweils 8 Pins von 100 zu?!?
>
> Ja, das ist klar. Am besten folgendes verwenden:
>
>
>   extern void chip_select( int pingruppe, int signal );
> 

Kannst du mir vielleicht über email weiter helfen ? Ich bräuchte dafür 
mehr Erklärung und Hilfe?!?


Danke

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>LOL
>Sorry aber ich habe keine Ahnung von C++ ! :o)

Da fällt mir ein, dass ich meinen Akkuschrauber wegen unserer Gartentür 
und der fehlenden Latten am Zaun laden muß. Die Zaunpfähle sind alle 
noch in Ordnung.


Übrigens vergisst der Unbekannte immer, die richtige Include-Datei zu 
nennen.
Die bekommt man nur per NDA von Bill Gates (Windows-Version) oder Linus 
Torwalds (Linux) persönlich. Für andere Betriebssystem gibt es die 
natürlich nicht. Auch ihr Name ist so geheim, dass weder Google noch die 
CIA ihn wissen.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kannst du mir vielleicht über email weiter helfen ?

Ja gerne.

Schreib einfach Deine Email-Adresse und vollen Namen hier in den Thread 
und ich werde mich bei Dir melden.

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unbekannter wrote:
>> Kannst du mir vielleicht über email weiter helfen ?
>
> Ja gerne.
>
> Schreib einfach Deine Email-Adresse und vollen Namen hier in den Thread
> und ich werde mich bei Dir melden.

Meine email routername12@aol.com ich bin der Kay


Danke :o)

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und Dein Nachname? Ohne den weiss ich ja nicht, was ich in mein 
Email-Programm eintragen soll.

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kay: Lass dich hier mal nicht verschaukeln! Zugegeben, die Frage nach 
einer C++ Funktion "Kabeltest" ist etwas unglücklich...

Lies dier mal das (sehr gute) GCC Tutorial hier durch.
Du kannst ja einfach dein Kabel direkt an den AVR anklemmen und jeweils 
einen Pin auf 5V setzen. Dann gehst du mit einer Schleife alle 
Eingangs-Pins, an denen das andere Ende vom Kabel hängt, durch und 
prüfst, ob nur der Pin, der zu dem Ausgangs-Pin gehört, 5V führt.

Wenn das nicht so ist, hast du irgendwo einen Fehler (logischerweise)

Du bräuchtest dann halt 16 Ausgänge und 16 Eingänge, wenn der AVR das 
nicht hat (kenne den Mega128 nicht auswendig), müsstest du dir mit 
Schieberegistern o.ä. weiterhelfen.

Autor: Kay ... (momo2905)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guest wrote:
> @Kay: Lass dich hier mal nicht verschaukeln! Zugegeben, die Frage nach
> einer C++ Funktion "Kabeltest" ist etwas unglücklich...
>
> Lies dier mal das (sehr gute) GCC Tutorial hier durch.
> Du kannst ja einfach dein Kabel direkt an den AVR anklemmen und jeweils
> einen Pin auf 5V setzen. Dann gehst du mit einer Schleife alle
> Eingangs-Pins, an denen das andere Ende vom Kabel hängt, durch und
> prüfst, ob nur der Pin, der zu dem Ausgangs-Pin gehört, 5V führt.
>
> Wenn das nicht so ist, hast du irgendwo einen Fehler (logischerweise)
>
> Du bräuchtest dann halt 16 Ausgänge und 16 Eingänge, wenn der AVR das
> nicht hat (kenne den Mega128 nicht auswendig), müsstest du dir mit
> Schieberegistern o.ä. weiterhelfen.

Hallo
ja aber ich habe 100 pins . das was mir patrick und auch du geschildert 
haben, klingt sehr logisch nur leider fehlen mir die kenntnisse in c++ 
:o)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tu Schieberegister verketten. Die Adern der einen Seite des Kabelbündels 
klemmst du dann an die Schieberegister, die Adern der anderen über 100 
Dioden alle parallel und dann auf einen Eingang des Mikroprozessors. 
Dann schubste vorne eine '1' rein und guckst, was am Eingang ankommt. 
Dann die Schieberegister eins weiter schubsen und wieder gucken usw.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>die Adern der anderen über 100 Dioden alle parallel

da sollte man auch wieder Schieberegister nehmen, die parallel geladen 
werden können.
Dann kann man auch gleich feststellen, ob hinten das gleiche Kabel 
ankommt, wie vorne ausgewählt wurde und ob es vielleicht auch 
Kurzschlüsse gibt.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
>>die Adern der anderen über 100 Dioden alle parallel
>
> da sollte man auch wieder Schieberegister nehmen, die parallel geladen
> werden können.
> Dann kann man auch gleich feststellen, ob hinten das gleiche Kabel
> ankommt, wie vorne ausgewählt wurde und ob es vielleicht auch
> Kurzschlüsse gibt.

Stimmt, da hast du absolut Recht. Punkt.^^

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.