PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Extrem sensibler 40106 inv. Schmitt-Trigger



Foooob
17.02.2006, 22:50
Hallo

Ich bastle eben an einer meiner Schaltungen und ich habe hier ein Phänomen, das ich mir nicht richtig erklären kann.

Nun zur Sachlage

Im Zentrum des ganzen steht ein invertierender Schmitt-Trigger
Am Eingang ist mein Atmel ATMega32 anschlossen, der nachgewiesen eine 0 sendet
Am Ausgang ist eine LED (mit Rv) angeschlossen.

Nachdem der Mega32 eine 0 sendet sollte der Inverter das Signal invertierten, eine 1 daraus machen und die LED sollte folglich leuchten.

Es ist aber nicht so.
Zuerst habe ich die Schaltung ohne jegliches Eingreifen betrieben. Die LED leuchtete auch über einen längeren Zeitraum nicht auf.

Nungut dachte ich mir. Spannungsprüfer gezückt und auf der Oberseite der Platine die Spannungen nachgemessen. Als ich die Spannung am Ausgang messen wollte ist mir aufgefallen, dass dort kein konstanter Wert vorliegt sondern sich die Spannung langsam aufbaut! Sie steigt von 0V langsam gegen 3,8V an bis die LED schließlich leuchtet. Aber nur wenn ich Spannung am Ausgang messe, tue ich das nicht bleibt die Spannung konstant auf einem Wert, der nahe bei 0V liegt.

Und es geht weiter....

Ich nahm den Strom weg um zu überprüfen ob das ein einmaliger Vorfall war, vielleicht ein Messfehler. Ich lies das Board einige Sekunden in Ruhe, schaltete den Strom wieder ein und wollte dann mit der Messnadel erneut die Spannung am Ausgang messen. Nun kam ich nur in die Nähe des Pins und es leuchtete sofort die LED! Und das bis zu einem Abstand von ca. 10mm!!!
Wenn ich also mit meiner Messnadel im Abstand von 2-10mm über dem Schmitt-Trigger kreisele leuchtet die LED auf, gehe ich mit der Messnadel weg erlischt die LED wieder.

Was hat das bitte zu bedeuten? Kann es wirklich sein, dass der ST so empfindlich ist, dass er auf eine Messnadel noch im Abstand von 10mm reagiert?? Ich habe diesen Typ schon sehr oft eingesetzt und soetwas kam mir noch nie vor.

An dem Schmitt-Trigger sind an anderen Ein- und Ausgängen nach dem gleichen System anstatt der LED auch noch ein PIEZO-Summer angeschlossen. Bei dem funktioniert das wunderbar, keine Probleme.

Nachtrag: Habe eben noch herausgefunden, dass die LED auch an geht, sobald man kurz mit der Messnadel auf den Eingang tippt. Dann baut sich die Spannung am Ausgang nicht langsam auf sondern springt sofort von 0V auf die 3,8V


Technische Daten:
Es handelt sich um einen invertierten Schmitt-Trigger (HEF40106B)
Eingang: Direkt am Mega32
Ausgang: Vorwiderstand 500Ohm, dahinter direkt die LED[/b]

Ratber
17.02.2006, 23:17
Also der Eingang liegt an einem als Ausgang definiertem Pin eines im Betrieb befindlichen M32 ja ?

Verbindung ist korrekt ?
Ein und ausgang gehöhren zum gleichen Gatter und nicht etwa zu unterschiedlichen ?

ruediw
18.02.2006, 01:40
Zusätzlich müssen bei CMOS-Gattern alle nicht benutzten Eingänge
entweder an Gnd oder V+ angeschlossen werden. Sonst flippern
die Ausgänge zufällig, je nachdem wie nahe Du oder andere Störquellen sind...

kalledom
18.02.2006, 12:09
Den internen PullUp aktivieren oder einen externen PullUp am AusgangsPin anschließen.

ruediw
18.02.2006, 12:36
@Kalledom:

