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
Vorallem kann man wenn man eh nur auf den Timer wartet den Controller in einen seiner sleep Modes schicken. Strom sparen lohnt sich meistens :)
>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.
1 | TMR0ON = 1; |
Das müsste doch gehen, oder?
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.