Schleifenproblem

Gast #2359406
Lesenswert?
• ▲
▼
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;

}
Gast #2359418
Lesenswert?
• ▲
▼
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.
Gast #2359444
Lesenswert?
• ▲
▼
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 :)

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.