Die 4000'er Serie hat keine internen Pullup-Widerstände.
Deshalb sind ja auch die offenen Eingänge unbestimmt.Das dürfte
auch das Problem des Ursprungsposters sein.

Die Ausgänge der 4000'er Serie sind in der Regel Gegentaktstufen.
Von dort her ist deshalb weniger ein Problem zu erwarten. Jedenfalls
für alle uC eingänge die auf den Ausgang eines 4000'er Chips
geführt sind.

Aber generell sollte der interne Pullup-Widerstand des uC immer
aktiviert werden.

kalledom
18.02.2006, 12:48
@ruediw

Den internen PullUp aktivieren oder einen externen PullUp am AusgangsPin anschließen. Damit war der ATMega32 gemeint.
Die 4000er sind mir sehr wohl bekannt, auch daß der 40106 Schmitt-Trigger-Eingänge hat und trotzdem ein PullUp erforderlich ist.


Die Ausgänge der 4000'er Serie sind in der Regel Gegentaktstufen. Von dort her ist deshalb weniger ein Problem zu erwarten. Jedenfalls für alle uC eingänge die auf den Ausgang eines 4000'er Chips geführt sind. ???

ruediw
18.02.2006, 13:08
@Kalledom:
Da ein 4000'er Chip eine Gegentaktstufe hat (N-Kanal und P-Kanal),
ist bei einer am Ausgang angeschlossenen Schaltung der Pegel immer
definiert, nämlich 0 oder 1.

Floaten kann da nichts, denn entweder wird der Eingang über
den 4000'er hochgezogen (1) oder nach Masse (0) gezogen.

Probleme gibt es dann, wenn der Ausgang des Chips,
der an den uC angeschlossen ist, einen Open-Kollektor
oder Open Drain Ausgang hat.
Dann muss ***zwingend*** ein Pullup Widerstand angeschlossen
oder (wenn beim uC vorhanden) der interne Pullup Widerstand aktiviert
werden.

Alte klassische uC hatten diese internen Pullup Widerstände noch nicht,
genausowenig wie interne AD-Wandler.

kalledom
18.02.2006, 13:15
@ruediw

Im Zentrum des ganzen steht ein invertierender Schmitt-Trigger. Am Eingang ist mein Atmel ATMega32 anschlossen, der nachgewiesen eine 0 sendet. Am Ausgang ist eine LED (mit Rv) angeschlossen.
Nachdem der Mega32 eine 0 sendet sollte der Inverter das Signal invertierten, eine 1 daraus machen und die LED sollte folglich leuchten. Habe ich da was falsch verstanden ?

ruediw
18.02.2006, 13:21
@Kalledom:
hast rech, habe das falsch verstanden, dachte es wäre genau umgekehrt...
Offene Eingänge waren zumindest zu meiner Zeit eine der häufigsten
Fehlerquellen...

kalledom
18.02.2006, 13:26
@ruediw
Das waren nicht nur zu Deiner und meiner Zeit häufige Fehlerquellen, das sind sie heute noch genau so. Das man heute per Software bestimmen kann, ob ein PullUp da ist oder nicht, verbessert diese Fehlerquelle nicht unbedingt.

Foooob
18.02.2006, 13:39
Hallo

Ich denke ich habe dank euch den Fehler gefunden aber ich kann ihn nicht richtig beheben. Das Problem ist, dass mein AVR meinen Code nicht richtig ausführt. Seine Lock- und FuseBits lassen sich beschreiben aber den restlichen Code führt er nicht richtig aus.
Ich weis nicht...soll ich das Problem hier weiterhin behandeln? Weil nun geht das ganze ja eher in Programmierung über.

Mein momentanes Programm sieht so aus




$regfile = "m32def.dat" 'ATmega32
$crystal = 11059200 'Quarz: 11059200 Hz

Ddrc = &B00000000 'IRs als Eingänge
Ddra = &B00010000 'PIN PA4 Ausgang f. LED

Do

