Hallo KiwiJoghurt,

Zitat Zitat von KiwiJoghurt
... mit den Tastern ist warscheinlich nicht so schwierig, wenn man für jeden Taster eine andere Spannug verwendet ...
Genau so wird es ja auch gemacht. Die Taster bedienen verschiedene Spannungsteiler an einem einzigen AD-Wandler (ADC = Analog Digital Converter), so dass die Spannung am ADC davon abhängt, welcher Taster gedrückt ist. Bei geschickter Wahl der Widerstände könnten auch mehrere Taster, auch gleichzeitig, erkannt werden. Die Widerstände, die Versorgungsspannung und die Referenzspannung - letztere sorgfältig entstören, steht im doc - sollen dann sehr genau sein.

Zitat Zitat von KiwiJoghurt
... Den Satz mit der Gabellichtschranke habe ich noch nicht ganz verstanden, ich habe zwar gesehen, wie du die Lichtschranke angebracht hast, aber ab dem Interrupt komme ich nicht mehr mit ...
Ja ja, mein Jammer - ich schreibe immer viel, aber nicht sehr verständlich. Schlimm schlimm.

Der Lichtstrom der Gabellichtschranke wird von einer Art Propeller auf der Motornabe unterbrochen. Deshalb gibt sie mir ein Signal "beinahe 5V", und "knapp über Null Volt", also logisch high oder low. Dieses Signal geht an einen Pin "external interrupt request". Das ist ein ziemlich hoch priorisierter Interrupt der anspricht, wenn der Pin entsprechend initialisiert ist und einen Pegelwandel 0->1, also steigende Flanke, oder 1->0, also fallende Flanke, erkennt. Ich habe den für steigende Flanke initialisiert (ist eigentlich gehupft wie gesprungen) und bei jedem Mal, wenn dieser Pin erkennt, dass eine solche Flanke vorliegt, dass also der Unterbrecher den Lichtstrom frei gegeben hat und die Lichtschranke von 0 auf 1 geht, dann wird die Interruptroutine aufgerufen und ich schreibe darin den Wert eines Zeitzähler in eine Variable die etwas so heisst "aktueller_Zeitwert_von_Interrupt_0". Ausserdem zähle ich von diesem Wert den Wert des vorher notierten "alt_aktueller_Zeitwert_von_Interrupt_0" ab und notiere diesen Wert als Dauer zwischen dem vorhergehenden und dem aktuellen Interrupt. Dieser Wert ist ein Mass für die Drehzahl meines Motors. Ist das verständlicher? (puhhh - hoffentlich - ist halt leider wieder ewig lang).

Zitat Zitat von KiwiJoghurt
... Kann es sein, das 'analogen Ports' einen ADC beinhalten?
Und I/O Ports sind Leitungen mit denen man die Zustände Eins und Null senden bzw. empfangen kann ja? ...
Jein. Ein analoger Port kann bei unseren Controllern als ADC arbeiten, aber auch als "normaler" digitaler Output oder Input. Es kommt darauf an, wie der Port aktuell initialisiert ist. Ich könnte den Port zum Start als digitalen Input nehmen und auf den Kontakt einer einzigen Taste warten - und den gleichen Port anschliessend für ...irgendetwas Analoges... initialisieren und verwenden. USW.

Zitat Zitat von KiwiJoghurt
... Dann müste mann doch an 10 I/O Ports ein 10 Bit Analog Digital Wandler Anschließen können, der, sagen wir, einen Lichtsensor auswertet. Wenn man dann noch 4 weitere Ports dazunimmt kann man dafür sorgen, das bei einer bestimmten kombi dieser 4 Ports mit einer geschickten Multiplexerschaltung ein bestimmter Lichtsensor seine Werte an den ADC sendet, solange bis sich die Kombo ändert. Dann sendet ein anderer Lichtsensor. Ist das möglich?
UUUUPs - das klingt jetzt für mich schwer verständlich. Aber mal überlegen.

Soweit ich es weiß, können alle AD-Wandler bei ATMEL-Controllern eine 10 Bit Wandlung durchführen. Die kann bei entsprechender Parameterisierung auch als 8 Bit Wandlung genutzt werden.

Controller die 10 Ports mit ADC Funktion haben, also z.B. der tiny26 (11 ADC) oder der mega640 (16) oder der mega2560 (16) können an jedem dieser Ports nach entsprechender Initialisierung einen analogen Wert einlesen bzw. auswerten (lassen). Der Controller den ich einigermassen gut kenne, der m168, hat 6 oder 8 AD´-Pins, je nach Bauart, und kann die für AD-Wandlungen nutzen. Du hast recht - es ist nur ein einziger AD-Converter drauf, der gemultiplext werden muss. Auch weiter hast Du recht: wenn Du jetzt vier (sagen wir mal DIP-) Schalter hast, dann kannst Du darüber durch entsprechende Kombination einen dieser Ports auswählen (= DIP-Schalter durch Software einlesen und bei Änderung entsprechenden Port initialisieren) - bei 6 ADC´s reichen sogar drei Schalter. Für Deine 10 Ports brauchst Du aber fünf Bits (schon klar, oder?). Dabei wird je nach Schalterstellung die ADC-Initialisierung entsprechende Parameter für die Ports setzen bzw. in das Multiplex-Register senden. Genaueres steht in den doc´s von Atmel (<<<= bequeme Ausrede, wenn man nicht mehr weiter weiß!). Trifft das die Frage?