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
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.
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.
Mouser-Nr.: 579-11AA010T-I/TT https://www.mouser.de/productdetail/microchip-technology/11aa010t-i-tt?qs=sGAEpiMZZMuVhdAcoizlRRY1TZuI8FqPaQ2MvIz2av4%3D
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
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.
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.
Ich benutze auch 4 oder 8 IO-Pins an Widerständen gegen GND.
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.
Ramid Panik schrieb: > Gibt es sonst elegantere Lösung um dieses zu machen..... Schieberegister und Brücken?!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.