If Pinc.2 = 1 Then 'SHARP rechts

Porta.4 = 1
Waitms 6000
End If

Loop
End



PA4 geht an den Eingang des ST

Naja ich habe aber gemerkt, dass mein AVR da nichts macht! Wenn er an PC2 ein High-Signal bekommt dann tut sich da an PA4 nichts! Auch wenn ich das ganze mit irgendwelchen anderen (nicht angeschlossenen) Pins teste macht mein AVR nie was.

kalledom
18.02.2006, 14:11
Hallo Foooob,
daß der Ausgang am AVR nicht kommt, ist eine programmtechnische Sache, daß der 40106 an den Ausgängen laaaangsam schaltet, ist eine Hardware-Angelegenheit. Wie ruediw schon geschrieben hat, alle Eingänge des 40106 müssen auf Plus oder GND liegen, und sei es über PullUp- oder PullDown-Widerstände 1...47kOhm. Sonst schwingen sich die 4000er tot.
Ich würde erst mal in diesem Thread bleiben, denn hier 'verlaufen' sich auch Programmierer.

Foooob
18.02.2006, 14:18
Danke, ja da hast du recht.
Ich habe es nun aber irgendwie (bitte fragt nicht wie :-s ) geschafft, dass die LED nun nicht mehr spinnt sondern nun unbeirrbar leuchtet.
Das gute daran ist ja schonmal, dass ich schonmal einen stabilen Zustand habe, das Schlechte ist, dass ich keinen zweiten stabilen Zustand haben kann, weil ich meinen AVR nicht dazu überreden kann seinen Ausgang, der zum Eingang des ST führt auf High zu setzen.

kalledom
18.02.2006, 14:37
Hast Du am Ausgang des AVR einen PullUp, also einen Widerstand nach Plus mit 1...47 kOhm ? Die Ausgänge sind OpenCollektor-Ausgänge und schalten bei Low den GND durch, bei High sind sie eben offen und brauchen PullUp's, die für einige Ports auch im AVR intern per Software aktiviert werden können.
Wenn deine Software nicht läuft, kann nichts aktiviert werden, wenn kein PullUp aktiviert ist und extern auch keiner ist, kann es auch keinen High-Pegel geben, auch wenn die Software funktioniert.

Foooob
18.02.2006, 14:41
Ich habe den Pullup softwaremäßig (mache ich nur so) aktiviert über die Zeile

Porta.4 = 1


Naaj ich kenne mich aber auch nicht so super damit aus und vergesse bei sowas gern mal eine (wichtige) Kleinigkeit.

kalledom
18.02.2006, 15:12
Ja gut; was ist aber, wenn das Programm nicht im AVR drin ist, dort nicht startet, im Reset-Zustand verweilt, nicht zu dieser Anweisung kommt, .... oder der Pin nicht als Ausgang gesetzt ist ???
Dann bleibt der Pin hochohmig und der Eingang vom 40106 flattert in der Luft.
Oder sind die internen PullUps nach Reset aktiviert ? Ich kenn den AVR nicht so gut.

Foooob
18.02.2006, 15:47
Wenn das Programm im AVR nicht startet wäre die kleine LED noch das geringste Problem das ich hätte :wink:
Wenn mein AVR nicht korrekt funktionieren würde (und das ist im Moment leider der Fall) würde auf der Platine rein gar nichts funktionieren. Der AVR steuert hierbei alles.

Durch die Zeile:
Ddra = &B00010000
Habe ich den entsprechenden Pin als Ausgang gesetzt.

Ich glaube ich werde da mal in das Programmiererforum gehen denn ich bin mir sehr sicher dass es nur am AVR liegt und diesen muss ich zum Laufen bekommen.

kalledom
18.02.2006, 15:56
Was spricht denn dagegen, am Ausgang des AVR bzw. Eingang des 40106 einen PullUp-Widerstand zu setzen; dann hast Du auf jeden Fall einen definierten Pegel, unabhängig davon, ob der AVR läuft oder nicht. Und Brot frißt Dir der PullUp auch keines weg :-)

