Forum: Platinen Routen von GPIOs von Microcontrollern


von Michael S. (rbs_phoenix)


Lesenswert?

Hallo zusammen. Ich habe da mal eine Frage zum Vorgehen beim routen von 
GPIOs.
Ich habe aktuell z.B. einen relativ neuen dsPIC mit 64 Pins. Es soll ein 
paar Bauteile mit SPI dran, ein paar PWMs, 8bit Schnittstelle für ein 
Display und sonstige Dinge, wie z.B. ein paar "Schalttransistoren". Wie 
plane ich im Schaltplan vorher schon ein schönes bzw. effektives Design 
ein? Mein bisheriges vorgehen war so, dass ich im Schaltplan die festen 
PINs angeschlossen habe. Im oben genannten Fall also Versorgungsspannung 
und PWM. Anschließend gleich die 0..7 Bits eines Ports, die beim Gehäuse 
auch nebeneinander liegen (oft PORT B oder D), für das Display, damit 
ich in der Software mit dem Byte direkt arbeiten kann. Aber dann fängt 
es an. Welchen ICSP Port nehme ich, welche Remapable Pins für SPI und 
welche restlichen Pins für den Rest? Bisher war mein Vorgehen so, dass 
ich die Bauteile platziert und die festen Netze geroutet habe. Den Rest 
(also SPI, Transistoren, CS-Leitungen, ...) hab ich dann von den 
Bauteilen nach und nach nahe an den Microcontroller gelegt und habe dann 
erst geguckt, an welchen Pin ich dies oder jenes anschließe. Wenn ich 
von vornherein festgelegt hätte, wäre das vermutlich umständlicher.

Meine Frage ist einmal: Geht das irgendwie besser? Ich habe das einmal 
bei nem YouTube-Video gesehen, wo dann erst der komplette Schaltplan 
fertig war, dann alle Bauteile fest platziert wurde und dann 
anschließend geroutet wurde, so wie die Bauteile lagen, sprich ohne 
Umplatzieren der Bauteile.
Ich hatte das jedoch einmal so, dass ich durch nachträgliche Belegung 
der uC-Pins bei bestehender Bauteilplatzierung das Layout auf die Hälfte 
der Größe bekommen habe, inkl. eine Reduktion der Vias um ein 
vielfaches. Was auch logisch ist, wenn nicht alle Leiterbahnen kreutz 
und quer gehen.

Meine zweite Frage ist, ob es für meine Vorgehensweise eine 
Erleichterung gibt? So dass ich sagen kann "meine MOSI-Leitung kann an 
freie Pins von Pin 2,6,12,16,18,... , die SCLK-Leitung auch an freie 
Pins von Pin 2,6,12,16,18,..." und dann kann ich das Routen (speziell 
mit Eagle)? Ich kann Leitungen zwischen all diesen Pins und dem SCLK Pin 
des Slaves machen, doch dann muss ich nach verbinden des Bauteils alle 
restlichen Anschlüsse wieder löschen, bevor ich dann die übrig 
gebliebenen Pins mit dem Netz MOSI verbinde. Oder geht das nicht bei 
Eagle aber bei Software xy schon?

Vielen Dank schonmal

von Max H. (hartl192)


Lesenswert?

Ich gehe immer so vor: Ich überlege mit beim Zeichnen des Schaltplanes, 
wo die einzelnen Pins liegen und wie es bein Layouten praktisch sein 
könnte. Wenn ich danach beim Routen etwas unpassend finde ändere ich es, 
falls möglich, im Schaltplan.

von Georg (Gast)


Lesenswert?

Michael Skropski schrieb:
> meine MOSI-Leitung kann an
> freie Pins von Pin 2,6,12,16,18,

Bei erwachsenen Layout-Systemen sind die Stichworte Pin Swap, Gate Swap 
und Back Annotation, bei Eagle vermute ich ist das nicht so weit 
ausgefuchst, aber sicher weiss ich das nicht.

