Hallo, ich habe folgendes Problem, ich möchte durch das drücken eines Tasters am PB0 des ATMEGA8 (wird auf Masse gezogen)einen Ausgang PC0 für ca.30 Sekunden auf High setzen. Allerdings soll beim erneuten drücken des Tasters der Ausgang PC0 sofort wieder auf Low gehen. Die Ausgänge mit Taster einschalten, solange man drückt ist kein Problem... aber das mit der Zeitverzögerung und Abschaltung durch erneutes drücken schon. Also bitte, wenn mir wer helfen könnte... Vielen Dank !
Du kommst scheinbar ohne Entprellung aus. Das ist seltsam. In der Codesammlung findet sich ein Beitrag "Tasten entprellen", den würde ich mir mal ansehen.
Klingt nach Treppenhausautomat. Hier ist ein Beispielcode dafür: Beitrag "Wartezeiten effektiv (Scheduler)" Peter P.S.: Programme sind keine Briefe (*.txt), sondern je nach Sprache *.c, *.asm, *.pas usw.
Hallo und Danke für die tollen Tips ! Aber das bringt mich nicht wirklich weiter.... Also hat keiner eine Idee wie er helfen kann ? Das ist doch wenn man fit ist eine banale Programmieraufgabe.... Danke ! Gruss Boriza
Hi, das ist wirklich poppelig Aber ohne zu wissen auf welchem Takt dein µC läuft, kann man nur raten wie der Timer eingestellt werden muß. Also wäre es sehr hilfreich dies zu wissen. Dann würde ich mich auch erbarmen, dir den Code (Hausaufgabe) schnell hin zu kritzeln. Gruß
Boris wrote: > Aber das bringt mich nicht wirklich weiter.... Diese Aussage ist nutzlos, da sie nicht erklärt, wo Du nicht weiter kommst. > Also hat keiner eine Idee wie er helfen kann ? Nun, der Link ist doch schon zu 98% die Lösung. > Das ist doch wenn man fit ist eine banale Programmieraufgabe.... Wenn man einen Scheduler und einen Entpreller schon als fertige Module hat, dann ja. Und da es so banal ist, will ich Dir nicht das Vergnügen nehmen, die restlichen 2% Anpassung selber zu machen. Peter
> Das ist doch wenn man fit ist eine banale Programmieraufgabe.... Deshalb ist es wahrscheinlich auch eine Hausaufgabe ;) Nagut, was ist nun zu tun? Irgendwie müssen wir den Timer 0 zum laufen bekommen. Hierfür gibt es laut Datenblatt (ich geh davon aus dass du das Kapitel zum 8-Bit Timer 0 gelesen hast. Bitte bezieh dich bei späteren Fragen darauf!) die Special-Function-Register TCCR0, TCNT0, TIFR und TIMSK. Damit ist der Timer 0 bedeutend einfacher als z.B. der mächtige 16-Bit Timer mit seinen vielen Betriebsarten. Folgendes hast du schon: > TCCR0|=(1<<CS00)|(1<<CS02); Damit hast du schonmal den Timer mit einen Prescaler von 1024 am laufen. Wenn dein Controller z.B. mit 8 MHz läuft, zählt der Timer nun mit 1953 Hz oder in Schritten von 512µs. Schau dir mal im Datenblatt das Register TIFR an und versuch den Sinn von TOV0 zu verstehen. Wenn du z.B in in der Hauptschleife pollst ob es gesetzt ist und es dann wieder löschst (->Datenblatt!) und eine Variable inkrementierst hast du schon einen Zähler mit ca. 131ms. Ist das ein Anfang? Zwei Dinge noch: 1. Es gibt hier für die Timer prima Tutorials. Lies sie durch und versuch sie zu verstehen. Bezieh dich dann in weiteren Fragen auf das Tutorial und die Seite im Datenblatt deines Controllers. 2. Du benötigst trotzdem noch eine Tastenentprellung. Kurz: Nur wenn du über eine Zeitspanne von mehreren 10ms einen konstanten Zustand an deinem Pin hast, ist die Messung gültig. Auch hierfür gibt es Artikel auf dieser Seite. Peter Danneger hat hierzu eine wunderbar schnelle Routine geschrieben. Wenn du bereit bist dich mit Interrupts zu beschäftigen würde ich dir nahelegen seine Routine mal genauer anzusehen.
Noch etwas: Viele die dir hier bereitwillig helfen wollen haben sich ihr Wissen zu einer Zeit angeeignet, wo es keine Internet-Foren gab wo man fragen konnte. Datenblätter waren auch nicht soo einfach zu bekommen und es gab keine Tutorials. Man musste trockene Fachliteratur in Büchereien wälzen und häufig waren die ersten wackeligen Gehversuche mit stunden und bisweilen tagelangem herum probieren verbunden. Also sei lieber froh über die Möglichkeiten die sich dir hier in diesem Forum bieten und passe auch deinen Ton entsprechend an. Ist nicht bös gemeint, erleichtert dir aber das Leben hier ungemein.
Hallo, also erstmal vielen Dank für euere schnellen Antworten. Ja, es ist schön das es dieses Forum gibt und das Forum ist auch wirklich gut - aber man muss ja nicht gleich alles was hier geschrieben wird auf die Goldwaage legen oder ?! Entspannt euch mal, es gibt auch noch ein Leben ausserhalb der Programmierung von Controllern und das ist manchmal auch sehr anstrengend. Ich wollte hier niemanden nötigen oder beleidigen, ich habe nur ein Problem bei der Umsetzung meiner Idee und würde das gerne möglichst schnell lösen und wäre sehr froh, wenn jemand dabei helfen will. Wenn ich mehr Zeit hätte, würde ich mir das auch mühsam aus Büchern aneignen aber das wird in der nächsten Zeit eher schwer, was aber nicht heissen soll das ich hier nur Wissen abgreifen will und dann nicht bereit wäre auch etwas dafür zu tun und zu teilen. PS: Der Takt auf dem der Controller läuft ist mir relativ egal, ich habe noch genug Quarze in 6 und 8MHz. Z.Zt. läuft er auf Takt 1,843 MHZ des STK500 Boards. Gruss Boriza
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.