Foooob
19.02.2006, 21:16
Was spricht denn dagegen, am Ausgang des AVR bzw. Eingang des 40106 einen PullUp-Widerstand zu setzen; dann hast Du auf jeden Fall einen definierten Pegel, unabhängig davon, ob der AVR läuft oder nicht. Und Brot frißt Dir der PullUp auch keines weg :-)

Aber Platz :wink:
Meine Platine ist randvoll (wirklich randvoll). Ich konnte mit Müh und Not noch 2 vergessene Widerstände hinquetschen aber nun stell dir mal vor ich müsste für jeden Ausgang einen Pullup setzen. Auf dem Board habe ich 2 Mega32. Das würde einfach nicht funktionieren.

Ratber
19.02.2006, 22:02
Entschuldige mal aber mal was Prinzipielles:

Den Platz bestimmen die Bauelemente und die Bauelemente bestimmt die Schaltung,die Schaltung wird von der gewünschten Funktion und den bereitstehenden Bauelementen bestimmt.
Die Betriebssicherheit bringt nochmal Bauteile dazu.

Was du hier machst ist die Sicherheit komplett auszuhebeln um weiter zu miniaturisieren.
Wenn du es klein magst dann nimm kleinere Bauteile und Arbeite Zweiseitig.



Mal ne Gegenfrage:

Würdest du auf Airbag,Gurt und Knaqutschzone sowie ABS,ESR,ESP usw. verzichten um die Karre leichter zu bekommen damit du noch 5km/h rausholen kannst ?

Bist du bereit auf Teile der Schutzisolierungen in Verteilerkästen und bei Verkabelungen zu verzichten damit diese in der Wohnung noch etwas kleiner,unauffälliger und billiger werden ?

Fährst du auf einem Krad ohne Helm und Nierengurt nur weil das Gewicht die Beschleunigung drückt ?

Schweißt du "Männermäßig" ohne Schutzbekleidung und Schutzhaube nur mit passenden Augengläsern ?





Aber bitte,wenn du meinst dann laß den Widerstand weg.
Ich bin der letzt der dir was verbietet.
Scheint ja auch ohne ganz vorzüglich zu funktionieren :wink:

Foooob
19.02.2006, 22:14
Ganz so meine ich es nicht ;-)
Was ich meine ist folgendes:

Wieso soll ich für jeden Ausgang hardwareseitig einen Pullup-Widerstand einsetzen wenn ich ihn auch einfach softwaremäßig aktivieren kann?

Baue ich ihn hardwareseitig ein braucht er erst mal Platz und Aufwand, er muss eingelötet werden und ist danach fest. Das heist wenn ich etwas am Konzept des Roboters ändern will kann ich das nicht nur allein dadurch dass ich ein anderes Programm aufspiele sondern komme nicht darum herum den Lötkolben zu zücken und an der Platine zu basteln. Und dadurch wird die Platine sicher auch nicht schöner wenn man das ein paar mal zu "Schaltungstestzwecken" (die ohne den hardwareseitigen Pullup nur Minuten bräuchten) macht.

Ich verzichte also dadurch dass ich keine Pullups einbaue nicht auf die Sicherheit meines Systems. Keineswegs, denn die Pullups sind ja schon in meinem AVR drin, wieso dann ein 2. mal? :wink:

kalledom
19.02.2006, 22:17
Beim PIC sind die internen PullUps nach Reset disabled; wie ist das beim AVR ? Wo werden die in Deinem Programm evtl. enabled ? Ich sehe nur, daß Port A alles Eingänge sein sollen und an Port B ein Pin als Ausgang deklariert wird.
Edit: IRs alle 0 ist das Interne PullUps alle ein ?
Und Quatsch: Port A ein Pin als Ausgang (hatte nicht die Brille auf).

