PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Zeit Bedingung



Neutro
07.04.2012, 20:01
Hallo Bascom Programmierer,

ich benötige mal eure Hilfe bei einem Projekt.
Ich habe vor bei meier Treppe die Stufen mit LED´s zu beleuchten, dazu sollen die LED´s per PWM gedimmt werden und wie ein Lauflicht von oben nach unten durchlaufen. Die Geschwindigkeit wird so eingestellt das es wie ein Dauerleuchten aussieht. Um Port pins zu sparen mache ich das mit einen 4067 Multiplexer (Im Prog fehlen noch die 8-4-2-1 Code Angaben da die Hardware noch nicht fertig ist). Ein LDR Sensor erfasst die Lichtstärke im Flur und stellt dann die PWN in zwei Stufen ein (Abend und Nachtwert)
Jetzt zu meinem Problem:
1. Ich möchte das die Beleuchtung von 10-15 Uhr immer ausgeschaltet ist. Dazu habe ich schon eine Uhr mit einprogrammiert, aber irgendwie habe ich da ein Brett vor dem Kopf...
2. Könnt ihr mir noch sagen ob ich den Programmteil mit der Lauflichtgeschwindigkeit richtig gemacht habe? konnte ich bisher leider nicht testen.

PWM, Uhr und LDR funktioniern soweit tadellos.

Vielen Dank schon mal

Kampi
07.04.2012, 20:44
Hi,

was hast du den für ein Problem mit der Uhr und welcher Teil vom Programm ist für die Lauflichtgeschwindigkeit zuständig?

Neutro
07.04.2012, 20:52
Hallo Kampi,

die Uhr an sich läuft reibungslos ich möchte halt nur das in der Zeit von 10 bis 15 Uhr die LED´s aus sind bzw, keine PWM ausgegeben wird.
( siehe Programmteil PWM wir an pin 17 ausgegeben)
Der teil mit dem Lauflicht ist im Prog beschrieben mit Geschwindigkeit bzw. Variable geschwindigkeitll wird gesteuert vom Timer0
Das prog. Habe ich eigentlich soweit ganz übersichtlich unterteilt.

Gruß
Neutro

Kampi
07.04.2012, 21:08
Hi,

also die Berechnungen für den Timer0 sehen (soweit ich es sehen kann) gut aus.
Nur soweit ich das gesehen habe, hast du beim Timer1 für die Uhr einen kleinen Fehler gemacht. Der Timer1 ist ein 16-Bit Timer und zählt bis 65535. Das heißt du musst den Timer mit 3035 vorladen um auf genau 1 Sekunde zu kommen.

peterfido
08.04.2012, 09:36
Stufe 15 wird nie angesteuert.



If Timecount = Geschwindigkeitll Then
Incr Lednr
Timecount = 0
End If

If Lednr = 15 Then
Lednr = 0
End If

Select Case Lednr
Case 1 : Gosub Stufe1
Case 2 : Gosub Stufe2
Case 3 : Gosub Stufe3
Case 4 : Gosub Stufe4
Case 5 : Gosub Stufe5
Case 6 : Gosub Stufe6
Case 7 : Gosub Stufe7
Case 8 : Gosub Stufe8
Case 9 : Gosub Stufe9
Case 10 : Gosub Stufe10
Case 11 : Gosub Stufe11
Case 12 : Gosub Stufe12
Case 13 : Gosub Stufe13
Case 14 : Gosub Stufe14
Case 15 : Gosub Stufe15

End Select


Wenn immer nur eine Stufe leuchten soll, würde es auch per Schieberegister gehen, wo immer nur Bit geschoben wird.

Z. B.


$regfile = "m8def.dat"
$crystal = 4000000

Dim Geschwindigkeitll As Byte
Geschwindigkeitll = 40 '40x25ms =1 Sek.
Dim Timecount As Word
Timecount = 1
Dim Lednr As Word

Config Dcf77 = Pind.5 , Timer = 1 , Gosub = Sectic 'DCF-Uhr Routine, lässt sich auch mit einem 4MHZ Quarz ohne DCF-Empfänger nutzen

Pin Alias Portd.6 'Angenommen der DataPIN
Pclock Alias Portd.7 'Angenommen, der ClockPIN
Lednr = 1

Do
Gosub Lauflicht


Loop
End


Lauflicht:

If Timecount = Geschwindigkeitll Then
If Lednr = 32768 Then 'nur 15 Stufen, daher auf die Erste springen
Lednr = 1
Else
Shift Lednr , Left
End If
Timecount = 0
End If
If _hour > 9 And _hour < 16 Then
Lednr = 32768
End If

Shiftout Pin , Pclock , Lednr , 0 'hier die Schieberegister mit den LEDs ansteuern

Return

Sectic:
'Uhranzeigen
Return

Neutro
08.04.2012, 10:35
Hallo Peterfido,
Das mit der Stufe 15 ist schon so gewollt, die hatte ich erst mit vorgesehen bekommt aber keine LED´s.
Das mit dem Schieberegister ist sicherlich auch eine gute möglichkeit das Lauflicht umzusetzen, kommt aber im Endeffekt aber ja auf´s gleiche raus.
Was viel wichtiger ist: du hast das stück code mit der Uhrzeit mit reingebracht!! Danke!!! Ich werde das mal ausprobieren, werde damit dann den PWM Timer deaktivieren.

Ich melde mich dann wieder wenn ichs prbiert habe.

Danke bis hierhein schon mal an alle

Neutro
08.04.2012, 19:09
So, jetzt melde ich mich dann auch noch mal wieder zu Wort.
Das Programm läuft nun meinen Wünschen entsprechend nachden ich die
Programmzeile

If _hour > 9 And _hour < 16 Then
stop timer0
else
start Timer0
end if

eingefügt hatte. (Hätte man eigentlich auch selber drauf kommen können,
aber ich bin froh das man hier im Forum kompetente Hilfe bekommt.

@ Kampi: ich hatte den Timerwert mit dem RNavr Tool ausgerechnet und die Werte so übernommen.

Vielen Dank

Neutro

peterfido
09.04.2012, 07:07
Hallo,

die Timerberechnung mit dem RNavrTool liegt bei mir auch immer um eins daneben. Das könnte mal überarbeitet werden. Evtl. noch eine Option auf CTC wäre ebenso wünschenswert.

Thomas E.
09.04.2012, 20:41
Warum sind die Zeitvariablen (Stunde, Minute, Sekunde) eigentlich als Word definiert?

Neutro
10.04.2012, 17:46
@Peterfido: Danke für die Info bezg. des RNAVR Tool, ich werde den Wert noch korrigieren.

@Thomas E: Ich hatte das Uhrenprogramm mal vor Jahren im Netz gefunden und das dann einfach immer so übernommen. Eigentlich sollten dafür ja Byte Variablen
völlig ausreichen. Müsste ich mal testen ob das irgendwas ausmacht.

VG
Neutro

Thomas E.
10.04.2012, 20:23
@Thomas E: Ich hatte das Uhrenprogramm mal vor Jahren im Netz gefunden und das dann einfach immer so übernommen. Eigentlich sollten dafür ja Byte Variablen
völlig ausreichen. Müsste ich mal testen ob das irgendwas ausmacht.
Wenn du die Variablen als Byte deklarierst wird die Software weiterhin so funktionieren, nur es ist eben ein klein wenig sparsamer und eleganter. :)