Letzte Woche habe ich kurz mit einem von weit her angereisten externen Kollegen gesprochen der Stein und Bein schwor man könne bei den neueren AVR den Digitalteil komplett von den Ausgangspins wegschalten, und zwar inklusive der Ausgangstreiber und ihrer parasitären Body-Dioden. Wenn das tatsächlich möglich wäre dann würde das für einen ganz bestimmten Anwendungsfall eine extrem clevere und simple Lösung eröffnen die jedoch in dieser Form (also ohne mindestens den dreifachen externen Bauteileaufwand und Platzbedarf) zum Scheitern verurteilt ist wenn nicht mehrere Ausgangspins im hochohmigen Zustand bis zu -5V tolerieren könnten ohne dabei nennenswerten Strom fließen zu lassen. Jetzt kam das Thema am Rande anderer Themen zufällig wieder auf und er schwor Stein und Bein einen funktionierenden Prototypen dieser Schaltung zu haben. Ich habe damals aufgrund der selben fehlerhaften Idee die gleiche Schaltung aufgebaut und getestet und dann das Problem mit den Body-Dioden erkannt die das ganze Ding leider zum Scheitern verurteilen. Ich habe sogar im zweiten Anlauf noch die Polarität umgedreht und mit dem Reset-Pin experimentiert aber ich brauche zwei exakt gleiche Pins, der Reset-Pin hat leider offenbar einfach nur ne Diode im Highside-Zweig und liefert bei Ausgang-High 0.7V weniger als alle anderen -> Ablageort Schublade "zu schön um wahr zu sein". Ich fragte ihn nun als das Thema zufällig erneut aufkam was er mit den bis zu -5V (oder bis zu +10V je nach Polarität) macht, er meinte man könne bei neueren AVR den kompletten Digitalteil wegschalten und somit auch die Ausgangstreiber und somit auch deren Body-Dioden. Ich finde nichts dergleichen in irgendeinem Datenblatt. Kann mich jemand vom Gegenteil überzeugen? Ohne handfeste Beiweise steck ich da keine Sekunde Zeit mehr rein.
Man kann zwar den Ausgangstreiber per Transmission Gate komplett vom Pin wegschalten, und damit auch dessen Dioden. Nur hat man dann eben die Dioden im Transmission Gate. Könnte mir vorstellen, dass hier das Missverständnis steckt. Unabhängig von den Möglichkeiten der Technik wäre ein CMOS Pin ohne Schutzdioden ein Himmelfahrtskommando, auf das sich ein Hersteller von Microcontrollern wohl kaum einlassen würde. Diskutieren kann man eigentlich nur, gegen welche Pegel die Dioden gehen. Also ob VCC/GND, wie bei AVR, eine Hilfskonstruktion oberhalb von Vio wie bei 3V-µCs mit 5V-toleranten Pins oder 4049/50, oder gegen ein negatives Vee wie bei Analogschaltern.
:
Bearbeitet durch User
Die angesprochenen -5V treten beim diskutierten Meßverfahren überhaput nicht auf. An den Pins liegen immer Signale im Bereich 0V bis 5V an und somit gibt es garkeine Probleme mit den eventuelle aktiven internen Schutzdioden. Der Denkfehler beim Bernd liegt bei der Frage wie das diskutierte Meßverfahren überhaupt funktioniert. Meine Aussage ist insofern mißverständlich, nachdem ich mir meinen alten Source und Schaltplan nochmal angeschaut habe, das ich 1.) beim ATTiny44A die DIDR0x Bits gesetzt habe (digital Input Disable) 2.) in MCUCR das PUD (PullUp Disable) Bit gesetzt habe Das angesprochene Meßprinzip ist auf alle Fälle funktionsfähig, das kann ich mit realer Hardware sogar beweisen ;) @Bernd: wir haben ja zwei Samplekondensatoren die an einem Pin (sagen wir mal PA2) gemeinsam verbunden sein müssen. An diesem Pin liegen auch die Emmitter der drei Phototransistoren die durch 3 Pins mit +5V/Ausgang bzw. hochohmig/Eingang multiplext werden. Während wir also Samplen laden wir die beiden Kondensatoren mit einer Spannung auf die an PA2 zwischen 0-5Volt ergibt, jeweils für Dunkel(Ambient)/Hellphase der IR-LEDs. Nun wollen wir beim Ausmessen mit dem ADC die Differenzspannung beider Kondensatoren messen. Wenn du nun PA2 auf Ausgang mit GND Potential legst so entstehen an unseren beidem ADC-Pins (sagen wir mal PA0 und PA1) sehr wohl negative Spannungen. Aber der Trick ist nun beim Aussmessen an PA2 nicht GND/Ausgang zu legen sondern +5V/Ausgang. Die Spannungen in den beiden Samplekondensatoren wird subtrahiert, ist also +5V minus xV (0-5V) und somit wieder im tolerablen Bereich. Du musst also beim samplen mit dem ADC den gemeinsammen Sternpunkt an Pin PA2 mit +5V als Ausgang betreiben damit an den differentiellen ADC Eingängen PA0 und PA1 dann +5V-xV und +5V-yV anliegt, ergibt xV-yV als ADC Meßergebnis. Wir haben ja beim Samplen der Phototransistoren die beiden Samplekondensatoren mit einer Spannung aufgeladen die beim Messen mit dem ADC umgepolt werden. Beim Samplen/Aufladen liegen sie jeweils an PA0 und PA1 an GND und an PA2 entsteht eine positive Spannung gegen +5V durch das Aufladen. Beim ADC Messen legen wir an PA2 +5V und somit subtrahiert sich die Ladung der beiden Kondensatoren davon und die Differenzspannung an PA0 und PA1 liegt immer im Bereich von 0-5V. Gruß hagen
:
Bearbeitet durch User
Bernd K. schrieb: > ... einen ganz bestimmten Anwendungsfall ... Hagen R. schrieb: > ... beim diskutierten Meßverfahren ... > ... > Das angesprochene Meßprinzip ist auf alle Fälle funktionsfähig, das kann > ich mit realer Hardware sogar beweisen ;) Du brauchst es erstmal nicht zu beweisen. Es würde schon reichen, wenn irgendeiner, der anscheindend Eingeweihten, etwas konkreter beschreiben würde, worum es überhaupt geht.
Achso das Wesentliche vergessen: im ganzen Streß zum damaligen Zeitpunkt habe ich natürlich eine falsche Behauptung aufgestellt (einfach weil ich weiß das das Meßverfahren funktioniert und eigentlich garkeine Zeit war um über dieses Projekt zu streiten). Man kann die digitalen Ausgangstreiber nicht deaktivieren sondern über das DIDR0 Register deaktiviert man die digitalen Eingangstreiber. Man muß aber damit das Meßverfahren funktioniert das PUD Bit setzten damit die Umschaltung des Datenrichtungsregisters/Ports sauber funktioniert. Siehe Datenblatt Seite 55. Gruß Hagen PS: wusste nicht das dich das Problem so beschäftigen würde ;)
Es geht um eine Lichtschranke mit 9 überkreuzenden Meßstrecken mit minimalstem Hardwareaufwand die Umgebungslichtunempfindlich ist und deren Verstärkungsfaktor dynamisch zur Laufzeit adaptiv geregelt werden kann. Gruß hagen
[Edit: vertausche oben/unten, am whiteboard haben wirs andersrum hingemalt, der gemeinsame war oben] Hagen R. schrieb: > Die angesprochenen -5V treten beim diskutierten Meßverfahren überhaput > nicht auf. An den Pins liegen immer Signale im Bereich 0V bis 5V an und > somit gibt es garkeine Probleme mit den eventuelle aktiven internen > Schutzdioden. Hagen, wenn Du mich hättest ausreden lassen dann hätte ich Dir gezeigt daß das Problem genau in dem Augenblick auftritt wenn der eine Kondensator geladen ist (sagen wir mal 2V, oben +, unten -), Du den unteren Pin hochochmig schaltest und dann (GLEICH passiert es!) den zweiten (ungeladenen) Kondensator unten auf GND schaltest. Nun wird der obere Pin (der den beide Kondensatoren gemeinsam haben) durch den entladenen soeben zugeschalteten zweiten Kondensator auf GND-Potential gezwungen und der untere hochohmige Pin des ersten Kondensators rutscht auf -2V, Das kann man schön am Oszi sehen. Der Pin springt sofort auf -0.7V und die Body-Diode entlädt den ersten Kondensator sofort teilweise (und per Reihenschaltung der Kondensatoren) wird der zweite dadurch schon leicht vorgeladen, noch bevor die zweite Messung überhaupt erfolgt. Das funktioniert alles nur wenn die Ladung immer unter 0.7V bleibt aber Du verschenkst dann fast eine Größenordnung an Dynamikumfang. Ich habe mehrmals laut stop gerufen als Du an dem Punkt warst wo der linke Kondensator freigeschaltet und der rechte zugeschaltet wird und wollte erklären was ich meine und zeigen was ich gemessen habe aber Du wolltest unbedingt noch den Zyklus zuende erklären (obwohl ich ihn schon tausendmal im Kopf durchgegangen bin, durchgeführt, durchgemessen habe und in und auswendig kenne). Leider war an dem Tag zuwenig Zeit.
:
Bearbeitet durch User
Ich zitier mich mal selbst und vertausche oben und unten damits zum Schaltplan passt: "daß das Problem genau in dem Augenblick auftritt wenn der linke Kondensator geladen ist (sagen wir mal 2V, oben 0V, unten +2V), Du den oberen Pin hochochmig schaltest und dann (GLEICH passiert es!) den zweiten (ungeladenen) Kondensator oben auf 0V schaltest. Nun wird der untere Pin (der den beide Kondensatoren gemeinsam haben) durch den entladenen soeben zugeschalteten zweiten Kondensator ebenfalls hinunter(!) auf 0V-Potential gezwungen und der obere hochohmige Pin des ersten Kondensators würde nun gerne hinunter(!) auf -2V springen. Kann er aber nicht."
Bernd K. schrieb: > Hagen, wenn Du mich hättest ausreden lassen dann hätte ich Dir gezeigt > daß das Problem genau in dem Augenblick auftritt wenn der eine > Kondensator geladen ist (oben +, unten -), Du den unteren Pin hochochmig > schaltest und dann (GLEICH passiert es!) den zweiten (ungeladenen) > Kondensator unten auf GND schaltest. Nun wird der obere Pin (der den > beide Kondensatoren gemeinsam haben) durch den entladenen soeben > zugeschalteten zweiten Kondensator auf GND-Potential gezwungen und der > untere hochohmige Pin des ersten Kondensators rutscht auf -2V, Nö, so mache ich es aber nicht. Hier Phasen zum Messen der Strecke von T1 mit L1: 1.) Kondensatoren/Transistor entladen: PA0,PA1,PA2 auf Ausgang mit GND Potential, C8/C9 wird entladen PA3 auf +5V/Ausgang, T1 wird kurz "übersteuert" und damit auf bekanntes Potential geladen 2.) PA0 auf Ausgang/GND und PA1,PA2 auf Input/hochohmig, Kollektor von T1 ist immer noch auf Ausgang/+5V. Par CPU Takte abwarten (Anzahl der CPU-Takte wird adaptiv angepasst und somit die Integrationszeitspanne=Verstärkungsfaktor in der der Photostrom vom T1 den Kondensator C8 mit Konstantstrom aufladen kann). 3.) nun PA0 wieder auf Eingang/hochhomig, dafür PA1 auf Ausgang/GND und somit Kondensator C9 aktiviert. Zusätzlich noch PB0 auf Ausgang/+5V damit IR-LED L1 leuchtet. Wieder lädt T1 den Kondensator C9 mit Konstantstrom auf aber diesesmal mit leuchtender IR-LED. Wieder wartet man par CPU-Takte deren Anzahl adaptiv geregelt wird. 4.) nun haben C8,C9 eine Ladung die einmal dem Umgebungslicht und einmal dem Umgebungslicht + IR-LED Licht entspricht. Deren Polarität ist vom Pin PA0 und PA1 mit GND aus gesehen positiv in Richtung PA2. Nun messen wir mit dem ADC differentiell die Pins PA0 und PA1 aus. Dazu wird PA3 (Phototransistor) erstmal auf Input/hochohmig gesetzt. Dann PA0 und PA1 auf Input/hochohmig. PA2 auf Output/+5V. Das alles erfolgt mit zwei OUT Assembler Befehlen die direkt und einmalig DDRA/PORTA setzen. Die Spannung an PA0 und PA1 beträgt nun +5V durch PA2 minus der Ladung der beiden Kondensatoren. Wenn vorher zb. C8 auf 5V aufgeladen wurde so wird an PA0 nun 0V liegen, und das ist das maximale Minimum da das maximale Maximum des Aufladens nur +5V im Schritt 2/3.) haben kann. Also alles Bestens, es gibt keinen Zustand indem negative Spannungen auftreten können. Du musst halt nur PA2 im PORTA Register schon frühzeitig, auch wenn PA2 auf Input/hochohmig steht, auf 1 setzen damit im Umschaltmoment beim Messen mit dem ADC dort schon eine 1 steht = +5V wenn wir PA2 auf Ausgang schalten. Da PUD (Pullup Disable Bit) gesetzt ist spielt das PORT Register vom PA2 nur dann eine Rolle wenn wir auch DDRA für PA2 auf Ausgang setzen, ist PA2 auf Input gesetzt so hat ein gesetztes PORTA Bit für PA2 keine Auswirkungen. Gruß Hagen
Bernd K. schrieb: > daß das Problem genau in dem Augenblick auftritt wenn der linke > Kondensator geladen ist (sagen wir mal 2V, oben 0V, unten +2V), Du den > oberen Pin hochochmig schaltest und dann (GLEICH passiert es!) den > zweiten (ungeladenen) Kondensator oben auf 0V schaltest. Nun wird der > untere Pin (der den beide Kondensatoren gemeinsam haben) durch den > entladenen soeben zugeschalteten zweiten Kondensator ebenfalls > hinunter(!) auf 0V-Potential gezwungen und der obere hochohmige Pin des > ersten Kondensators würde nun gerne hinunter(!) auf -2V springen Aber so arbeitet das System doch garnicht. Wenn C8 auf +2V aufgeladen wurde dann heist dies das PA0 auf Ausgang/GND ist und PA2 auf Input/Hochohmig. An PA2 liegen also +2V aus C8 an. Nun wird C8 komplett hochohmig geschaltet indem PA0 auf Input/hochohmig und PA2 ebenso schon lanägst auf Input/hochohmig geschaltet ist. Dann erst (ok ich mache das alles in zwei OUT befehlen für DDRA und PORTA), wird C9 aktiviert indem nun PA1 auf Output/GND gelegt wird. Erst jetzt kann der Photostrom C9 aufladen. Nach dem beide Phasen abgeschlossen sind liegen zB. an C8 und C9 folgende Spannugen an, C8 +2V und C9 +4V, aus Sicht vom PA2 als Input und PA0/PA1 als GND. Wenn nun PA0 und PA1 auf Input/hochohmig geschaltet werden und PA2 auf Ausgang/+5V so subtrahiert sich von diesen +5V jeweil +2V und +4V, somit sehen wir an PA0 effektiv +3V und an PA1 effektiv +1V. Und das messen wir differentiell mit dem ADC, ergibt +2V. Wie gesagt das Umschalten der DDRA/PORTA Register erfolgt in jedem Meßschritt mit jeweils nur einem OUT Befehl für alle Pins des PORT A. Also alles Besetens. Gruß hagen
Nochmal: wir messen in C8 und C9 jedesmal für sich und unabhängig vom anderen Kondesnator jeweils das Umgebungslicht (also IR-LED ist aus) und die Lichtstrecke (IR-LED ist an). Der ADC misst differentiell zwischen PA0 und PA1 wobei PA2 als Bezugspotential mit +5V belegt ist. Wenn wir einen der beiden Kondensatoren laden dann schwebt der andere Kondensator (ideal betrachtet) vollständig in der Luft, da ja PA2 hochohmig ist und der entsprechende Pin PA0 oder PA1 ebenfalls hochohmig ist. Erst wenn wir die ADC Messung machen wollen legen wir das vorherige GND-Potential der beiden Kondensatoren auf Input/hochohmig und als differentielle Eingänge des ADCs. Würden wir nun PA2 auf Ausgang und GND-Potential legen dann würden wir tatsächlich (da wir ja die Kondensatoren umgepolt haben) negative Spannungen haben. Aber wir legen ja PA2 auf +5v/Ausgang und somit subtrahiert sich die gesammelte Ladung in C8/C9 von diesen +5V und die Spannugen an PA0 und PA1 werden immer nur im Bereich 0V-5V zum liegen kommen. Es kann in keinem Moment der kompletten Messung zu negativen Spannungen an irgendeinem Pin kommen. Zumal es keinen Zeitpunkt gibt wo beide Kondensatoren parallel geschaltet werden oder zueinander umgeladen werden (ausser beim Reset/Entladen wo ja beide Kondensatoren an beiden Enden GND=Kurzschluß sehen) Gruß hagen
:
Bearbeitet durch User
Hagen R. schrieb: > Bernd K. schrieb: >> Hagen, wenn Du mich hättest ausreden lassen dann hätte ich Dir gezeigt >> daß das Problem genau in dem Augenblick auftritt wenn der eine >> Kondensator geladen ist (oben +, unten -), Du den unteren Pin hochochmig >> schaltest und dann (GLEICH passiert es!) den zweiten (ungeladenen) >> Kondensator unten auf GND schaltest. Nun wird der obere Pin (der den >> beide Kondensatoren gemeinsam haben) durch den entladenen soeben >> zugeschalteten zweiten Kondensator auf GND-Potential gezwungen und der >> untere hochohmige Pin des ersten Kondensators rutscht auf -2V, > > Nö, so mache ich es aber nicht. Hier Phasen zum Messen der Strecke von > T1 mit L1: > > 1.) Kondensatoren/Transistor entladen: > > PA0,PA1,PA2 auf Ausgang mit GND Potential, C8/C9 wird entladen > PA3 auf +5V/Ausgang, T1 wird kurz "übersteuert" und damit auf bekanntes > Potential geladen > > 2.) PA0 auf Ausgang/GND und PA1,PA2 auf Input/hochohmig, Kollektor von > T1 ist immer noch auf Ausgang/+5V. Par CPU Takte abwarten (Anzahl der > CPU-Takte wird adaptiv angepasst und somit die > Integrationszeitspanne=Verstärkungsfaktor in der der Photostrom vom T1 > den Kondensator C8 mit Konstantstrom aufladen kann). C9 wolltest Du sagen denn PA0 ist auf GND wir fangen also rechts an. > 3.) nun PA0 wieder auf Eingang/hochhomig, [...] STOP! An dem Punkt habe ich STOP gerufen. Schriftlich kann ich Dich leichter und präziser unterbrechen. Ich unterbreche das in diesem Moment. Schauen wir also mal auf den momentanen Zustand: Jetzt haben wir also C9 auf die Spannung x geladen: U_PA2 - U_PA0 = x (1) Gleichzeitig ist C8 immer noch vollständig entladen: U_PA2 = U_PA_1 (2) und jetzt gleich passiert es, gehen wir noch einen Schritt weiter: > [...] dafür PA1 auf Ausgang/GND und [...] STOP! also U_PA1 = 0V (3) und nach (3), (2) gilt dann auch U_PA2 = 0V (4) aber nach (1) gilt jetzt auch: U_PA0 = U_PA2 - x aus (4): U_PA0 = 0V - x U_PA0 = -x Also wird in dem Moment die Spannung an PA0 negativ.
:
Bearbeitet durch User
Hagen R. schrieb: > ann schwebt der andere > Kondensator (ideal betrachtet) vollständig in der Luft Nein, er hängt immer noch mit Anschluss 1 an dem anderen Kondensator dessen Anschluss 2 wiederum soeben hart auf GND genagelt wurde. Also eine Reihenschaltung von 2 Kondensatoren, einer entladen, einer geladen, und zwar so herum daß das freie Ende dieser Reihenschaltung negativ ist.
Uff, die Schaltung funktioniert, und das zählt am Ende;)
>Gleichzeitig ist C8 immer noch vollständig entladen:
Und auf welchem Potential liegt nun PA2?
Wir haben C8 am oberen Ende an GND und am anderen Ende einen
Phototransistor der mit seinem Kollektor an +5V hängt.
PA2 liegt also an +5V minus 0.7V vom Phototransistior. Ergo: selbst wenn
C8 zB. +4V hätte so liegt an PA0 immer noch eine positive Spannung an.
Der Transistor bildet mit C8 einen Spannungsteiler. Hinzu kommt nun noch
das ich die Kondensatoren garnicht bis auf volle +5V auflade.
Vorschlag zur Güte: wenn ich die nächsten Tage Zeit finde krame ich das
alte Projekt mal hervor und ziehe Oszi-Traces als Screenshots.
Gruß hagen
Hagen R. schrieb: > Und auf welchem Potential liegt nun PA2? > > Wir haben C8 am oberen Ende an GND und am anderen Ende einen > Phototransistor der mit seinem Kollektor an +5V hängt. > PA2 liegt also an +5V minus 0.7V vom Phototransistior. Also ich bitte Dich! Das kann nicht Dein Ernst sein! Wenn das obere Ende des leeren C8 auf GND gelegt wird dann liegt in diesem kurzen Moment das untere Ende auf GND + (Ladung * Kapazität) + (Innenwiderstand * Ladestrom) und da in dem Moment die Ladung 0 ist ist auch die Spannung über seinen Anschlüssen fast genau 0V, die Messung bestätigt das auch, häng das Oszi dran. Das untere Ende springt also kurz auf 0V (und das andere Ende des anderen Kondensators springt ins negative) und steigt dann wieder langsam an wenn Ladung hineinfließt.
:
Bearbeitet durch User
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.