Forum: Mikrocontroller und Digitale Elektronik Erfassung der Revision einer Platine wie elegant bewerkstelligen?


von Ramid Panik (Gast)


Lesenswert?

Hallo,

ich frage mich gerade, wie ich auf möglichst elegante Weise die Revision
einer Hardware bzw. einer Platine definiere und in der Firmware später
auslesen kann......

meine Idee bzw. so wie es bisher ist :

Ich nutzen einen ADC-Eingang des µC, an dem ich die "Mittelanzapfung"
eines Spannungsteilers anlege/erfasse.

Die Hardware/Platinen-Revision wird dann über die jeweils bestückten
Widerstände innerhalb des Spannungsteilers definiert.
Daraus ergeben sich unterschiedliche Spannungen am ADC, die ich dann 
auswerten
kann.


Meine Befürchtung ist, dass dieser Spannungsteiler , auch schon ne 
gewisse
Leistung verbrät und sich natürlich auch gewisse Ungenauigkeiten aus den
Toleranzen der verwendeten Widerstände ergeben.........

Gibt es sonst elegantere Lösung um dieses zu machen.....

z.B. dezidierte "Revisionierungsbausteine" also z.B. ein externes EEPROM
oder so?

VG

von Alex W. (Gast)


Lesenswert?

Ramid Panik schrieb:
> ich frage mich gerade, wie ich auf möglichst elegante Weise die Revision
> einer Hardware bzw. einer Platine definiere und in der Firmware später
> auslesen kann......

In diesem Fall kannst du einen EEPROM nehmen und diesen mit einem Wert 
programmieren. Die EEPROMs gibt es als SOT23

Oder du machst ein Schieberegister mit drauf und bestückst die passenden 
Brücken zu deiner Revision. So kannst du 0-255 auslesen und zuordnen.

von Base64 U. (6964fcd710b8d77)


Lesenswert?

otp memory oder wenn du ein paar pins über hast könntest du die mit 10k 
an gnd oder 3v3 hängen und damit kodieren.

von Alex W. (Gast)


Lesenswert?


von Ramid Panik (Gast)


Lesenswert?

Alex W. schrieb:
> Mouser-Nr.: 579-11AA010T-I/TT
> 
https://www.mouser.de/productdetail/microchip-technology/11aa010t-i-tt?qs=sGAEpiMZZMuVhdAcoizlRRY1TZuI8FqPaQ2MvIz2av4%3D

Ok danke, dann eine ganz blöde Frage dazu:

Wie werden die denn programmiert?

gibt es dazu einen eigenen Programmer?
und dann liefere ich z.B. dieses EEPROM vorprogrammiert zu meinem
Platinenbestücker?

VG

von fop (Gast)


Lesenswert?

Am Einfachsten ist natürlich echt, mehrere Digitalsignale über 
Verbindungen nach Masse oder Versorgungsspannung zu generieren. Wenn Du 
genug freie Pins am Mikrocontroller hast, kannst Du diese direkt 
einlesen. Eventuell gehen dann auch die im Mikrocontroller vorhandenen 
Pull-Ups. Also Pin offen bzw. mit Masse verbunden. Dann fließt halt ein 
wenig Strom über die Pull-Ups der mit Masse verbundenen Pins. Die 
internen Pull-Ups haben aber meist hunderte von Kiloohm, also hält sich 
der Strom in Grenzen. Ansonsten ist das Schieberegister eine Möglichkeit 
Pins zu sparen. Du kannst sogar unterscheiden zwischen Eingängen, die 
fest im Layout auf einen Pegel gezogen werden und Pins, die per 
alternativ bestückbaren 0-Ohm-Widerständen ihren Pegel bekommen. Dann 
kannst Du immer noch in gewissem Umfang Bestückungsänderungen kodieren 
und Layoutänderungen sowieso.
Kostet halt Platinenfläche im Vergleich zu einem kleinen PROM. So ein 
PROM würde ich beim automatischen Leiterplattentest mit beschreiben, da 
der Test vermutlich sowieso an die Platinenversion angepasst werden 
muss.

von Andi B. (andi_b2)


Lesenswert?