Edit2: Es sind natürlich interne PullUps vorhanden und wenn der AVR mal richtig läuft, ist das auch nicht mehr dramatisch, da die internen PullUps nach wenigen MilliSekunden 'zugeschaltet' werden.
Während der EntwicklungsPhase wird aber hier mal der Reset betätigt, da mal das neue Programm gebrannt, mal ist noch ein Fehler drin, so daß die PullUps noch nicht zugeschaltet sind. Da ist es dann problematisch und es kann Dir die gesamte Hardware durcheinander rütteln.

Ratber
20.02.2006, 00:24
Ganz so meine ich es nicht ;-)
Was ich meine ist folgendes:

Wieso soll ich für jeden Ausgang hardwareseitig einen Pullup-Widerstand einsetzen wenn ich ihn auch einfach softwaremäßig aktivieren kann?


zb. um beim Einschalten einen Motor oder ein Relais daran zu hindern einen Mucks zu machen bis der Controller läuft und den Port in einen Definierten zustand bringt.





Baue ich ihn hardwareseitig ein braucht er erst mal Platz und Aufwand, er muss eingelötet werden und ist danach fest. Das heist wenn ich etwas am Konzept des Roboters ändern will kann ich das nicht nur allein dadurch dass ich ein anderes Programm aufspiele sondern komme nicht darum herum den Lötkolben zu zücken und an der Platine zu basteln.

Ja das gilt doch wohl für die ganze Schaltung.
Wenn du plötzlich nen Relais an nen Port haben willst mußt du auch löten.
Wenn du nen Sensor dazubasteln willst dann kommt ebenfalls das Brateisen zum Einsatz.
Wo ist also hier der Unterschied für dich ?



Und dadurch wird die Platine sicher auch nicht schöner wenn man das ein paar mal zu "Schaltungstestzwecken" (die ohne den hardwareseitigen Pullup nur Minuten bräuchten) macht.

Ja,ne Platine macht man auch erst wenn die Schaltung fertig ist.
Bis dahin wird gesteckt oder auf ner "Experimentierplatine" bzw. nem Prototypen gearbeitet.
Das du Änderungen einplanst ist ja gerade Thema also spielt das keine Rolle mehr.



Ich verzichte also dadurch dass ich keine Pullups einbaue nicht auf die Sicherheit meines Systems. Keineswegs, denn die Pullups sind ja schon in meinem AVR drin, wieso dann ein 2. mal? :wink:

Na dann schau mal ins Datenblatt.

Mit 200µA entspricht der Pullup in etwa 25Kohm.

Wenn die Leitung lang genug ist dann kackt dir jede Störung im Umfeld in die Schaltung.
Ein handelübliches Handy haste ja sicher schon öfters im Radio,TV,VCR,DVDPlayer oder über die Hifianlage gehöhrt und da sind die Entfernungen schon größer.
Du hast doch das Topic eröffnet weil dein 40106 so empfindlich ist das er schon von alleine wandert und damit den besten Beweis dafür geliefert das ein "Fester" Pegel nötig ist (Das ist reine logik).

Hier will dir je keine was aufzwingen aber Erfahrungswerte kann man sich wenigstens durch den Kopf gehen lassen.

Du hast dich für Cmos entschieden.
Die Sind zwar Stromsparend und in diesem Falle ist der Eingang auch Rauscharm aber das erkaufst du dir mit nem Fan-Out von 2 bzw. 1 für 74LS was nicht viel ist.(ca. 400µA bei 5V)
Da der Chip mitz Fets aufgebaut ist ist er typischerweise anfällig für Elektrostatische Felder.
Wenn du also aufgeladen in die nähe kommst dann reicht ihm das uU. schon zum reagieren.

Da lohnt schon die Überlegung :wink:


Vieleicht wäre ein 74HCT Typ besser geeignet.
Der geht bis 3V Vcc runter und hat auch Fet-Eingänge,ist aber dabei nicht so empfindlich auf störungen und bietet mit 20mA satt und genug am Ausgang.

