www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED leuchten lassen


Autor: Tiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo folgendes Problem.

Ich möchte mit meinem Atmega8 mehrere LEDs leuchten lassen.

1) Wie mache ich das?

2) Brauche ich einfach den Code nacheinander zum "Starten" der Leds 
eingeben, und sie alle leuchten dann gleichzeitig?

Ich gebe mal ein Anfangs Code von mir:

#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>

void main (void)

{  DDRB |= (1<<PB0);  //Ausgänge festlegen PB und PD für Fußg.//
              //Rest für normale Ampeln//
  DDRD |= (1<<PD7);
  DDRD |= (1<<PD6);
  DDRD |= (1<<PD5);
  DDRC |= (1<<PC5);
  DDRC |= (1<<PC4);
  DDRC |= (1<<PC3);
  DDRC |= (1<<PC2);
  DDRC |= (1<<PC1);
  DDRC |= (1<<PC0);



do {

PORTD ^= (1<<PD7);      //gelbe Fußgangerampeln blinken
  _delay_ms(5000);

PORTC ^= (1<<PC4);   //gelbe Autoampeln 1 blinken
  _delay_ms(5000);

PORTC ^= (1<<PC1);   //gelbe Autoampeln 2 blinken
  _delay_ms(5000);


//Autoampeln 1 und 2 leuchten gelb

PORTC ^= (1<<PC4);
  _delay_ms(500);

PORTC ^= (1<<PC1);
  _delay_ms(500);

//GElb aus

PORTD |= (1<<PD7); //alle Ampeln sind aus
PORTC |= (1<<PC4);
PORTC |= (1<<PC1);

PORTB ^= (1<<PB0);
  _delay_ms(500); //Fußgänger 1 Rot Ein


PORTD ^= (1<<PD6);   //Fußgänger 2 Rot Ein
  _delay_ms(500);

PORTC ^= (1<<PC5);   //Auto 1 Rot Ein
  _delay_ms(500);

PORTC ^= (1<<PC2);   //Auto 2 Rot Ein
  _delay_ms(500);

PORTC ^= (1<<PC4);   //Auto A1 und A3 kommt gelb dazu
  _delay_ms(500);

PORTD |= (1<<PD6);   // Fußgänger 2,4,6,8 rot aus

PORTD ^= (1<<PD5);   //Fußgänger 2 GRÜN Ein
  _delay_ms(500);

-------------------------
Wie man vllt. erkennt handelt es sich um eine Ampelschaltung.
Nach einer bestimmten Zeit sollen sich die jeweiligen LEDs aufhören zu 
leuchten, und andere sollen leuchten. (wie bei einer Kreuzung)

Also laut meinem Quellcode, ist das ja wie eine LED blinken lasse, aber 
mithilfe der Zeit kann ich doch die Pausendauer einstellen, somit hat es 
doch den Anschein, dass die Ampeln dann leuchten, oder?

Bitte helft mir...bin noch ziemlicher Anfänger in C.

: Verschoben durch Moderator
Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tiger schrieb:
> Hallo folgendes Problem.
>
> Ich möchte mit meinem Atmega8 mehrere LEDs leuchten lassen.
>
> 1) Wie mache ich das?

Zunächst mal dadurch, dass du im richtigen Forum fragst.
Das hier ist das PC-Programmierungs Forum.

veschoben

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bevor du dir hier böse Kommentare einfängst:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Hier steht alles was du wissen musst.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tiger schrieb:
> Hallo folgendes Problem.
>
> Ich möchte mit meinem Atmega8 mehrere LEDs leuchten lassen.
>
> 1) Wie mache ich das?

Indem du dir zb eine Tabelle machst, in der du festhältst welche LED zu 
welchem Zeitpunkt gleichzeitig leuchten sollen.

Einfach nach dem Umschalten einer LED grundsätzlich immer ein _delay_ms 
hinten nach zu schieben ... das kanns ja wohl nicht sein.

Ein Programm muss geplant werden!

> 2) Brauche ich einfach den Code nacheinander zum "Starten" der Leds
> eingeben, und sie alle leuchten dann gleichzeitig?

Ja


> Wie man vllt. erkennt handelt es sich um eine Ampelschaltung.
> Nach einer bestimmten Zeit sollen sich die jeweiligen LEDs aufhören zu
> leuchten, und andere sollen leuchten. (wie bei einer Kreuzung)

Dann stell erst mal fest welche LED gleichzeitig leuchten sollen und wie 
sich das im Laufe der Zeit verändert
Zeitpunkt  Rot1 Gelb1 Grün1   Rot2 Gelb2 Grün2   F1R F1G  F2R F2G
-------------------------------------------------------------------
   0         *                              *         *    *            
 500         *                              *      *       *
 700         *                   *                 *       *
1000         *    *              *                 *       *
1200                     *       *                 *           *
......

Das ist dein Plan, den du per Programm realisieren musst.
Im Plan sieht man:
Am Anfang ist die Ampel 1 auf Rot und Ampel 2 auf Grün. Da Ampel 1 auf 
Rot ist, ist die zugehörige Fussgänger Ampel auf grün
Nach 500 Zeiteinheiten geht zunächst die Fussgängerampel aus (auf Rot)
Nach weiteren 200 Zeiteinheiten wechselt die Ampel 2 von Grün auf Rot
300 Einheiten später kommt dann bei Ampel 1 zum Rot noch das gelbe Licht 
dazu. etc. etc.

Wenn dir dann der Ablauf der kompletten Lichtfolge klar ist, dann 
programmierst du das, wobei du natürlich gleichzeitig brennende Lichter 
auch 'gleichzeitig' einschaltest (wenn du das in deinem Programm direkt 
hintereinander machst, ist das schon ok. Die Lichter gehen dann ein paar 
Millionstel Sekunden nacheinander an/aus, das merkt keiner).

Hast du alle Lichter einer Zeile entsprechend ein/aus geschaltet, dann 
machst du mittels _delay eine entsprechende Pause und weiter gehts zur 
nächsten Zeile.

Aber Grundlage von allen ist erst mal die Planung in welcher Reihenfolge 
was passieren muss. Wobei die Zeiten jetzt nicht so sehr das Thema sind. 
_delays kann man auch im Nachhinein noch ändern. Wichtig ist erst mal 
die korrekte Abfolge.

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.