Hallo zusammen, Ich möchte folgendes realisieren: Ich habe eine LED durchgemessen und von 0 bis volle Helligkeit 7 Stufen aufgeschrieben. Über zwei Button möchte ich diese Stufen an der LED einstellen. Dazu habe ich mir gedacht, da es ja ein Attiny 85 mit nur einem External Interrupt ist den Pin Change Interrupt zu nutzen. So habe ich den Pin Change initialisiert: GIMSK |= _BV(PCIE); PCMSK |= (1 << PCINT3) | (1 << PCINT4); sei(); Und so versuche ich dann die LED anzusteuern: ISR(PCINT0_vect) { if (digitalRead(incBright) == HIGH) { analogWrite(led, 0); } if (digitalRead(decBright) == HIGH) { analogWrite(led, 1023); } } Zum Testen habe ich mal nur die Zustände an und aus genommen. Ich habe es schon über verschiedene Pins zu machen, aber wenn ich zum Beispiel anstatt PCINT4 PCINT0 nehme ergibt sich daraus auch ein ganz anderes Verhalten bei PCINT3 welches ich nicht verstehe. Vielleicht kann mich da jemand drüber aufklären und mir auch Hilfestellung geben. Und bitte habt Nachsicht mit mir, ich habe gerade erst damit angefangen ;) Viele Grüße Kevin Raddatz
Hallo, und wo ist digitalRead() definiert ? Die Funktion sieht man nicht.
Hm dass das Problem daran liegt habe ich noch nicht gedacht. Ich kannte sie vom Arduino und die IDE hat mir keine Fehlermeldung dazu gegeben, deshalb dachte ich es müsste so gehen. Was sollte ich denn stattdessen nehmen?
Beschreib bitte den Unterschied den du zwischen den einzelnen PCINTs festgestellt hast. Hast du die Taster über die Hardware entprellt oder ist das in der Digitalread drinnen ? Wenn du noch nen Timer frei hast kannst du die Entprellung von peda nehmen. Da kannst du die Üins der Tasen definieren und die einzeln in der Main abfragen. Gruß JackFrost
:
Bearbeitet durch User
Ich habe den Taster über einen PullDown Widerstand nach dieser Anleitung entprellt: http://we-mod-it.com/board6-allgemein/board108-how-to/board231-raspberry-arduino/1972-arduino-tutorial-1-1-einfacher-taster/ Das Verhalten ist etwas schwierig zu beschreiben, ich versuche es mal: Der Ausgangszustand ist bei beiden, dass die LED schon leuchtet. Pin Change über PIN 2 und 3 (PCINT3, PCINT4): Bei Pin 3 passiert gar nichts, Pin 2 schaltet beim drücken die LED an. Pin Change über Pin 2 und 5 (PCINT3, PCINT0): Beide schalten die LED aus, sie geht aber nicht mehr an. Einen Timer habe ich bisher nicht genutzt.
Zeige nochmal den GANZEN Quelltext. Und möglichst auch den Schaltplan.
Hallo, Kevin R. schrieb: > Ich habe den Taster über einen PullDown Widerstand nach dieser Anleitung > entprellt: > http://we-mod-it.com/board6-allgemein/board108-how-to/board231-raspberry-arduino/1972-arduino-tutorial-1-1-einfacher-taster/ Entprellen ist doch etwas anderes. Schau dir bitte das Schema auf Seite 4 an. # https://datasheets.maximintegrated.com/en/ds/MAX16054.pdf Wir schalten den Taster nach Masse mit einem Pullup. Lothar Miller (Moderator) beschreibt verschieden Methoden in seinen Artikeln: # http://www.lothar-miller.de/s9y/categories/5-Entprellung Hier ist noch ein Beitrag aus dem Forum: # https://www.mikrocontroller.net/articles/Entprellung Also mache es bitte gleich richtig und verwende: # Beitrag "Universelle Tastenabfrage" Ja das nennt man C Programmieren und Bedarf doch der Grundlagen der C-Programmierung. Das was Du bisher gemacht hast ist ein zusammen klicken von Funktionen. Erst wenn man (fas) alles selbst programmieren kann, dann kann man sich Programmierer nennen. Gut es gibt eine C Standard Bibliotheken und AVR Includefiles, die man so wie so immer nutzen darf und sollte.
Hab ich was an den Augen, oder ist LED hier falsch herum eingezeichnet? http://we-mod-it.com/index.php?page=Attachment&attachmentID=20969&thumbnail=1&embedded=1 Und hier ebenfalls: http://we-mod-it.com/index.php?page=Attachment&attachmentID=20970&thumbnail=1&embedded=1
So zum Teil habe ich das Problem nun gelöst bekommen. Ich hatte erwartet, dass man die Pins vom Attiny 1 zu 1 in die IDE übernehmen kann. An wäre ich damit nun fertig, da ich später eh Sensorbutton nehmen werde und die dürften ja eigentlich nicht prellen, oder vertue ich mich da? Zu Lernzwecken würde ich aber trotzdem gerne das Entprellen von Peda einsetzen. Allerdings verstehe ich nicht wie ich das bei mir einsetzen soll..
Kevin R. schrieb: > Zu Lernzwecken würde ich aber trotzdem gerne das Entprellen von Peda > einsetzen. Allerdings verstehe ich nicht wie ich das bei mir einsetzen > soll.. Naja du fügst den Code vom Entprellen ( https://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29 ) ein und veränderst die Werte so das es zu dem Verwendeten Timer und Port/Pins passt. Dann musst du nur noch in der Mainschleife
1 | if( get_key_short( 1<<KEYx )) |
aufrufen und den entsprechenden Code von dem Pin einfügen. Gruß JackFrost
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.