ATmega8 Pin für eine Zeit x ansteuern

OP #1078059
Lesenswert?
• ▲
▼
Hallo an alle bin absoluter Neuling und bitte dringend um Hilfe!

Hab mir von Myavr das Komplettpacket gekauft und schon mal mit den 
Vorlagen etwas herumprobiert.
Jetzt möchte ich versuchen eine Led angeschlossen an enen Pin für eine 
Zeit x leuchten also den besagten Pin anzusteuern.

Danke schon mal im voraus
Gast #1078064
Lesenswert?
• ▲
▼
>Jetzt möchte ich versuchen eine Led angeschlossen an enen Pin für eine
>Zeit x leuchten also den besagten Pin anzusteuern.

Du hast unser aller Erlaubnis dazu. Brauchst aber auch nicht fragen.
Gast #1078088
Lesenswert?
• ▲
▼
>Wow langes Tutorial
>hättest du einen Tip unter welchem Kapitel ich da suchen soll.

Wie wäre es, wenn du es von Anfang an durcharbeiten würdest?
Tutorien sind in der Regel so aufgebaut, dass ein Kaptiel auf dem 
anderen aufbaut.
Mit deiner Vorgehensweise wirst du hier viele Freunde finden...
OP #1078160
Lesenswert?
• ▲
▼
Also wenn ich das richtig verstehe wartet der Timer eine gewisse Zeit 
sprich zählt hoch bis er den nächsten Pin oder Port ansteuert.

Wenn ich das in einer Schleife mach blinkt es bei einer Led und ein 
Lauflicht entsteht bei zwei oder mehr Led.

Möchte aber das das Led bei Tastendruck für 3 sec leuchtet

Kann ich da einfach

PORTB = 0x04 +3sec;

schreiben???
Gast #1078211
Lesenswert?
• ▲
▼
> Kann ich da einfach

> PORTB = 0x04 +3sec;

> schreiben???

Ich würde mir zuerst mal ein Buch über C-Programmierung besorgen. Bei 
dir fehlt es an elementarsten Grundlagen.

Mit Timer, als C-Code, funktioniert das so:
Du stellst den Timer so ein, dass er z.B. alle 0,01 Sekunden einen 
Interrupt auslöst. Weiters legst du eine globale Variable vom Typ 
volatile unsigned integer an, z.B "LED_time" genannt.

Wenn du die LED einschaltest, setzt du die Variable "LED_time" auf die 
gewünschte Leuchtdauer, in diesem Fall also auf 100, wenn die LED eine 
Sekunde lang leuchten soll.

In der Timer-Interrupt-Routine überprüfst du, ob die Variable "LED_time" 
größer Null ist. Wenn ja, verminderst du "LED_time" um 1 und prüfst 
anschliessend, ob "LED_time" bereits Null ist. Wenn ja, schaltest du die 
LED wieder aus. Als C-Code sieht das so aus:
(LED z.B. an PORTB.1 gegen Masse angeschlossen)
1
//LED einschalten:
2
PORTB |= 0x01; //setze Pin 1 von PORTB auf 1
3
LED_time = 100; //Leuchtdauer festlegen
4

5
//In der Interrupt-Routine des Timers müssen folgende Zeilen stehen:
6
if(LED_time) //Wenn die Variable größer Null ist 
7
  {
8
  LED_time--; //Variablen-Wert um eins vermindern
9
  if(!LED_time) //Wenn Variable Null ist
10
    {
11
    PORTB &= 0xFE; //Bit 1 von PORTB auf 0 setzen
12
    };
13
  };

Zum näheren Verständnis würde ich mir folgende Artikel ansehen:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Timer.2FCounter_des_AVR
http://www.mikrocontroller.net/articles/Bitmanipulation
Gast #1078237
Lesenswert?
• ▲
▼
Ist ja auch klar. C ist eine Programmiersprache und eine Timer ist ein 
Bestandteil eines uC. Um Mikrocontroller richtig programmieren zu könne 
muss man 2 Dinge könne:
1. eine Programmiersprache z.B C
2. Kenntnisse über den grundlegenden Aufbau und Funktionsweise von 
Mikrocontroller haben

-> Man kann C nicht an Mikrocontroller lernen, wenn man von denen keine 
Ahnung hat

Und in einem C Buch steht nix über Timer, da man den Timer nicht 
programmiert sondern nur über seine Register konfiguriert. Das steht 
wiederum in Büchern über Mikrocontroller.
Gast #1078281
Lesenswert?
• ▲
▼
Am sinnvollsten wäre es natürlich, wenn du dir Bücher ansiehst, die 
sowohl (AVR-)Mikrocontroller als auch C-Programmierung zum Thema haben. 
Bei www.amazon.de findest du ein paar Bücher, wenn du "AVR 
Programmierung" als Suchbegriff eingibst. Die Auswahl wird noch größer, 
wenn du einigermaßen Englisch kannst, manche Bücher gibt's leider nicht 
in Deutsch.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.