Pin Swap heisst zuerst mal, dass du in der Bauteildefinition solche Pins 
als tauschbar definierst, z.B. sind die beiden Eingänge eines 
Und-Gatters eine Gruppe von 2 tauschbaren Pins, die 4 Gatter in einem IC 
sind als komplette Gates tauschbar. Dann kannst du beim Layouten manuell 
oder automatisch solche Pins/Gates vertauschen. Die Back Annotation 
sorgt dann dafür, dass diese Änderungen in den Stromlaufplan übernommen 
werden.

Gruss Georg

von Teo D. (teoderix)


Lesenswert?

Georg schrieb:
> Bei erwachsenen Layout-Systemen sind die Stichworte Pin Swap, Gate Swap
Würde bei Eagle funktionieren, wenn die Bibliotheken so erstellt wären 
:(
Müsste man also, bei µCs(Pic), selber ändern. Bei einfachen Logig-ICs 
waren sie, bei den von mir eingesetzten, immer bereits so erstellt.

Georg schrieb:
> und Back Annotation
Funst bei Eagel leider nicht o. ich hab keinen Plan wie. :(

von Simon (Gast)


Lesenswert?

Ich routete letzthin eine Platine, die recht viele völlig "freie" GPIO 
eines STM32 verwendete.

Ich ging dann (mit KiCad) so vor:
Zuerst habe ich mal ganz grob eine Zuordnung gemacht, d.H. die GPIO so 
platziert, dass die Seite auf dem Chip passt. Mit einem erst sehr grob 
platzierten Layout, dem Schaltplan und dem Datenblatt des STM32.
Dann habe ich sämtliche Leitungen einfach mal auf's Geratewohl bis kurz 
vor den Prozi gezogen. Das resultierte dann in einem mehr oder weniger 
verwurstelten Rudel Rubberbands.
Dann habe ich das Schematool und das Layouttool gleichzeitig geöffnet 
und iterativ Pins getauscht. Da ich mit Labels arbeitete, ging das ruck 
zuck. Reine forward annotation. Und nie viel auf einmal. Maximal 
vielleicht eine zyklische Vertauschung von drei oder vier GPIO. Was wie 
getauscht werden muss, ist so sehr einfach ersichtlich.
Und So habe ich mich suksessive zum Ziel hingearbeitet.

Ich weiss, das ist Steinzeitvorgehen. Aber es funktioniert eigentlich 
recht gut; man kommt so ziemlich schnell zum Ziel.

Gruäss
Simon

von Max G. (l0wside) Benutzerseite


Lesenswert?

Georg schrieb:
> Michael Skropski schrieb:
>> meine MOSI-Leitung kann an
>> freie Pins von Pin 2,6,12,16,18,
>
> Bei erwachsenen Layout-Systemen sind die Stichworte Pin Swap, Gate Swap
> und Back Annotation, bei Eagle vermute ich ist das nicht so weit
> ausgefuchst, aber sicher weiss ich das nicht.

Doch, Eagle kann das schon. Man muss es in der Bauteildefinition nur 
anlegen. Gute Anregung, muss ich bei mir mal einarbeiten.

In der Vorgehensweise arbeite ich aber ähnlich wie Georg. Erst mal eine 
halbwegs plausible Belegung wählen, und dann so lange Pins tauschen, bis 
die Anzahl der Vias minimal wird.
Layoutergebnisse sind immer nur ein (mathematisch) lokales Optimum, das 
globale Optimum dürfte so ziemlich unerreichbar sein.

Max

von Somebody123 (Gast)


Lesenswert?

Hallo,

ich mache immer ein Excel mit allen im Design vorkommenden Funktionen 
für alle Pins.
Dann ordne ich die Funktionen auf die Pins zu. Dabei lege ich mir das 
Blockschaltbild auf den zweiten Bildschirm, da sieht man dann schon wo 
sich Signale überkreuzen, wo die Stecker liegen und ähnliches.
Ich beginne immer mit jenen Funkionen, wo es an wenigsten alternative 
Möglichkeiten gibt, z.B. Parallele zuerst, dann die SPIs und UARTs, dann 
die Analogen, dann die GPIOs.
Beim Layouten kann man dann noch einges tauschen. Man muss aber meist 
nicht viel ändern, wenn man die Schritte zuvor sauber gemacht hat.

Du hast aber einen PIC. Dank Pin Remapping hast du es eh leicht...

von San L. (zwillingsfreunde)


Lesenswert?

Also bei uns in der Firma werden immer zuerst die Schaltpläne fertig 
erstellt. Erst dann beginnt man mit dem Layout. Trick dabei: Richtige 
Positionierung ist alles.
Man sollte nicht versuchen, Anschlüsse im Schema zu ändern, sondern die 
Bauteile anders zu platzieren.

von Simon (Gast)


Lesenswert?

San Lue schrieb:
> Man sollte nicht versuchen, Anschlüsse im Schema zu ändern, sondern die
> Bauteile anders zu platzieren.

Naja, aber wenn Du, sagen wir mal, einen Stecker hast, auf den 20 freie 
GPIO geführt sind, dann kann es durchaus Sinn machen, das Schema 
nachträgich zu ändern. Die Ports sind in der FW ja (hoffentlich) eh 
nicht im ganzen Code verstreut, sondern in einem einzelnen .h File.

Also: Schema zeichnen (wie's gerade kommt) --> Layouter macht (nach 
Absprache mit HW-Entwickler, sofern nicht Personalunion) Optimierungen 
--> optimiertes Schema beim --> .h File anpassen --> fertig.

Warum sollte man das nicht machen?

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Erstmal, Eagle kann zwar Pinswap (und gateswap) aber das halt ich bei 
einem uC für nicht so gut. Manchmal kann man Pins einfach tauschen, 
manchmal überhaupt nicht (wenn z.B. die Bits in der Software ihre 
Wertigkeit behalten sollen). Auch macht einem hier die Doppelbelegung 
einen Strich durch die Rechnung: normale I/O Pins könnte ich zwar 
tauschen, ein Output Compare aber nicht so einfach...

ich hab mir das so angewöhnt: ich lege zuerst keine feste verbindung im 
Schaltplan, sondern auf beiden Seiten (also am uC und am Ziel des 
Signals) je einen Testpunkt, denn kann mandann im layout auch 
positionieren. Dann schau ich wie ich am 
einfachsten/kürzesten/kreuzungsfreiesten die testpunkte "verheiraten" 
kann. Wenn mir das passt, schmeiß ich die testpunkte raus und mach die 
direkte Verbindung im Schaltplan. Danach hab ich die (nur mehr sehr 
kurzen) Luftlinien im Board, die ich dann nur mehr verbinden muss.

Achtung: of bewährt es sich, zuerst die Verbindung herzustellen, und 
erst dann die Testpunkte zu löschen, weil Eagle sonst gerne zuviel 
Leiterbahnen auflöst.

von Michael S. (rbs_phoenix)


Lesenswert?

Ich werde mal gucken, was ich mit Pinswap hinbekomme. Meine Ideale 
Vorstellung wäre, eine Art Klasse/Gruppe von Pins machen zu können, und 
dort dann verschiedene Netznamen zu verknüpfen. Also kann ich z.B. eine 
Klasse "RPs" (Remappable Pins) und eine "RPIs" (Remappable Pin Inputs) 
machen. Danach könnte ich die Netze MOSI und SCLK zur Klasse RPs 
hinzufügen und dann werden im Layout die Luftlinien zu den Pins 
angezeigt, jedoch nicht von SCLK zu MOSI.
Aber das ist wohl Wunschdenken.

Michael Reinelt schrieb:
> Manchmal kann man Pins einfach tauschen,
> manchmal überhaupt nicht (wenn z.B. die Bits in der Software ihre
> Wertigkeit behalten sollen). Auch macht einem hier die Doppelbelegung
> einen Strich durch die Rechnung: normale I/O Pins könnte ich zwar
> tauschen, ein Output Compare aber nicht so einfach...

Compare Output kann man meines wissens auch auf die Remappable Pins 
legen. Wenn nicht, ist dies natürlich auch eine Verbindung, die man von 
Anfang an fest verdrahten muss, es sei denn, es gibt mehrere 
Compare-Module/Ausgänge.

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.