ich habe ein kleines problem beim auswerten der signale eines drehimpulsgebers (ich hoffe das heißt überhaupt so. es werden jedenfalls 2 impulse abgegeben, abhängig von der drehrichtung kommt entweder der eine oder der andere zuerst). ein impuls hängt am INT0-pin eines atmega32, der 2. an einem anderen pin (PD1). in der interrupt routine frage ich einfach ab ob PD1 high oder low ist. sofern ich das prinzip verstanden habe, sollte das eigentlich genügen um die drehrichtung zu erkennen. tja, tut es aber nicht ganz :) eine drehung in richtung 1 wird immer als solche "erkannt". richtung 2 hingegen wird nur manchmal als solche erkannt und das ist davon abhängig wie schnell ich drehe. naja das problem scheint hier recht klar zu sein. der 2. impuls lässt wohl machmal zu lange auf sich warten. hat jemand eine idee wie ich dieses problem umgehen kann ohne einen 2. externen interrupt-pin zu verwenden? danke im vorraus, mfg philipp
indem du ganz ohne Interrupts arbeitest. Gibt hier in der Codesammlung ein sehr schönes Beispiel von Peter Danegger, funktioniert super.
Es geht aber auch wunderbar mit Interrupts: SIGNAL(SIG_INTERRUPT0) { if (((INKREM1)&&(INKREM2))||((INKREM1==0)&&(INKREM2==0))) inkrement--; else inkrement++; } Der Interrupt wird bei beiden Flanken ausgelöst, INKREM1 und INKREM zwei sind die Pins an dem der Inkrementalgeber angeschlossen ist. Einzige Vorraussetzung damit es geht: Das Ding darf nicht prellen.
> Einzige Vorraussetzung damit es geht: Das Ding darf nicht prellen. > ...geht also nur theoretisch...
>...geht also nur theoretisch...
Nö, einfach ein RC Glied zwischen Inkrementalgeber und uC und das ganze
läuft wunderbar. Das verwende ich schon seit Jahren in verschiedensten
Schaltungen ohne Probleme.
Je nachdem ob der Inkrementalgeber ein oder zwei Impulse pro Schritt
erzeugt, kann es sein, dass man den Interrupt auf ein oder zwei Flanken
stellen muss.
Ja, oder einfach Pollen, wie oben genannt und mehrfach bewährt. Da braucht man noch nichtmal R und C... Also eigentlich effektiver.
Hallo, ich polle auch, habe aber trotzdem R&C. Einfach wegen ESD. So ein Bedienelement fängt halt die meisten ESD Pulse ein, und ich brauche normalerweise zuverlässige Schaltungen...
@SuperUser: Was hat das denn mit ESD zu tun? Ich glaub, Du meinst eher EMV... Gegen ESD machste mit nem RC mal gar nix.
Ein RC kann gegen beides (ESD/EMV) helfen. In der Beschaltung unten ist der ESD Schutz höher. ----- Bei der elektrostatischen Entladung wird eine gewisse Kapazität (je nach Modell bzw. in der Realität je nach Umgebung) von ein paar 100pF@XkV über den Kontakt mit dem Device entladen. Pin __ 1k ---|____|--------- uC | --- 47nF --- | ------------------- MASSE Der Mensch fasst jetzt mit z.B. 8kV geladen und einer Kapazität von 100pF und einem Innenwiderstand von 1.5kOhm an den Pin an. Der R wirkt jetzt als Strombegrenzung für die Ausgleichströme und reduziert die Anstiegszeiten. Der Kondensator teilt die Spannung gemaess 100pF/47nF auf, also auf 1/470. Die verbleibende Spannung (17V) wird ohne Probleme von den in den uC integrierten ESD Schutzstrukturen abgeleitet. -> ESD Puls sorgt für einen Puls am Eingangspin des uC, uC überlebt Die Bauteile müssen natürlich die ESD Belastung abkönnen, z.B. darf das R nicht so ein kleines SMD Teil sein, dass es direkt einen Spannungsüberschlag gibt. Abhilfe ist z.B. mehrere in Reihe schalten. Die SW sollte robust gegen diese ESD Pulse programmiert sein.... ESD: http://de.wikipedia.org/wiki/Electrostatic_Discharge EMC/EMV: http://de.wikipedia.org/wiki/Elektromagnetische_Vertr%C3%A4glichkeit
@SuperUser "Der Mensch fasst jetzt mit z.B. 8kV geladen und einer Kapazität von 100pF und einem Innenwiderstand von 1.5kOhm an den Pin an." Offene Bauweise oder wie ? Der Mensch faßt am Knopf oder am Gehäuse an und nicht an irgendwelchen internen Drähten. Und Deine Aufgabe (als Entwickler) ist es, daß nirgends direkt was berührt werden kann (auch Ausgänge können ESD aufschnappen). Üblich ist ja heutzutage, Kunststoffgehäuse innen zu beschichten und ne Druckfeder an GND dagegen drücken zu lassen. Früher hat man einfach Metallgehäuse genommen (ist robuster und sieht edler aus), aber Geiz ist ja GGGeil !!! Peter
Nur mal nebenbei angemerkt: Bei Reichelt gibt es jetzt optische Drehimpulsgeber (ENC 62P22). Da soll keine Entprellung mehr nötig sein. Kosten allerdings auch um die 8-9...
Hallo Peter, leider geht die vollständige galvanische Trennung nicht immer... Mobiltelefone haben Ladebuchsen, mein Drehencoder eine Metallachse, dann braucht man Lüftungslöcher zur Wärmeabfuhr, es gibt USB/RS232 Anschlüsse, Mikrophone brauchen Schalleingangsöffnungen, Schallwandler soll man hören etc. etc. Dabei soll alles schnukelig klein sein... ESD braucht nun mal keinen direkten Kontakt sondern nur einen Luftspalt. Ich habe noch kein Gerät gebaut, dass man vollständig isolieren konnte (o.k. ich arbeite im Consumer Bereich und nicht der rauhen Industrie). In der Industrie - oder wenn es sehr klein werden soll - wird man auch verstärkt bidirectionale suppressor dioden einsetzen, für USB und andere schnelle Interfaces gibt es spezielle Schutz-IC's etc. Ob ein RC reicht muss man halt selber prüfen.
>Üblich ist ja heutzutage, Kunststoffgehäuse innen zu beschichten und ne >Druckfeder an GND dagegen drücken zu lassen. Das ist natürlich eine gute Sache, zumindest für nicht so hohe Stückzahlen und im Privatbereich. Dazu habe ich auch noch ein nettes Bildchen gefunden. Fazit daraus ist, mehrere Ground Kontakte sind besser als einer....
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.