hallo leute mal wieder ne noop frage von mir bin gerade am verzweifeln und zwar: will hier nix weiter machen als den zustand von zwei tastern einlesen habe dafür folgendes gemacht: void aktion() { if ( (PIND & (1<<PIND0)) ) { lcd_clrscr(); lcd_puts("links"); } if ( (PIND & (1<<PIND1)) ) { lcd_clrscr(); lcd_puts("rechts"); } } SIGNAL (SIG_INTERRUPT0) { aktion(); } int main () { DDRD &= ~(1<<DDD0); PORTD |= (1<<PD0); DDRD &= ~(1<<DDD1); PORTD |= (1<<PD1); //DDRD &= ~(1<<DDD2); PORTD |= (1<<PD2); sei(); lcd_init(LCD_DISP_ON); lcd_clrscr(); for(;;) { aktion(); } return 0; } nun ist irgendwie das problem, dass ich keinen knopf drücken brauch er zeigt dennoch immer 1 woran liegt das? verkabelung: GND-------[Taster 1]-------(PIND0) | ------(PIND2) GND-------[Taster 2]-------(PIND1) | ------(PIND2) danke im vorraus
Irgendwie vermisse ich die Initiralisierung der Interrupts ... Prüf mal ob die defaults in GIMSK oder so ähnlich passen. Der Aufruf von "aktion" innerhalb der for-ever schleife ist imho überflüssig - dann brauchst Du keine Interrupts wenn du die Pins in der Schleife pollst ... Grüße, Stefan
alles klar habs gefunden die pull downs werden gemacht mit portd zuweisung (interne pulldowns) irgendwie waren meine schalter öfnner des hab ich jetzt so gelöst, dass ich einfach prüfen if ( !(PIND & (1<<PIND0)) funzt eigentlich recht gut was das aktion in der for angeht des war nur gespiel ist logischerweise normalerweise raus aber noch eine frage wenn ich jetzt meine verarbeitung starte wenn pind0 oder pind1 0 ist wie mache ich das da mit dem interrupt der schaltet ja wenn die hight sind jemand ne ahnung?
Ich les zwar was von Pulldowns, aber nur im zusammenhang mit externer beschaltung
mh stimmt eigentlich pull downs bei aktiv height ;) dann verstehe ich aber net, warum die bei mir aktiv height sind hab ja so geschaltet: erde -> taster -> pin am atmega sollte dann doch eigentlich funzen oder net? ich will ja, dass die aktion ausgeführt wird, wenn ich nen taster drücke
Irgendwie solltest Du Dich mit den Grundlagen mal vertraut machen. Pull-Down: Da gibt es einen Widerstand vom Pin nach Masse. Ist an dem Pin nichts angeschlossen dann misst man am Pin einen 0 Pegel. Pull-Up: Da gibt es einen Widerstand vom Pin zur Versorgungsspannung. Ist an dem Pin nichts angeschlossen, so misst man am Pin einen 1 Pegel. Ein AVR hat keinen Pull-Down, sehr wohl aber einen Pull-Up. D.h. wenn Du die internen Pull-Ups aktivierts, dann stellst Du dort eine logische 1 fest, wenn nichts angeshlossen ist. Um dort also eine Aenderung festzustellen, brauchst Du daher einen Schalter, der den Pin mit Masse verbindet. Wird der Schalter geschaltet, dann wechselt der Pegel von 1 auf 0. Du kannst den Schalter auch anders herum einbauen: Im Grundzustand ist er geschaltet (am Pin liegt dann 0 an) und bei Betaetigung wird der Schalter geloest (am Pin liegt dann 1 an). Am besten probierst Du das ganze mal ohne µC nur mit einer Batterie, einem Widerstand, einer Led und einem Schalter durch, dann wird Dir sehr schnell klar, was da passiert: 5V + ---------. | --- | | 330 Ohm | | --- | | .----------. | | | . --- / \ Schalter Led v . ----- | | | | | - ---------.----------. Die Led zeigt Dir durch Leuchten den Pegel, 1 oder 0 an. Wunder wirkt auch, den Taster mal mit einem Durchgangspruefer durchzumessen. Es gibt naemlich Taster, die im Grundzustand geschlossen sind und bei Betaetigung oeffnen und umgekehrt. Obige Schaltung zeigt das sehr schoen.
mh ok danke, dass du so geduldig bist ist halt doch was anderes als ne sps mit fup zusammen zu schieben kann leider im moment net viel basteln da ich wieder mal nur 10 ohm widerstände rumliegen habe aber mal zum verständnis der zustand der schalter wird also für den avr negiert, wenn ich pull ups nutze bei pull downs wäre das ein gleich hab ich das richtig verstanden?
Wenn Du den Schalter wie gezeigt einbaust: Ja Wie gezeigt ist: Wenn der Schalter (eigentlich Taster) nicht gedrueckt ist, dann ist er offen -> der Pull-up zieht den Pin auf 1 Ist der Schalter ( Taster ) gedrueckt, dann verbindet der Schalter/Taster den Pin mit Masse und am Port stellt sich logisch 0 ein.
ok danke des ganze funzt jetzt auch bei mir ist ne uhr mit drei tastern der erste springt ins / aus dem setup menu die anderen beiden stellen minuten / stunden ein funzt recht gut :) nochmal danke lese mich jetzt mal in adc ein weil soll noch ne temperatur angezeigt werden
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.