Und nun aucxh gleich zu deinem Problem mit der langsamen Umladung.
Wie gesagt liefert der Ausgang des 40106 bei 5V nur max 400µA.

Was hängt denn bei dir am Ausgang des 40106 ?

Ratber
20.02.2006, 00:27
Ganz so meine ich es nicht ;-)
Was ich meine ist folgendes:

Wieso soll ich für jeden Ausgang hardwareseitig einen Pullup-Widerstand einsetzen wenn ich ihn auch einfach softwaremäßig aktivieren kann?


zb. um beim Einschalten einen Motor oder ein Relais daran zu hindern einen Mucks zu machen bis der Controller läuft und den Port in einen Definierten zustand bringt.
Aber das Thema war hier erstmal "Pullup am Eingang" oder sehe ich das falsch ?





Baue ich ihn hardwareseitig ein braucht er erst mal Platz und Aufwand, er muss eingelötet werden und ist danach fest. Das heist wenn ich etwas am Konzept des Roboters ändern will kann ich das nicht nur allein dadurch dass ich ein anderes Programm aufspiele sondern komme nicht darum herum den Lötkolben zu zücken und an der Platine zu basteln.

Ja das gilt doch wohl für die ganze Schaltung.
Wenn du plötzlich nen Relais an nen Port haben willst mußt du auch löten.
Wenn du nen Sensor dazubasteln willst dann kommt ebenfalls das Brateisen zum Einsatz.
Wo ist also hier der Unterschied für dich ?



Und dadurch wird die Platine sicher auch nicht schöner wenn man das ein paar mal zu "Schaltungstestzwecken" (die ohne den hardwareseitigen Pullup nur Minuten bräuchten) macht.

Ja,ne Platine macht man auch erst wenn die Schaltung fertig ist.
Bis dahin wird gesteckt oder auf ner "Experimentierplatine" bzw. nem Prototypen gearbeitet.
Das du Änderungen einplanst ist ja gerade Thema also spielt das keine Rolle mehr.



Ich verzichte also dadurch dass ich keine Pullups einbaue nicht auf die Sicherheit meines Systems. Keineswegs, denn die Pullups sind ja schon in meinem AVR drin, wieso dann ein 2. mal? :wink:

Na dann schau mal ins Datenblatt.

Mit 200µA entspricht der Pullup in etwa 25Kohm.

Wenn die Leitung lang genug ist dann kackt dir jede Störung im Umfeld in die Schaltung.
Ein handelübliches Handy haste ja sicher schon öfters im Radio,TV,VCR,DVDPlayer oder über die Hifianlage gehöhrt und da sind die Entfernungen schon größer.
Du hast doch das Topic eröffnet weil dein 40106 so empfindlich ist das er schon von alleine wandert und damit den besten Beweis dafür geliefert das ein "Fester" Pegel nötig ist (Das ist reine logik).

Hier will dir je keine was aufzwingen aber Erfahrungswerte kann man sich wenigstens durch den Kopf gehen lassen.

Du hast dich für Cmos entschieden.
Die Sind zwar Stromsparend und in diesem Falle ist der Eingang auch Rauscharm aber das erkaufst du dir mit nem Fan-Out von 2 bzw. 1 für 74LS was nicht viel ist.(ca. 400µA bei 5V)
Da der Chip mitz Fets aufgebaut ist ist er typischerweise anfällig für Elektrostatische Felder.
Wenn du also aufgeladen in die nähe kommst dann reicht ihm das uU. schon zum reagieren.

Da lohnt schon die Überlegung :wink:


Vieleicht wäre ein 74HCT Typ besser geeignet.
Der geht bis 3V Vcc runter und hat auch Fet-Eingänge,ist aber dabei nicht so empfindlich auf störungen und bietet mit 20mA satt und genug am Ausgang.

Und nun aucxh gleich zu deinem Problem mit der langsamen Umladung.
Wie gesagt liefert der Ausgang des 40106 bei 5V nur max 400µA.

Was hängt denn bei dir am Ausgang des 40106 ?