Hallo Leute, ich habe eine Spannung von 5 V und diese soll mir als Ausgangsspannung für die Schaltung dienen. Ich möchte gerne damit eine Grundschaltung für eine Analog-Digital-Wandlung eines ATmega168 bauen. Diese soll die Möglichkeit bieten zwischen 7 Schaltern zu unterscheiden. Ich wollte erst die Unterscheidung der Taster vom ASURO nehmen, aber dazu fehlt mir ein bisschen das Verständnis der Schaltung. Dazu hier ein Bild: http://asuro.pytalhost.de/pmwiki/uploads/Main/switches.jpg Hat es eine Bedeutung, dass ein 1M Ohm-Widerstand als R23 genohmen worden ist? Wofür wird C7 benötigt? Warum gibt es noch R24 mit 1k Ohm, wenn wir schon R23 haben? Und kann ich dann bei 5 V Ausgangsspannung dieselben Widerstände nehmen? Wäre euch sehr dankbar, wenn ihr mir diese Fragen beantworten könntet ... :)
> ...dass ein 1M Ohm-Widerstand als R23 genohmen worden ist? > Wofür wird C7 benötigt? > Warum gibt es noch R24 mit 1k Ohm, wenn wir schon R23 haben? Das sind ganz schön viele Fragen, für so wenige Bauteile. Ich würde vermuten, bei der Auswertung dieser Tasten ist gar kein AD-Wandler beteiligt. Sondern folgender Ablauf: 1) PC4 gibt '1' aus, C4 wird geladen 2) PC4 wird als Eingang geschaltet (hochohmig) und ein Zähler wird gestartet. 3) C7 wird über einen Taster+Widerstand entladen oder falls kein Taster gedrückt ist, über R 23 vollends aufggeladen. 4) Jetzt wird gewartet, bis an PD3 '0' eingelesen wird oder ein Timeout auftritt 5) Der Zähler wird gestoppt und aus dem Zählerstand die Taste ermittelt. Das ist viel billiger, als AD-Wandler zu verwenden.
Danke danke ... ;) Aber warum werden diese Ergebnisse dann als 1, 2, 4, 8, 16, 32 ausgegeben, wenn man die Funktion PollSwitch aus der ASURO-Library benutzt? Und wie kann ich erkennen welche Schalter benutzt werden, wenn mehrere Schalter gedrückt worden sind?
Gast
#963405
>Ergebnisse dann als 1, 2, 4, 8, 16, 32
Ohne mir das Programm anzusehen:
Aber solche Ausgaben nennt man Bitset.
Da ist jedem Bit eine Bedeutung zugewiesen.
SOmit können die Ereignisse unabhängig von den anderen in demselben Bit
dargestellt werden.
Gast
#963411
Lothars Erklärung klingt plausibel. Ich hätte aber noch eine andere Deutung anzubieten (interessant, wie man die gleiche Schaltung auf so unterschiedliche Weisen interpretieren kann :)): Ich schätze, dass die Idee hinter der Schaltung die folgende ist: Wenn PD3 als Ausgang mit High-Pegel (VCC) konfiguriert ist liegt am ADC-Eingang PC4 je nach Kombination der gedrückten Tasten eine Spannung zwischen VCC/2 und VCC an. Aus dem ADC-Wert kann die Tastenkombination berechnet werden. R23 hat in diesem Fall keine Funktion, da er in diesem Fall praktisch parallel zu dem wesentlich kleineren R24 liegt. R24 sollte etwa R25/2 sein, um maximale Spannungsdifferenzen zwischen den einzelnen Tastenkombinationen zu erhalten. Wird hingegen PD3 als Eingang konfiguriert, liegt dort bei nicht gedrückter Taste wegen R23 VCC, also ein High-Pegel an. Wird irgendeine der Tasten gedrückt fällt die Spannung auf 0,3V oder weniger ab, was low entspricht. Man kann also über die Abfrage einer einzigen Portleitung feststellen, ob eine Taste gedrückt worden ist und muss dazu keine zeitaufwendige A/D-Umsetzung starten. Diese wird erst benötigt, um festzustellen, welche Taste(n) gedrückt worden sind. Damit der Eingangspegel an PD3 wirklich sauber low wird, muss R23 groß im Vergleich zu R25 bis R30 gewählt werden, deswegen hat er 1M. Noch besser: PD3 ist ein Interrupteinang. Ein typischer Anwendungsfall sieht also so aus, dass sich das Programm per Interrupt benachrichtigen lässt, wenn eine Taste gedrückt worden ist. Anschließend wird PD3 auf high geschaltet und über den ADC die gedrückte(n) Taste(n) bestimmt. > Wofür wird C7 benötigt? C7 dient zur Entprellung der Taster. > Und kann ich dann bei 5 V Ausgangsspannung dieselben Widerstände > nehmen? Die Schaltung funktioniert bei jeder Versorgungsspannung, die für den Controller zulässig ist. Wird VCC als Referenzspannung für den ADC benutzt, was wahrscheinlich ist, muss man nicht einmal die Schwellwerte in der Software anpassen, da die Schaltung ratiometrisch arbeitet.
Das mit der Differenz, was du am Anfang erwähnst kommt mir sehr bekannt vor. Wenn man sich dazu noch den Code aus der Library anschaut, sieht man, dass eine AD-Wandlung benutzt wird.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
Was mich natürlich nochmal interessieren würde ist, kann man die Widerstände R25 bis R30 auch durch andere ersetzen?
Gast
#963624
Prinzipiell ja, wenn folgendes beachtet wird: - Die Vorwiderstände vor den Tastern sollten so gewählt werden, dass jeder möglichst genau den doppelten Wert seines linken Nachbarn und der Vorwiderstand des linksten Tasters, R25, den Wert 2*(R24||R23) hat. Abweichungen von den idealen Verhältnissen können bis zu einem gewissen Grad durch Anpassen der Formel in Zeile 114 kompensiert werden. - Die Vorwiderstand dürfen nicht wesentlich kleiner als im Schaltplan sein, da sie sonst den Ausgang PD3 bei der Messung zu stark belasten, so dass die Ausgangsspannung an PD3 nicht merh konstant VCC ist, sondern von den gedrückten Tastern abhängt. - R30 sollte nicht größer als R23/4 sein, damit im Interruptmodus, wo das Drücken irgendeiner Taste an dem als Eingang geschalteten PD3 erkannt werden soll, der Pegel bei gedrückter Taste auf mindestens auf 1V bei VCC=5V heruntergezogen und damit sicher als low gelesen wird.
Hallo, wenn ich jetzt mal den Interrupt vernachlässige, wie sieht es mit dem Kondensator aus. Was würde eine Veränderung der Kapazität auf 10 nF bewirken?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.