Hallo, Ich taste mit der Schaltung meinen µC "ein" (über GND), der µC macht die Selbsthaltung und schaltet sich selbst wieder "aus". Jetzt möchte ich gerne den Taster mit dem µC abfragen wenn die Schaltung eingeschaltet ist. Nur wie mache ich das am elegantesten? µC ist ein attiny24, konstruktionsbedingt kann ich nur diesen Taster nutzen. Über eine Anregung wäre ich sehr dankbar :) lg Malte
> Ich taste mit der Schaltung meinen µC "ein" (über GND), der µC macht die > Selbsthaltung und schaltet sich selbst wieder "aus". Also ein Interrupt-Sleep Verhalten? Es spricht technisch nix dagegen, den Pin von Interrupt-Eingang während der Einschaltphase wie einen normalen Input-Pin zu pollen. Die Interruptfunktion ist dann abzuschalten und erst wieder zu aktivieren bevor es ans Schlafen geht.
Deine Schaltung habe ich nicht kontrolliert. Dennoch: Aufpassen den max. DC Ratings am µC, wenn du den Taster anhängst.
hallo. das passt gut...ich habe bei der tasterabfragung ein problem... #include <avr/io.h> #include <util/delay.h> #define F_CPU 8000000 int main (void) { DDRC = 0x00; DDRD = 0xff; PORTC = 0xff; while(1) { if (PINC & (1<<PC0)) { PORTD = 0b00000001; _delay_ms(100); PORTD &= ~ 0b00000001; _delay_ms(100); } else if (PINC & (1<<PC1)) { PORTD = 0b00000010; _delay_ms(100); PORTD &= ~ 0b00000010; _delay_ms(100); } else if (PINC & (1<<PC0) | (1<<PC1)) { PORTD = 0b00000011; _delay_ms(100); PORTD = ~ 0b00000011; _delay_ms(100); } else { PORTD = 0x00; _delay_ms(50); PORTD &= ~ 0x00; _delay_ms(50); } } return 0; } wenn dieser zustand ist: else if (PINC & (1<<PC0) | (1<<PC1)) { PORTD = 0b00000011; _delay_ms(100); PORTD = ~ 0b00000011; _delay_ms(100); } habe ich ein ausgang auf PD0. wieso nicht bei beiden, wie ich es verlangte.? was mach ich falsch.? danke.
Johannes Adler schrieb: > if (PINC & (1<<PC0)) > { > PORTD = 0b00000001; > _delay_ms(100); > PORTD &= ~ 0b00000001; > _delay_ms(100); > } > else if (PINC & (1<<PC1)) > { > PORTD = 0b00000010; > _delay_ms(100); > PORTD &= ~ 0b00000010; > _delay_ms(100); > } > else if (PINC & (1<<PC0) | (1<<PC1)) > { > PORTD = 0b00000011; > _delay_ms(100); > PORTD = ~ 0b00000011; > _delay_ms(100); > } Dein Controller arbeitet die Schleife ab und stößt auf die obere else if anweisung. Wenn PINC & (1<<PC0) == true ist, wird die Anweisung darunter abgearbeitet. Den else if Zweig darunter mit (PINC & (1<<PC1)) oder PINC & (1<<PC0) | (1<<PC1) (Setz mal sicherheitshalber ein paar mehr Klammern) müsste der Controller dann ignorieren, weil er schon einen passenden fall in deinem IF-Konstrukt gefunden hat. (Priorisierung von IF-Cases) Also, entweder tauschen oder: if ... end if if ... end if (also ohne else!)
Benjamin Utz schrieb: > if ... > end if > if ... > end if Error 5 'end' undeclared (first use in this function) D:\Elektronik\avr\Projekte\Tests\Test_1\main\main.c 20 2 main brauch ich dafür eine header datei.?
mmm ich habe mich wohl etwas missverständlich ausgedrückt... ich denke so ist es verständlicher. Drücke ich den Taster so leitet der Mosfet, der µC startet und macht über den Transistor die Selbsthaltung. An Akku + liegt 12V Jetzt möchte ich, wenn der µC die Selbsthaltung geschaffen hat und meine Schaltung arbeitet, den Taster gerne weiter auswerten.
Benjamin Utz schrieb: > (Setz mal sicherheitshalber ein paar mehr > Klammern) müsste der Controller dann ignorieren, weil er schon einen > passenden fall in deinem IF-Konstrukt gefunden hat. und wo soll ich mehr klammern setzen.?
Eine Diode in die Tasterleitung zum IRF sollte für die Ansteuerung dessen kein Problem sein. Zum µC hin zwischen Taster und Diode abgreifen.
Mit einem ADC die Spannung an 2 des Tasters messen. Die sollte bei aktiver Selbsthaltung und offenem Taster wg. T5 leicht über GND liegen und bei gedrücktem Taster auf GND.
Johannes, was bu den für einer? Fremde Threads für eigene Fragen kapern und Pseudocode nicht von C unterscheiden können...
Hallo, das mit ADC... ich habe dort bei der Selbsthaltung ~30mV Differenz und meine Akkuspannung variiert auch. 5V/1024 macht ne Auflösung von 4mV das wird glaube ich nicht sauber funktionieren. Das mit der Diode habe ich noch nicht ganz verstanden... lg Malte
Wenn du zwischen Taster und R10 eine Diode mit Kathode zum Taster schaltest, bekommt der IRF GND über Taster und Diode. Der µC schaltet den Transistor und der IRF bekommt GND darüber. Wenn du nun zwischen Diode und Schalter auf einen Eingang des µC gehst, PullUp aktivieren, hast du high wenn Taste nicht gedrückt oder low, wenn TAste gedrückt.
~30mV, differentiell gemessen und mit Gain 20x, und 1.1V ADC Voltage Reference, beim Attiny24 geht das ja... Ich würde nicht grundsätzlich ausschliessen un mal im Prototyp probieren.
So ? Das Funktioniert nicht da im ausgeschaltetem zustand an +5V wohl GND. 5V Werden durch einen Schaltregler erzeugt... lg
Ich würde auch den internen PullUp des µC verwenden, den schaltest du doch erst im Betrieb ein.
Hubert G. schrieb: > Ich würde auch den internen PullUp des µC verwenden, den schaltest du > doch erst im Betrieb ein. Bleibt aber noch das ich dann ja am Pin 12V-5V habe und ich bekomme so keine 5 auf den I/O... also das scheint nicht zu Funktionieren... aber danke :).
Die Idee von Hubert ist gut, du musst sie aber mit der Software aber richtig bedienen. 1. vom µC aus Selbsthaltung einschalten. Dadurch sieht die Anode der Diode ~GND. 2. jetzt den internen Pull-Up am µC einschalten und die Kathode der Diode (und Pin 2 des Tasters) sehen ~5V. 3. Der Taster ist jetzt active-low, d.h. du an mit einem LOW Pegel am µC Pin erkennen dass der Taster gedrückt ist. 4. Bevor der µC die Selbsthaltung löst, ist der interne Pull-Up wieder auszuschalten.
Der Rückstrom könnte tatsächlich störend wirken. Dann halt einen Transistor dazu.
ich habe das mal aufgebaut... das funktioniert leider nicht, Transistor ist ein BC639 den ich noch hier hatte...
Schaltet der IRF nicht oder funktioniert die Tastenerkennung nicht?
dann probier mal die Schaltung aus, einschalten mit Low an D6, zum Ausschalten muss Low an D8. Auszug aus der Schaltung vom portablen Mikrokoptertool. Christian
Die tasten Erkennung, ich habe am PIN2 vom Taster ja keine 5V anliegen da liegt GND Potential...
mach was drauss,die Schaltung funktioniert so. an C21 liegen übrigens 3,2-4,2V, die werden beim Einschalten mit Low(GND) über den FET an den Spannungswandler geschaltet, der FET hält sich selbst über R43/T43 und kann dann über Low an der Basis von T43 wieder abgeschaltet werden. Christian
mmm ok ich schau mir das mal an... wobei ich ja nicht nur ein/abschalten will, das funktioniert ja. Ich will gleichzeitig noch den Taster mit dem µC auswerten... wenn die Selbsthaltung aktiv ist.
Danke, hab den ganzen Schaltplan gefunden und die Schaltung glaube ich verstanden... werde es mal umsetzen... http://svn.mikrokopter.de/filedetails.php?repname=Projects&path=/Transportables_Koptertool/tags/V3.x/HW_Koptertool3_9/Release_PKT_V3_9m_sch.pdf
ok, dann bekommst Du den Rest auch noch, Key_plus findest Du in dem anderen Bild wieder. Genau das mache ich da, Taste Key_plus zum Einschalten und danach wird die Taste als Taste benutzt. Christian
Herzlichen Dank ich hatte da eben einen Knoten im Kopf bezüglich des Pullups. R41, R40 und C23 bilden denke ich ein Low Pass filter zum entprellen, C23 wird über R40 entladen und R41 wieder geladen wenn der Transistor nicht mehr durchschaltet, liege ich da richtig? Danke für den Wink...
so ist es. Hast ja die Schaltung schnell gefunden;-) MK-Pilot?
Ne einfach "portablen Mikrokoptertool" gegooglet und gut ;). Aber Mikrokopter stehen auch noch auf meiner Liste... Komme eher aus der Flächenflieger ecke ;) Ich dank dir und ein Schönen Abend.
oh ja, Google ist da ja sehr aufmerksam, war mir noch garnicht aufgefallen. Na dann mal zu, Mikrokopter und AVR passt gut zusammen. Christian
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.