mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 Ausgang mit Timer schalten


Autor: Boris L. (boriza)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Boris L. (boriza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Boris L. (boriza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.