Hallo liebe Forumsmitglieder, Mein Name ist Christian. Ich bin neu hier im Forum, habe Eure Diskussionen aber schon häufig interessiert mitverfolgt. Nun hab ich mich auch angemeldet um dem hier vorhandenen geballten Wissen auch meine Fragen vorzuführen, und im Gegenzug auch anderen bei "leichteren" Problemen Hilfe zu leisten. Ich melde mich aber nicht nur, um Hallo zu sagen, ich habe auch schon die erste Frage: Bei meinem aktuellen Projekt kämpfe ich leider mal wieder mit einem Mangel an GPIOs Ich verwende den PIC18F45K80 da ich ein Modul aufbauen muss, welches seine Anweisungen via CAN-Bus erhält und dieser Controller dankenswerterweise den CAN-Controller gleich mit an Bord hat. Adressiert wird das Modul über einen 4 Bit Drehcodierschalter (0...F) womit ich einen vordefinierten Adressbereich auswählen kann. Zum GPIO-Sparen beabsichtige ich nun den ICSP-Port doppelt zu verwenden. Einmal zur Programmierung und einmal eben für drei der 4 Bits des Schalters. Ich habe eine Handskizze angefertigt, in der ich mal aufgezeichnet habe, wie ich mir das vorstelle. Damit ich das Modul nicht nur in den Adressbereichen 0 und 1 Programmieren kann, habe ich je einen Vorwiderstand von 10K in die 4 Datenleitungen des Schalters geschleift (hab grad bemerkt, für Bit 1 ist das nicht notwendig). Da ich noch nicht weiß, ob diese Codierschalter die Ausgänge auch ohne Com-Verbindung untereinander kurzschließen (was ich eigentlich eher ausschließe), habe ich die Dioden optional vorgesehen, um ein übersprechen unter den ICSP-Leitungen zu vermeiden. Die interne Strombegrenzung meines Programmers (Pickkit 3) regelt bei 500mA ab, das reicht vollkommen, um das "heiße Ende" der 10k Widerstände hochzuziehen. Ob das der PIC18F... auch kann, weiß ich noch nicht, so weit hab ich im Datenblatt noch nicht nachgesehen. Ich denke aber schon, schließlich saugen die 10k nur 5µA bei 5V Der MCLR wird übrigens Software-seitig deaktiviert, sonst würd's ja sowie nicht funktionieren. Die entsprechenden WPUs werden auch gesetzt. Damit erspar ich mir auch die empfohlene Peripherie an diesen Pins (insbes. MCLR) - Richtig?? Zusammengefasst meine Fragen: 1.) Kann man das so machen?? 2.) Ist der Pickkit3 Ausreichend kurschlussfest, um die Widerstände gleich wegzulassen. Ich weiß, das ist eher eine brutale Lösung, aber da nur ich Firmwareaktualisierungen durchführe weiß ich damit auch, dass dies nur bei Adresse 0 und 1 möglich ist. Die Frage ist dann eben nur, schieß ich mir den Pickkit sofort ins Jenseits, wenn ich mal unabsichtlich eine andere Adresse eingestellt habe? Schon mal herzlichen Dank für Eure Beiträge. LG Christian
Christian T. schrieb: > 1.) Kann man das so machen?? Theoretisch ja. Am MCLR ist aber kein Pullup drin, den musst du einbauen. Mit den Widerständen sollte es auch gehen, aber 10k ist ein wenig viel, kann sein das der interne Pullup zu luschig ist und die Pegel grenzwertig werden. Da musst du nochmal nachmessen. Christian T. schrieb: > 2.) Ist der Pickkit3 Ausreichend kurschlussfest, um die Widerstände > gleich wegzulassen. Nein. Dann klappt das proggen nicht, und am MCLR kommen auch mehr als 5V an, d.h. im Progger ist ein Spannungswandler, und der mag Kurze nicht. Durch die Widerstände ist aber die Geschichte so gesichert, das auch andere Adressen problemlos sind. Es gibt im übrigen im Datenblatt vieler PICs eine Schaltung, die die "Isolation" der ICSP-Pins erläutert. Wenn du dich daran orientierst, klappt das auf jeden Fall.
Hallo Jens, Vielen Dank für Deine sehr rasche Antwort! > Am MCLR ist aber kein Pullup drin, den musst du einbauen. Achja, stimmt, hab übersehen, dass der ja im Register E angesiedelt ist. > ...aber 10k ist ein wenig viel, kann sein das der interne Pullup zu luschig ist und die Pegel grenzwertig werden. Da musst du nochmal nachmessen. Okay?? ich wäre sogar noch höher gegangen. Wenn ich es richtig verstanden habe würden den Pickkit auch 100 Ohm von der Kommunikation nicht abhalten. Wenn allerdings der PIC antworten möchte, weiß ich nicht, ob er diese Barriere überwinden schafft. Wie auch immer ... drinnen sind die Rs jedenfalls im Layout. Der Wert lässt sich nachträglich immer anpassen. Testmessungen, wie Du richtig angemekrt hast, werden an der Beta ohnehin durchgeführt. Das Ding muss letztendlich auch noch durch EMV- und ESD-Tests, da kann eh noch so einiges an Problemen - im wahrsten Sinne - aufflackern. Die Dioden kann ich getrost weglassen oder?? Bzw. anders gefragt, was passiert hinsichtlich ICSP, wenn ich zwischen PGC und PGD einen 10k R hänge?? Normalerweise nix, schließlich sind die ausgänge sowohl vom Pickkit als auch vom µC zumindest Dual-State, oder?? "Dass dann hinsichtlich Adressauswahl Bit 1 und 2 immer gemeinsam ankommen würden is mir eh klar." > Es gibt im übrigen im Datenblatt vieler PICs eine Schaltung, die die "Isolation" der ICSP-Pins erläutert. Vielen Dank für den Hinweis, danach werde ich gleich suchen. LG Christian
:
Bearbeitet durch User
Christian T. schrieb: > ich wäre sogar noch höher gegangen. Wenn ich es richtig > verstanden habe würden den Pickkit auch 100 Ohm von der Kommunikation > nicht abhalten. Ja, beim programmieren wäre ein höherer Widerstand am Schalter besser. Aber was ist im 99,9%-Normalfall? Dann hast du internen Pullup von einigen zig k gegen externen 10k, und je nach Wetterlage, Laune, Bierpreis, Mondstand und Laune ist der Eingang bei geschlossenem Schalter nicht low genug. Christian T. schrieb: > Wenn allerdings der PIC antworten möchte, weiß ich > nicht, ob er diese Barriere überwinden schafft. Die Ausgänge des PICs schaffen einige mA, die kümmert auch 1k Pull nicht wirklich. Christian T. schrieb: > Die Dioden kann ich getrost weglassen oder?? Würd ich sagen, ja. Christian T. schrieb: > zw. anders gefragt, was passiert hinsichtlich ICSP, wenn ich zwischen > PGC und PGD einen 10k R hänge?? Normalerweise nix, schließlich sind die > ausgänge sowohl vom Pickkit als auch vom µC zumindest Dual-State, oder?? Einer von beiden treibt immer, mit einer Push/Pull-Endstufe. Du hast außerdem jeweils 10k gegen Masse, nicht 10k gegeneinander. Das macht aber nix, beide Seiten können dagegen H und L treiben. Zur Laufzeit musst du aber Pullups aktivieren bzw. einbauen, weil der Schalter ja nur Low kann.
Hallo Jens, So, ich hab mir nun mal Deine Ratschläge zu Herzen genommen und den Schaltplan überarbeitet. Ich hab die Serienwiderstände jetzt auf 1k umgezeichnet. schließlich arbeiten die eh nur im ungünstigsten Fall beim Programmieren dagegen, und da beim Programmieren sonst keine anderen Ausgänge dauerhaft aktiv sind, muss ich auf die Gesamtstrombelastung aller Ausgänge in diesem Fall ohnehin nicht achten. Muss ich sowieso nicht, die 8 Optotriacs die angesteuert werden ziehen je 5mA und die restlichen Aktoren liegen überhaupt nur im 2 stellige µA Bereich ... Mir is gerade aufgefallen, dass ich einen der Optitriacs am Port A hab. Das muss ich ändern, der Port A schafft nur 2 mA auf den Pins 0:5. Den RE3 (disabled MCLR) hab ich jetzt mal mit 100K hochgezogen. Die 47 Ohm Widerstände hab ich aus ESD-Schutzzwecken drinnen. Sollte jetzt eigentlich alles so passen.
Ich würd sagen "kann man so bauen, und dann mal sehen". Für's erste denke ich das das geht. EMV/ESD wird sicher noch spannend.
Vielen Dank für Eure Hilfe!! Ich hab jetzt in der endgültigen Schaltung die 3 Stk. 47 Ohm Widerstände auf die andere Seite der Pullup-Rails (also nun zwischen Pullup und Portpin) gesetzt, dass sollte nur eine geringfügige Änderung bewirken. Ich glaube es ist so sogar besser, da aber der Unterschied höchstens homöopathischer Natur sein dürfte isses ohnehin egal. Kurz gesagt tu ich mir so beim Routen leichter, ich hab auf der Platine nämlich eine ziemlich hohe Bauteildichte. Jens M. schrieb: > EMV/ESD wird sicher noch spannend. Ja, das Denk ich auch. Hab heute leider einen Rückruf von Würth Elektronik verpasst. Sonst hätte ich jetzt schon eine Rückmeldung ob mein Layout-Design EMV/ESD konform sein könnte. Da werd ich wohl bis Montag warten müssen. :( Schönes Wochenende!!
Denke daran, dass das PICKIT am MCLR irgendwas um die 9V anlegen wird, um den Chip in den Programmiermodus zu bekommen. Wenn Du den Pin für irgendwas anderes benutzt, musst die Außenbeschaltung die Spannung abkönnen, und VCC darf dadurch NICHT nennenswert hochgezogen werden. fchk
Frank K. schrieb: > Denke daran, dass das PICKIT am MCLR irgendwas um die 9V anlegen wird, > um den Chip in den Programmiermodus zu bekommen. Wenn Du den Pin für > irgendwas anderes benutzt, musst die Außenbeschaltung die Spannung > abkönnen, und VCC darf dadurch NICHT nennenswert hochgezogen werden. > > fchk Hallo Frank, vielen Dank für den Hinweis ... ich denke es sind sogar 12 Volt, kann mich aber auch irren. Dass der MCLR mit einer höheren Spannung aus einem Boostkonverter versorgt wird ist mir klar. In meinem Fall hängt am MCLR nur ein Codierschalter dran. Also entweder schwebt der MCLR, oder er wird gegen GND gezogen, welcher ebenfalls mit dem Pickit verbunden ist. Mit den von mir eingezeichneten Serienwiderständen wird die Leistung darin verbraten. Ohne Widerstand brät wohl das Pickit, sofern das keine interne Strombegrenzung oder ähnliche Schutzschaltung hat, wovon Jens und ich hier auch mal nicht ausgehen. Genau aus dem von Dir geschilderten Grund, würde ich den MCLR auch nicht active high verwenden. Natürlich kann man unerwünschten Phänomenen mit Schutzdioden entgegen wirken, aber das gemeine an Dioden ist halt, dass die, vorausgesetzt es sind noch bedrahtete Reste von ihr vorhanden, nach ihrem Tod meißtens in beide Richtungen leiten. Bei seriellen Schutzdioden komm ich dabei obendrein immer erst dann drauf, wenn sie nicht mehr geschützt haben - also zu spät. Ein Widerstand is mir da schon lieber, dessen Erbschaft nach seinem Dahinscheiden ist meistens unendlich hoch"ohmig". Da bei mir VCC-Seitig Verbraucher drauf sind, welche auch ohne µC-Aktivität zumindest ein paar wenige mA ziehen, schafft es das Pickit nicht, den VCC-Pegel über den Pullup des MCLR hochzuziehen. Da ich das aber bedacht habe, habe ich trotzdem sicherheitshalber einen Pullup von stattlichen 100k gewählt, da reicht der Kriechstrom der MBRS140 im LM2594-er Konverter schon, um den Pegel unten zu halten. Ein weiterer Grund, warum ich gerne gegen Masse Schalte ist, dass ich an Open-Collector bzw. Drain gewöhnt bin, die schalten meistens auch alles gegen Masse. Einzig bei sehr langsamen Signalen von außerhalb der Module kommt es gelegentlich vor, dass ich mit den 24 VAC geschützt mittels TVS über einen hochohmigen RC Lowpass 10-100k und 10-100nF direkt auf den Portpin fahre. Das is für Schalter ein?, oder Schalter aus? vollkommen ausreichend. Darüber hinaus, man mag es kaum glauben, hält diese Variante sogar EMV und ESD-Tests stand :) LG Christian
Frank K. schrieb: > Denke daran, dass das PICKIT am MCLR irgendwas um die 9V anlegen wird, > um den Chip in den Programmiermodus zu bekommen. Wenn Du den Pin für > irgendwas anderes benutzt, musst die Außenbeschaltung die Spannung > abkönnen, und VCC darf dadurch NICHT nennenswert hochgezogen werden. > > fchk O. Wie intelligent. Er hat doch die Schaltung geposter. Du Legasteniker.
Ich könnte mir vorstellen, daß andere IO-Funktionen besser für die Mehrfachnutzung geeignet sind, z.B. ICSP und SPI. SPI-ICs sind hochohmig, solange alle /CS über einen Pullup deaktiviert sind. Oder man nimmt R2R für das Einlesen von 4 Bits am ADC.
Peter D. schrieb: > Ich könnte mir vorstellen, daß andere IO-Funktionen besser für die > Mehrfachnutzung geeignet sind, z.B. ICSP und SPI. Noch unproblematischer als ein Schalter mit hohen Widerständen davor sind nur offene Pins. ICs haben oft Schutzdioden, und SPI mag keine hohen Widerstände in Serie wegen der hohen Frequenzen; LEDs sind zu niederohmig. Peter D. schrieb: > Oder man nimmt R2R für das Einlesen von 4 Bits am ADC. Klappt m.W. nicht, weil man dazu einen Schalter bräuchte, der H & L schaltet, teuer und selten.
Jens M. schrieb: > SPI mag keine hohen Widerstände in Serie Die braucht es eben nicht, da hochohmig, wenn /CS = 1. MISO, MOSI, SCK können daher problemlos noch anderweitig verwendet werden.
Peter D. schrieb: > Ich könnte mir vorstellen, daß andere IO-Funktionen besser für die > Mehrfachnutzung geeignet sind, z.B. ICSP und SPI. SPI-ICs sind > hochohmig, solange alle /CS über einen Pullup deaktiviert sind. In dem Fall also mit Software SPI. Tatsächlich nutze ich SPI zur Kommunikation des Boards (als Slave) mit optionalen Stand-Alone Controllern als Aufsteckerweiterungen) Diese werden treffenderweise auch direkt auf jenen 10 poligen Pfostenstecker aufgesteckt, an welchem auch die ICSP-Pins anliegen. Beim Stecker war kein (Platz-)Sparbedarf gegeben, ich hab noch ca 500 dieser Stecker, welche von einem eingestampften Projekt noch übrig sind. Die musste ich also sowieso noch irgendie anbringen. Ein Software SPI zu programmieren wollte ich mir letztendlich auch sparen.Ich bin beim Programmieren noch Neuling, und um mir alles noch fehlende Wissen bei diesem einen Projekt anzueignen fürchte ich, reicht die Zeit nicht. Ja, vermutlich gibt's für sowas eh schon fertige header-Files ... Aber ich dachte mir, dass alleine schon der CAN-Bus genug Herausforderung für ein Projekt ist. > Oder man nimmt R2R für das Einlesen von 4 Bits am ADC. An sowas ähnliches dachte ich auch. Geht aber nur als Spannungsteiler mit dazuschaltbaren Widerständen. Dabei würde ich einen exponentiellen Spannungsverlauf für die einzelnen Adressen erhalten, und dass könnte ein Problem werden (Siehe weiter unten), weshalb ich die Idee letztendlich verworfen habe. Realisiert hätte ich es so: 10k als PullUp. und am Drehcodierschalter folgende Werte schaltbar gegen Masse: Bit 0 2k2 Bit 1 3k3 Bit 2 4k7 Bit 3 6k8 Daraus ergibt sich ein variabler Spannungsteiler mit folgenden Verhältnissen. Adresse - Spannungsteiler F - 10k : 895R E - 10k : 1k227 D - 10k : 1k508 usw. Die Analogspannungen würden wie folgt aussehen: Adresse - Spannung F - 0,4107...V E - 0,5019...V D - 0,6552...V Zwischen den beiden größten Verhältnissen ergibt sich rechnerisch der geringste Spannungssprung das wären dann zwischen Adresse F und E nur 91,2mV Das könnte ich zwar bereits mit einem 8 Bit A/D-Wandler ausreichend genau abfragen, allerdings wird die Adresse des Moduls unmittelbar nach Einschalten der gesamten Anlage abgefragt und gespeichert. Die ganzen Ventile die da Schalten und Motoren die sich in dem Moment drehen, der Hauptcontroller der bootet, ... über all diese Einflüsse auf meine dadurch vielleicht geringfügig schwankende 5 Volt Versorgung, von den EMV- Effekten mal ganz abgesehen, wollte ich echt nicht nachdenken. (Die gesamte Anlage wird dummerweise auch aus einem gemeinsamen 24V Trafo versorgt) Einfach die Startroutine meines Controllers zu verzögern war mir da zu wenig Sicherheit und alles andere hätte, noch zusätzlich zum Programmieraufwand der Min/Max-Spannungs-array der Adressen, mehr Aufwand bereitet, als die jetzige Lösung. Jens M. schrieb: > Klappt m.W. nicht, weil man dazu einen Schalter bräuchte, der H & L > schaltet, teuer und selten. ... und von den Drehcodierschaltern gibt's eine H/L Version in der benötigten Bauform glaub ich überhaupt net. Ich hoffe ich hab jetzt nicht nur Blödsinn von mir gegeben. Und bitte steinigt mich nicht, falls ich mich gerade irgendwo verrechnet habe. Die Notizen welche ich damals gemacht habe, find ich grad nicht, weshalb ich ein paar der wesentlichen Werte jetzt, um kurz nach Mitternacht, schnell nochmals ausgerechnet hab. Vielen Dank für Euer Interesse und die guten Vorschläge. Liebe Grüße und gute Nacht! Christian
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.