Kommt drauf an was man frei hat und was der uC so kann. GPIOs oder ADC 
Eingang. Externer PullUp oder PullDown zusammen mit internen Pup/Pdown 
kann 3 Zustände pro Pin definieren. Kostet keinen Strom da man die 
internen Pup/down nur einmal, bzw. ganz selten einschalten muss um zu 
schaun, ob ein externer Pup/down dran ist.

Mit einem einzigen ADC Eingang kann man natürlich viel mehr Varianten 
kennzeichnen. Wenn man dann noch den Spannungsteiler auf einen GPIO 
Ausgang legt, braucht dieser auch fast keinen Strom. Hunderte Varianten 
kann man so sicher auch nicht bestimmen, aber > 10 geht locker.

Manchmal ist es auch eleganter über die Peripherie Rückschlüsse zu 
ziehen. Z.B. wenn ineiner neuen Variante ein vorhin nicht benutzter Pin 
oder noch nicht vorhandener I²C Baustein oder Display oder .... 
ausgelesen wird. Auch Verbindungen verschiedener GPIO Pins im Layout 
oder per 0 Ohm, können bewertet werden.

Für mich sind solche Lösungen alle "eleganter" als ein externer 
programmierbarer Baustein. Bevor ich sowas einbaue, schreibe ich gleich 
die Revisionsnummer ins Flash des uCs.

von Peter D. (peda)


Lesenswert?

Ich benutze auch 4 oder 8 IO-Pins an Widerständen gegen GND.

von Thomas (kosmos)


Lesenswert?

Ich nehme mal an es geht darum das keine falsche Firmware draufgespielt 
wird oder muss man wirklich ne Rückmeldung haben welche Version drauf 
ist?

Am einfachsten für den Kunden wenn er das auslesen soll wäre ein Blink 
Code
__________kurz___kurz____kurz_kurz__________ = V1.12

Wenn man es automatisieren will, würde ich das über den Bootloader 
machen. Der Programmer schickt also eine Revisionskennung und wenn die 
Platine diese akzeptiert startet man die Programmierung, so spart man 
sich also sämtliche Hardware wie Widerstände, Spannungsteiler, EEPROMs, 
LEDs usw.

Die alte als auch neue Kennung kann ja auch im Flashbereich liegen das 
muss auch garnicht ins EEPROM, damit nicht manipuliert werden kann. Auch 
könnte man da so Sachen verwirklichen das man auch immer eine Version 
zurück kann.

von Possetitjel (Gast)


Lesenswert?

Ramid Panik schrieb:

> Gibt es sonst elegantere Lösung um dieses zu machen.....

Schieberegister und Brücken?!

von HildeK (Gast)


Lesenswert?

Ramid Panik schrieb:
> Meine Befürchtung ist, dass dieser Spannungsteiler , auch schon ne
> gewisse
> Leistung verbrät und sich natürlich auch gewisse Ungenauigkeiten aus den
> Toleranzen der verwendeten Widerstände ergeben.........

Leistung ist kein Problem, wenn du noch einen Pin frei hast.
Den an den Spannungsteiler oben anlegen und zum Messen kurz mal auf HIGH 
schalten, dann wieder auf LOW. Oder den Spg.-Teiler mit einem kleinen 
MOSFET kurz mal an GND legen, auch gesteuert von dem 2. Pin. Mit der 2. 
Variante bist du vom tatsächlichen HIGH-Pegel des Pins unabhängig.
Ungenauigkeit: wie viele Revisionen willst du den unterscheiden können? 
Mir haben bisher immer 4 Bit parallel gereicht (s. Post von peda). Aber 
mit einem 8-Bit ADC sollte eine Auflösung von 32 verschiedenen 
Revisionen machbar sein.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich reserviere dazu 4 Pins vom uC und verbinde je nach Version die Pins 
direkt an GND. Programmiert werden die Pins mit den internen Pull-Up und 
als Eingang. Somit kann die PCB Version direkt eingelesen werden.
Um Strom zu sparen können die internen Pull-Ups nach dem Auslesen auf 
Pull-Down geschaltet werden.
Es braucht kein Bauteil, kaum Platz und ist fest definiert.

Wenn ich bestückungsoptionen dem uC mitteilen möchte gibt es 
entsprechende 0 Ohm Widerstände gegen GND. Dies ist jedoch etwas anderes 
als wie die Platinenversion.

Die alle modernen uC bieten heutzutage die Pull-Up/Down funktion mit 
internen Widerstände.

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.