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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren