Hallo,
Wie kann man eine Schleife für z.B. 10 Sekunden durchlaufen und dann zur
nächsten gehen? Ich habe es schon mit einer for-Schleife und einem sehr
hohen Wert versucht, aber sie ist viel zu schnell fertig und da muss es
doch einen besseren Weg geben. :)
Vielen Dank
MfG
Was hast du denn vor?
Scheinbar hast du den Sinn einer Schleife nicht verstanden. Eine
Schleife wird solange ausgeführt, wie eine Bedingung wahr ist. Du
müsstest "im Hintergrund" also eine Art Uhr laufen lassen, um die
Schleife 10sec lang laufen lassen zu können.
Also: Welcher Controller und welche Aufgabe hat diese
Schleife/Funktion/Software?
Hi,
je nachdem worauf du programmierst (µC oder PC), solltest du einen TIMER
nehmen.
Bei nem µC einfach einen Timer per Interrupt die Variable hochzählen bis
die nötige zeit um ist(wenn zwischendurch nichts zu tun ist
sleep()-Befehle benutzen)
Auf dem PC gibts dafür unter C <time.h>, damit kannste auch warten.
Gruß
Marcus
Silvan König schrieb:> Also: Welcher Controller und welche Aufgabe hat diese> Schleife/Funktion/Software?
-PIC18F27J53
-Ich will, dass eine gewisse Zeit bei meiner LED-Matrix ein Buchstabe
leuchtet und nach dieser Zeit soll der nächste Buchstabe leuchten. Also
wenn ich in der Schleife einen delay einbaue blinkt die LED nur ganz
kurz, deshalb dachte ich man kann eine Schleife z.B. 10s lang
durchlaufen lassen.
MfG
niceguy schrieb:> Silvan König schrieb:>> Also: Welcher Controller und welche Aufgabe hat diese>> Schleife/Funktion/Software?>> -PIC18F27J53> -Ich will, dass eine gewisse Zeit bei meiner LED-Matrix ein Buchstabe> leuchtet und nach dieser Zeit soll der nächste Buchstabe leuchten. Also> wenn ich in der Schleife einen delay einbaue blinkt die LED nur ganz> kurz, deshalb dachte ich man kann eine Schleife z.B. 10s lang> durchlaufen lassen.
klassischer Fall für einen Timer.
Du willst nicht 10 Sekunden warten, sondern du willst eine Stoppuhr
bauen, die 10 Sekunden lang läuft. Du zeigst den Buchstaben an und
'startest' die Stoppuhr (in Form des Timers). Ist die Uhr abgelaufen
wird der nächste Buchstabe angezeigt und die Stoppuhr erneut gestartet.
Gewöhn dir das denken in Warteschleifen ab. Das führt zu nichts.
ich würde die funktion _delay_ms() nutzen. ist in der lib
<util/delay.h>, damit kannst du eine bestimmte zeit warten, also z.B.
_delay_ms(10000) wäre 10 sekunden
klar, timer sind einfacher, aber ich denke, wenn man den code mal eben
schreiben will und nicht viel ahnung davon hat (me :D) dann ist die
delay-funktion wohl einfacher.
Na gut. Trotzdem macht es Sinn sich ca. eine halbe Stunde in Timer
einzuarbeiten.
Wenn es schnell gehen muss und man nicht weiter machen will: Delay.
Sonst: Timer
>klar, timer sind einfacher, aber ich denke, wenn man den code mal eben>schreiben will und nicht viel ahnung davon hat (me :D) dann ist die>delay-funktion wohl einfacher.
Ein sauberes Konzept sind delay-funktionen nie. Ganz egal ob man "eben
bloß was schreiben will", oder grad zu faul ist, etwas über Timer zu
lesen.
Obi Wan schrieb:> klar, timer sind einfacher, aber ich denke, wenn man den code mal eben> schreiben will und nicht viel ahnung davon hat (me :D) dann ist die> delay-funktion wohl einfacher.
Dann solltest du ihm aber zumindest eine Wartefunktion zeigen, die auch
funktioniert. Mit den AVR-libs fängst du auf einem PIC wenig an.
Obi Wan schrieb:> klar, timer sind einfacher, aber ich denke, wenn man den code mal eben> schreiben will und nicht viel ahnung davon hat (me :D) dann ist die> delay-funktion wohl einfacher.
Einen Code mit einer LED-Matrix schreibt man aber nicht 'mal eben so'.
Die Chancen stehen gut, dass er dorrt sowieso schon einen Timer im
Einsatz hat.
Und nein: delay_ms ist nur bei den allereinfachsten Programmen eine
Lösung. Sobald es ein bischen komplizierter wird, ist es eben keine
Lösung mehr, sondern ein Problem.
Obi Wan schrieb:> ich würde die funktion _delay_ms() nutzen.
delay_ms kenne ich schon, aber ich hab keine Ahnung wie ich damit eine
Schleife beenden kann. Die LEDs leuchten ja nicht einfach, sondern
blinken extrem schnell. Wenn man ein delay in der Schleife macht blinken
die LEDs nur kurz auf und wenn man eines außerhalb macht hat man eine
Endlosschleife.
Karl Heinz Buchegger schrieb:> Die Chancen stehen gut, dass er dorrt sowieso schon einen Timer im> Einsatz hat.
Nein, leider nicht. Ich verstehe das ganze auch nicht wirklich.
Ein Beispiel aus der CCS C-Hilfe:
1
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
2
//sets the internal clock as source
3
//and prescale as 8. At 20Mhz timer1 will increment
4
//every 1.6us in this setup and overflows every
5
//104.896ms
Wie kommt man da auf 104,896ms? Und was ist das maximale, dass man mit
48Mhz erreichen kann? Irgendwie finde ich keine Seite, die das für mich
verständlich erklärt.^^
Danke
MfG
niceguy schrieb:> Wie kommt man da auf 104,896ms? Und was ist das maximale, dass man mit> 48Mhz erreichen kann? Irgendwie finde ich keine Seite, die das für mich> verständlich erklärt.^^
Datenblatt des µC lesen. Da steht es drin.
Bei Google findest du das nicht.
niceguy schrieb:> Nein, leider nicht. Ich verstehe das ganze auch nicht wirklich.
Dann wirds Zeit.
Eine LED-Matrix bauen zu wollen ohne Timer ist fahrlässige
Pfusch-Programmierung.
> Ein Beispiel aus der CCS C-Hilfe:>
1
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
2
>//sets the internal clock as source
3
>//and prescale as 8. At 20Mhz timer1 will increment
4
>//every 1.6us in this setup and overflows every
5
>//104.896ms
> Wie kommt man da auf 104,896ms? Und was ist das maximale, dass man mit> 48Mhz erreichen kann? Irgendwie finde ich keine Seite, die das für mich> verständlich erklärt.^^
Ist zwar nicht für einen PIC (sondern für einen AVR), aber die
grundsätzlichen Überlegungen sind ja dieselben
FAQ: Timer
Und dann: Datenblatt raus und das Kapitel über die Timer studieren.
niceguy schrieb:> -PIC18F27J53
Microchip liefert doch fertige Delayloops bei Compiler gleich mit. Nicht
in Mikrosekunden sondern in Takten, aber das umzurechnen sollte kein
Hexenwerk sein.
Karl Heinz Buchegger schrieb:> Eine LED-Matrix bauen zu wollen ohne Timer ist fahrlässige> Pfusch-Programmierung.
Das kommt dabei raus, wenn man sowas in der Schule als erstes Projekt
macht und die Lehrer selbst keine Ahnung von der Programmierung haben...
Hab mir mal den Teil zu Interrupts und Timern durchgelesen, allerdings
werden die ganzen Variablen davon nicht gefunden.