Forum: Mikrocontroller und Digitale Elektronik Kabeltester c++


von momo2905 (Gast)


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

von Patrick O. (sir-patrick)


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.

von Matthias Kölling (Gast)


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 
;)

von Horst (Gast)


Lesenswert?

wie schaut es aus mit selberschreiben?

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

von Matthias Kölling (Gast)


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

von Sebastian M. (izaseba)


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 ;-)

von momo2905 (Gast)


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!!!!

von Bastler (Gast)


Lesenswert?

Da reichen zwei verschachtelte Schleifen!

Ausgangspin
   Eingangspin lesen

von Kay .. (momo2905)


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

von Unbekannter (Gast)


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:
1
  extern int ueberpruefe_kabel();

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

von STK500-Besitzer (Gast)


Lesenswert?

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

Allerdings mit negativem Vorzeichen.

von Unbekannter (Gast)


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:
1
  extern char * fertiges_ergebnis_kabeltest();

von Unbekannter (Gast)


Lesenswert?

> Allerdings mit negativem Vorzeichen.

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

von Kay .. (momo2905)


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

von Unbekannter (Gast)


Lesenswert?

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

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


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

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

von STK500-Besitzer (Gast)


Lesenswert?

Und dabei ist morgen erst der Erste...

von Kay .. (momo2905)


Lesenswert?

STK500-Besitzer wrote:
> Und dabei ist morgen erst der Erste...


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

von Kay .. (momo2905)


Lesenswert?

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

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


Danke

von STK500-Besitzer (Gast)


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.

von Unbekannter (Gast)


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.

von Kay .. (momo2905)


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)

von Unbekannter (Gast)


Lesenswert?

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

von Guest (Gast)


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.

von Kay .. (momo2905)


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)

von Sven P. (Gast)


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.

von STK500-Besitzer (Gast)


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.

von Sven P. (Gast)


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.^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.