Ich möchte mit Portb2 alle 20 sek. eine Led mit 200ms blitzen lassen und parallel auf Portb3 alle 24 Std. für 30 sek. das Portb3 aktivieren. Was muß ich in meinem Programm dafür ändern? mfg LS
Mit Bascom kenne ich mich leider nicht aus. Aber wenn ich deinen Code sehe, dann sollte er entweder genau das machen, was du möchtest (was ich aber stark bezweifle), oder aber du solltest dich eingehend mit µC und insbesondere mit der Programmierung beschäftigen. Du brauchst einen Timer.
Mein problem ist nur da ich parallel 2 Schleifen habe, weis ich nicht ob nur eine Schleife abgearbeitet wird od. beide parallel? mfg
Leopold S. schrieb: > Mein problem ist nur da ich parallel 2 Schleifen habe, weis ich nicht ob > nur eine Schleife abgearbeitet wird od. beide parallel? > mfg Wenn Bascom kein Multitasking umsetzt, wirst du in einer Schleife hängen bleiben (was ich stark vermute). Du brauchst einen Timer!
Nimm nen Timerinterrupt mit dem kleinsten nötigen Intervall (200ms). Zähl darin 2 Variablen für die 2 Prozesse und werte sie entsprechend aus. Peter
Gast
#2217399
>Was muß ich in meinem Programm dafür ändern?
Fast alles. Insbesondere brauchst Du einen Timer.
Gast
#2217410
Ja, der Code funktioniert so nicht. Die erste "Do Loop" Schleife wird vom Programm nie verlassen, die zweite also nie ausgeführt. Wie meine Vorschreiber schon angemerkt haben, funktioniert das am besten über einen Timer. In Bascom kannst Du auch relativ leicht eine Softclock implementieren, über die man dann relativ ungenau (ohne Quarz) alle 24h oder alle 20s etwas tun lassen kann.
Sollte es so nicht auch funktionieren? Habe neuen Bascomcode angehängt. lg LS
Ich versuche solche Aufgaben immer in ein Schema zu pressen, daß die Lösung möglichst universell ist. Hier ein Beispiel, welches für beide Loops jeweils einen Zähler verwendet. Damit ist es beliebig erweiterbar und beide laufen unabhängig voneinander. Man kann also die Zeiten getrennt ändern, ohne den anderen zu beeinfluusen. Ich kann aber nur C:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
Peter
Gast
#2217802
So könnte es z.B mit BASCOM aussehen. 1s schafft der 8-Bit Timer des Tiny nicht, da sind nur ms drin. Zum Thema Timer und Bascom siehe hier: http://www.rn-wissen.de/index.php/Bascom_und_Timer Zur Berechnung des Timers siehe hier: http://www.dieelektronikerseite.de/Tools/Timer-Rechner.htm
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
Gast
#2217813
Sehe gerade, dass in der zweiten Case-Anweisung die Sekunden nicht richtig berechnet sind. Kann man ja leicht anpassen.
Hallo! Mit meinem letzten Code würde das nicht gehen? Kannst du mir den Select case bzw. erklären od. kommentieren? Wo liegt der Fehler bei den Sekunden? mfg LS
Hallo Ich rechne 24x60x60/2 =43200 plus 30 sek =43215 daher find ich keinen Fehler bei den Sekunden mfg LS
Leopold S. schrieb: > Ich rechne 24x60x60/2 =43200 plus 30 sek =43215 > daher find ich keinen Fehler bei den Sekunden Kann Bascom konstante Ausdrücke nicht gefälligst selber ausrechnen? Unter C habe ich es mir abgewöhnt, den Taschenrechner zu bemühen. Ich schreib immer nur die Rechnung hin und lasse es den Compiler ausrechnen. Es geschieht ja schon zur Compilezeit, d.h. für den MC wird kein zusätzlicher Code erzeugt. Und die Compilezeit verlängert sich auch nicht spürbar. Peter
Gast
#2218296
So sollte es stimmen. Die Sekunden wurden nur alle 20s (und nicht alle 2s) hochgezählt. Bezgl. SELECT CASE siehe hier: http://avrhelp.mcselec.com/index.html?select_case_end_select.htm Ob Dein Code funktioniert, habe ich nicht ausprobiert. Wollte nur zeigen, wie es mit einem TIMER aussehen könnte. Die Werte könnte natürlich auch BASCOM berechnen. Ansonsten kann man in BASCOM auch immer die Simulation bemühen: http://avrhelp.mcselec.com/index.html?program_simulate.htm Man sollte dabei die Zahl der Sekunden beschränken, sonst sitzt man tagelang vorm Rechner. ;-)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.