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 User
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
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.
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
1 | Zeitpunkt Rot1 Gelb1 Grün1 Rot2 Gelb2 Grün2 F1R F1G F2R F2G |
2 | ------------------------------------------------------------------- |
3 | 0 * * * * |
4 | 500 * * * * |
5 | 700 * * * * |
6 | 1000 * * * * * |
7 | 1200 * * * * |
8 | ...... |
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.
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.