Hallo liebes Forum! Ich habe mit Bascom letztens einen Code geschrieben, in dem ich zwei analoge Signale einlese. Allerdings funktioniert das nicht so richtig, daher wollte ich erfragen, ob es generell möglich ist. Ich habe im Datenblatt gelesen, da steht, dass der komplette Port A für analoge Signale gedacht ist. Kann ja sein, dass wieder irgendwo steht, dass man aber nur einen zur Zeit benutzen kann. Ich frage beide Analogsignale in einem Unterprogramm ab, dass über einen Bebounce-Befehl aufgerufen wird. Viele Dank schonmal! Viele Grüße! :-)
Hi >Ich frage beide Analogsignale in >einem Unterprogramm ab, dass über einen Bebounce-Befehl aufgerufen wird. Der ATMega16 hat nur einen ADC. Also können keine zwei ADC-Kanäle gleichzeitig eingelesen werden. Das geht nur nacheinander. MfG Spess
Was hast du denn für Audiosignale (Art, Frequenz)? Der ATMega16 ist i. A. und u. U. so schnell, dass er mehr als einen Kanal quasi gleichzeitig abtasten kann.
Könnte ich denn zwei analoge Signale einlesen, wenn ich noch einen externen ADC dazu nehme?
Hi >Könnte ich denn zwei analoge Signale einlesen, wenn ich noch einen >externen ADC dazu nehme? Must du denn zwei Signale wirklich gleichzeitig einlesen? Der ATMega16 hat zwar nur einen ADC, aber der kann mit 8 verschieden Eingängen verbunden werden. Und diese Eingänge kann man nacheinander mit dem ADC abfragen. MfG Spess
Vielleicht liegt es auch an meiner Vorgehensweise. Ich habe zwei mechanische Schalter und wollte zuerst über Pins abfragen, ob diese geschlossen sind oder nicht. Leider hat das überhaupt nicht geklappt (verzweifel) :-((( dann habe ich mir überlegt, dass ich das Spannungssignal ja auch einfach am ADC einlesen könnte und dann hat das Programm soweit funktioniert. Leider kommt da jetzt aber nur Stuß raus, wenn ich zwei analoge Signale einlesen will.
> Und diese Eingänge kann man nacheinander mit dem ADC > abfragen. Nur um das klarzustellen: Und bei 'nacheinander' bewegen wir uns Bereich von etwa Millisekunden abwärts, bis etwa 0.06 Millisekunden Kann natürlich sein, dass dir das einen zu großen Zeitversatz bringt. Normalerweise ist es aber kein wirkliches Problem. Hängt aber von der Aufgabenstellung ab.
Ich habe die Schalter mit einer externen Spannungsquelle von 5V verbunden. Geht es auch, wenn ich die Spannung an einem PortX abgreife, mit einem anderen PortY, den ich als Eingang festlege, verbinde und zwischen diesen einen Schalter lege? Wenn der Schalter betätigt wird, müsste ja PortY auf High liegen, oder? Falls das ginge, wie würde denn der Code dazu aussehen?! Vielen Dank im Voraus :-)
Bascompasstschon schrieb: > Vielleicht liegt es auch an meiner Vorgehensweise. Ich habe zwei > mechanische Schalter und wollte zuerst über Pins abfragen, ob diese > geschlossen sind oder nicht. Leider hat das überhaupt nicht geklappt > (verzweifel) :-((( 2 Schalter abfragen sollte aber nicht wirklich ein Problem sein. Erzähl doch mal mehr. Was sind das für Schalter? Wie hast du sie angeschlossen? > dann habe ich mir überlegt, dass ich das > Spannungssignal Wo kommt denn da jetzt eine Spannung ins Spiel? > ja auch einfach am ADC einlesen könnte und dann hat das > Programm soweit funktioniert. Leider kommt da jetzt aber nur Stuß raus, > wenn ich zwei analoge Signale einlesen will. Du schiesst hier aber (höchst wahrscheinlich) mit Kanonen auf Spatzen. Wenn du eine realtiv einfache Sache, nämlich das Feststellen ob ein Schalter geschlossen ist oder nicht, schon nicht hinkriegst, dann ist sehr wahrscheinlich ein ADC nicht das was du willst. Statt dessen willst du eher lernen, wie man Schalter richtig anschliesst, so dass das dann auch funktioniert. Also, erzähl mal mehr über deine Aufgabenstellung. Dann kann man überlegen, ob dein Lösungsansatz überhaupt vernünftig ist.
> Wenn der Schalter betätigt wird, müsste ja PortY auf High liegen, oder?
Die Frage ist eher: Welcher Pegel liegt eigentlich an, wenn der Schalter
NICHT betätigt ist. Ein Eingang, an dem nichts angeschlossen ist (und
das ist der Fall, wenn der Schalter nicht betätigt ist), kann jeden
erdenklichen Zustand annehmen. Der ist nicht automatisch 0. So ein
offener Eingang fängt sich jedes rumlungernde elektromagnetische Feld
aus der Umgebung ein. Und davon gibt es in einem Haushalt jede Menge. Da
sind die 230V Leitungen in der Wand. Da ist Radio, Fernsehen. Da ist das
Feld, welches der Elektromotor im Staubsauger erzeugt. Da ist ...
Bascompasstschon schrieb: > Vielleicht liegt es auch an meiner Vorgehensweise. Ich habe zwei > mechanische Schalter und wollte zuerst über Pins abfragen, ob diese > geschlossen sind oder nicht. Leider hat das überhaupt nicht geklappt > (verzweifel) :-((( dann habe ich mir überlegt, dass ich das > Spannungssignal ja auch einfach am ADC einlesen könnte und dann hat das > Programm soweit funktioniert. Leider kommt da jetzt aber nur Stuß raus, > wenn ich zwei analoge Signale einlesen will. Könnte es vielleicht sein, dass PullUp bzw. PullDown Widerstände fehlen und Du ganz eventuell "nicht verbundene" Pins mit "undefiniertem Pegel" an einem Schalterende auslesen möchtest?
Daher sieht der Standardanschluss eines Tasters/Schalter so aus: --------------+ 5V | | | +-+ | | | | +-+ | | | µC-Pin --+---|-o-----+ | | | / | / Schalter --------------+ | | --------+----- GND (Masse) d.h. der Schalter schaltet nicht nach +5V, sondern nach Masse. Denn der Pullup Widerstand, der die Leitung bei offenem Schalter nach +5V zieht, der ist im AVR schon eingebaut. Den muss man nur aktivieren. Schalter offen -> Eingang liefert eine 1 Schalter geschlossen -> Eingang liefert eine 0 Ob der Eingang bei geschlossenem Schalter eine 0 liefert, oder so wie du dir das vorstellst, eine 1, ist ja programmtechnisch letzten Endes egal. Das eine ist im Programm nicht komplizierter als das andere. Auch wenn du vorstellungsmässig dir mit der Zuordnung 'geschlossen - 1' erst mal leichter tust. Daran gewöhnt man sich aber schnell und dann ist es kein Problem mehr.
Gut, ist sicherlich hilfreicher, wenn ich ersteinmal etwas über meine Aufgabenstellung erzähle ^^. Ich will einen Servomotor, der einen kleinen Aufsatz auf einer Spindel betreibt, mehrmals hin und her fahren lassen. Damit der Aufsatz nicht gegen das jeweilige Endstück knallt, will ich über Endschalter abfragen, ob er diesen erreicht hat, oder nicht. Wenn er geschlossen ist, soll der Motor dann anhalten. Die Schalter sind von der Firma "Kema Keur", ich habe die in der Werkstatt gefunden, ich weiß leider nicht nicht welches Modell. Die haben einen Eingang 1 und zwei Ausgänge 2,3. Ich brauche aber nur einen Eingang und einen Ausgang. Da gebe ich Ihnen Recht, das mit dem ADC ist wirklich mir "Kanonen auf Spatzen" geschossen, aber das andere habe ich irgendwie überhaupt nicht hinbekommen und war schon total verzweifelt, weil es ja keine schwierige Sache darstellt :-((. Daher würde ich mich über Hilfe sehr freuen. Viele Grüße!
Bascompasstschon schrieb: > Gut, ist sicherlich hilfreicher, wenn ich ersteinmal etwas über meine > Aufgabenstellung erzähle ^^. > > Ich will einen Servomotor, der einen kleinen Aufsatz auf einer Spindel > betreibt, mehrmals hin und her fahren lassen. Damit der Aufsatz nicht > gegen das jeweilige Endstück knallt, will ich über Endschalter abfragen, > ob er diesen erreicht hat, oder nicht. Wenn er geschlossen ist, soll der > Motor dann anhalten. Passt perfekt. Schalter wie im letzten Posting anschliessen und ganz normal auslesen. Portpin auf Eingang, Pullup aktivieren und auf die Zuordnung 'geschlossener Schalter liefert eine 0' achten
Hi Muss doch auch noch was beitragen.... > Ich will einen Servomotor, der einen kleinen Aufsatz auf einer Spindel > betreibt, mehrmals hin und her fahren lassen. Damit der Aufsatz nicht > gegen das jeweilige Endstück knallt, will ich über Endschalter abfragen, > ob er diesen erreicht hat, oder nicht. Wenn er geschlossen ist, soll der > Motor dann anhalten. Es ist in der Regel besser, du benutzt bei einem Schalter den Öffner. Das bedeutet, Freigabe zum Drehen des Motors, wenn der Kontakt geschlossen ist, anhalten, wenn der Kontakt öffnet. Das hat den Grund, das wenn es einmal zu einem Drahtbruch kommt, der Motor eben keine Freigabe mehr hat und dann auch sofort stehen bleibt. Würdest du darauf warten, das sich der Kontakt sschließt, läuft der Motor im Fehlerfall bis Rauchzeichen dem ein Ende setzen. Ansonsten, denk an Widerstände, entweder die internen Pull-Down oder externe Pull-Up. Gruß oldmax
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.