Grüß euch alle Ich bin leider Anfänger und es happert ziemlich mit C :( (Tutorial schon durchgelesen aber auch verstanden???) Ich hab 2 Leds die jeweils abwechselnd leuchten,allerdings möchte ich noch eine LED durch einen Taster betätigen die nur Leuchten soll klappt net :(. Könnt ihr mir weiter helfen und eventuell Tipps zum Programmier-Style geben? #include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> int main() { DDRB &=~(1<<PB1); // internen pull-up DDRC |= (1<<PC2)|(1<<PC5); //LED DDRD|= (1<<PD3); PORTB|= (1<<PB1); // internen pullup while(1) { PORTC|= (1<<PC2); _delay_ms(100000); _delay_ms(100000); _delay_ms(100000); PORTC&= ~(1<<PC2); if(!(PINB&(1<<PINB1))){ PORTD|=(1<<PD3); } PORTC|= (1<<PC5); _delay_ms(100000); _delay_ms(100000); _delay_ms(100000); PORTC&= ~(1<<PC5); } return 0; }
Warum setzt du so hohe Delay Zeiten ein ? Da dauert es ja ewig, bis sich was tut. 100000ms = 100s, das sind etwas mehr als 1 1/2 Minuten. Und immer direkt 3 solcher Delays hintereinander ... Deine Schleife sieht im Prinzip ja so aus:
1 | while(1) |
2 | {
|
3 | LED1 an |
4 | laaaaaaaaaaaaaange warten ( ~ 4 1/2 Minuten ) |
5 | LED1 aus |
6 | |
7 | Taster einlesen ... wenn gedrückt, schalte LED3 an |
8 | |
9 | LED2 an |
10 | laaaaaaaaaaaaange warten ( ~ 4 1/2 Minuten ) |
11 | LED2 aus |
12 | }
|
Der Taster wird also nur alle 9 Minuten einmal eingelesen ( wenn die _delay_ms Funktion überhaupt so große Zahlen annimmt ). Kein Wunder, dass du keine Funktion siehst ... stell das Delay mal auf 100ms, dann kannst du schon eher was mit anfangen.
ja hast recht es funktioniert :D kann ich nur so große Zeiten über einen Timer/counter realisieren?
blöder anfänger schrieb: > kann ich nur so große Zeiten über einen Timer/counter realisieren? Ja, dafür sind die Timer durchaus da ... Bei 1 Mhz Takt und einem Timer Prescaler von 1024 wird die ISR ( overflow ) mit 4 Hz aufgerufen ( 1 Khz Timer Clock, alle 256 Schritte Overflow ). Für 300 Sekunden müsstest du also in der ISR immer bis 1200 Zählen mittels einer eigenen Variable :)
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.