Hallo zusammen, könnt Ihr mir helfen dieses zu realisieren. Besitze einen ATMega128 und möchte am Eingang einen Reedkontakt anschließen. Wenn dieser betätigt wird, soll der Ausgang für eine genau definierte Zeit geschlossen werden z.B. 100ms, egal wie lange der Reedkontakt am Eingang geschlossen ist. Optimal wäre auch noch wenn die Zeit eingestellt werden könnte vom Betätigen des Reedkontakt bis zum aktivieren des Ausgangs. Z.B. ich betätige den Reedkontakt am Eingang dann soll eine Verzögerung von 20ms stattfinden bis der Ausgang dann für 100ms aktiv wird. Vielen Dank
hierfür gibts natürlich mehrere optionen (bitte mich nicht zu zerfleischen wenn diese nicht die perfekteste ist :)) mit dem kontakt löst du einen interrupt aus - dieser "schließt" den ausgang und startet einen Timer. Der Timer erzeugt nach der eingestellten Zeit (zB 100ms) einen Überlauf und öffnet den ausgang wieder. hast du einen schaltplan dazu?
Danke Am liebsten wäre mir, dass nach Betätigen des Eingangs der Ausgang zeitverzögert (20ms) aktiviert/geschlossen wird und und nach einer bestimmten Zeit (100ms) wieder abfällt/öffnet. Hätte jemand eine Idee, wie hiefür ein Code aussehen könnte. Wäre euch sehr dankbar.
hier mal etwas pseudo code: while(1) { if(eingang aktiviert) { warte(20ms) öffne_ausgang() warte(100ms) schließe_ausgang() } }
Ein ATmega128 ist glaube ich ein bisschen oversized für das Projekt, wenn du den grad mal so liegen hast ok aber wenn du noch auf einen kleineren Typ umsteigen kannst solltest du dies tun, vorausgesetzt es bleibt bei der oben genannten Funktion!!!!
hhmmmm wrote:
> Ein ATmega128 ist glaube ich ein bisschen oversized für das Projekt,
"ein bischen" ist noch stark untertrieben.
Ein ATtiny13 reicht dicke.
Mechanischer Kontakt und externer Interrupt vertragen sich nicht
(prellen).
Daher nen Timerinterrupt mit 4-fach Abtastung nehmen.
Bei 6ms Abtastintervall hast Du auch gleich 18..24ms Verzögerung.
Peter
ja ich weiß dass ein ATmega128 zu oversized ist. Später werde ich einen ATiny13 nehmen. Auf meinem Testboard ist jedoch ein 128er. Zum testen ideal. Das mit dem entprellen hätte ich mit eingebunden. Leider sind meine Programmierkenntnisse nicht so gut. Vielleicht kann mir jemand von euch helfen einen Code zu schreiben. Wenn wir also den Kontakt entprellen dann ist eine Verzögerung eh nicht mehr notwendig. Jetzt bräuchte ich nur noch, dass der Ausgang verzögert aktiviert wird. Zudem darf der Ausgang auch nicht erneut aktiviert werden, wenn der Eingang noch geschlossen ist. Z.B. ich betätige den Eingang 1 Sek. dann darf der Ausgang aber trotzdem bloß 100ms geschlossen sein. Wenn der Eingang dann abgefallen ist, ist auch der Ausgang = 0. Erst wenn der Eingang dann wieder erneut betätigt wird soll der Ausgang = 1 sein. Wäre sehr dankbar, wenn jemand von euch hierzu einen Code für Bascom schreiben könnte und mich unterstützen könnte. Danke Gruß Markus
vielleicht noch als Zusatz: am einfachsten geht's wohl analog mit zwei monostabilen Kippstufen
was hast du den für ein testboard? kannst du davon mal schaltplan oder sowas posten?
Würde es gerne mit einem attiny umsetzen, da evtl. noch weitere Funktionen folgen. Testboard: Display 3000 http://www.display3000.com/html/mikrocontroller.html War mein Einstieg in die uC Welt. Wär super wenn wir einen Code für mein Vorhaben erstellen könnten. Gruß Markus
Wenn es auf einem ATTiny13 laufen soll ist es nicht sinnvoll das auf einem Mega128 zu Programmieren. Da es sich anbietet einen Timer zu verwenden und der 13'er nur einen mit 8 Bit hat der 128'er jedoch 8 und 16 Bit-Timer besitzt ist das Programm nich ohne weiteres übertragbar. Was spricht gegen einen eigenen Aufbau mit ATTiny13. Den gibt es auch im DIL-Gehäuse. gruß hans
Ja ist kein Problem, ist in kurzer zeit aufgebaut. Ich bin da flexibel. Dachte nur man könnte das Prog. auf dem 128 Testen. Macht aber nix ich kann den tiny auch ohne Probleme anschließen. Wär super Danke
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.