PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : u.a. wie Flackerlicht ; mit CControl-Mikro ?



leotef
25.01.2005, 15:52
Heho,
benutze seit fast einem Jahr euer Forum als Silentreader und konnte mich schon von einigen Sachen bereichern ! =D> Thx

Nun habe ich selbst ein Anliegen:
Experimentiere gerade mit dem C-Control Mikro und würde gerne ein Flackerlicht zusammenschreiben, habe aber leider keine Idee wie ich das bewerkstelligen könnte...
Soweit ich weiss, müsste der Befehlsinterpreter eine RND Funktion haben...

Oder sagen wir es mal so; das ganze Proggie muss am Ende so aussehen:
(vllt hat ja gerade einer Zeit =P~ )
P1=Taster
P2=Lampe
P4=Reset
P5=Power
TasterImpuls lang = mind. 1sec
TasterImpuls kurz = max. 0,2sec

Im Grundzustand, d.h. nach Initialisierung darf nur P2 leuchten.
lang-kurz = Reset
lang-lang = Power
kurz-lang-kurz = P2 Lampe On oder Off
kurz-kurz-kurz = P2 Flackerlicht

Falsche Codereihe muss erkannt und wieder an den Anfang gesprungen werden. Genauso, darf zwischen zwei Codes max. 1sec vergehen, sonst sprung an Anfang.

So nun hoffe ich auf Vorschläge ;)
(Vorzuziehen ist C-control Basic (nicht ++))
[Hoffe, man kriegt das in 2kbyte unter..)

ACU
25.01.2005, 16:42
Das basic ist genauso, wie bei der C-Control 1Unit?
Also das Problem ist, dass du keine zufälligen Werte erzeugen kannst.
Du kannst RAND mit dem internen Timer initialisieren, aber davon wird es noch nicht zufällig.
Aber da du einen Taste hast, dürfte das kein Problem sein!
Du läßt einfach ne Variable hochzählen, sobald du auf die Taste drückst, da du nie genau gleich lange hältst, wird es zufällig.
Bekommst du so hin, oder soll ich dir was schreiben?
Wird allerdings wahrscheinlich erst am Freitag, da ich zur Zeit viel zu tun habe.

Kannst du bitte nochmal versuchen zu beschreiben, was das Programm machen soll?
Am Besten so, als ob dus gerade benutzen würdest (einschalten...)
und was mit der Lampe passiert.

MfG ACU

leotef
25.01.2005, 17:16
Hey, danke ;)
Ich werde im Laufe diesen Abends mal ein PAP bzw. ein Struktogram erstellen...

DIE HARD
25.01.2005, 18:48
Hallo....
Auf www.c-control-support.de liegen im Bereich
CCBASIC-> ANWENDUNGEN diverse Demos, u.a

APP_CODESWITCH.BAS - kurz-lang-lang...usw Decodierung
APP_NEONLAMPS.BAS - Random Flackern von Leuchtstofflampen.

Vielleicht hilft dir das.
ciao......

leotef
26.01.2005, 12:53
Das basic ist genauso, wie bei der C-Control 1Unit? Bis auf ein paar wenige, für nicht so ganz relevante Unterschiede, eigentlich identisch.

@Die Hard,
Danke, den Codeswitch kannte ich schon, ist zwar inspirierend aber ziemlich undurchsichtig programmiert und ob ich den meine Zwecke umbauen kann ? 8-[

Die NeonLampe kannte ich aber noch nicht, sieht sehr vielversprechend aus.

Hier mal ein PAP, wie ich es gerne hätte:

http://img198.exs.cx/img198/6876/pap2vl.th.jpg (http://img198.exs.cx/my.php?loc=img198&image=pap2vl.jpg)
(druffklicke)

Bin flexibel für jeden Vorschlag offen ;)
Letzendlich, möchte ich mit einer Taste je nachdem wie man draufdrückt, drei Verbraucher ein oder ausschalten.

Danke schonmal

DIE HARD
26.01.2005, 15:15
Hallo...
ich habe mal ne kurze Demo geschrieben, die das tut,
was du möchtest...glaube ich wenigstens.
Ciao..

' Sie sehen hier die Anwendung der C-Control MICRO als Code-Schalter.
' Mit einer einzigen Taste werden mehrere Funktionen geschaltet.
' Innerhalb eines Zeitfensters von 400 ms wird geprüft, ob eine Taste
' gerückt ist. Ist das der Fall, wird das Zeitfenster verlängert und auf
' weiter Tastendrücke abgefragt und diese summiert. Erfolgt kein weiterer Druck
' innerhalb des Fensters, wird die Eingabe als abgeschlossen betrachtet und das
' zugehörige Programm gestartet.
' Es wird also ein n-fach-Click ausgewertet. Natürlich muss die Taste weiterhin
' innerhalb des gestarteten Programms ausgewertet werden.
' Hier werden in den ausgewählten Programmen die LEDs am P/E-Board für die MICRO
' zum Blinken gebracht.



'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LED1 port[1]
define LED2 port[2]
define LED4 port[4]
define LED5 port[5]
define LED6 Port[6]

define BUTTON port[3]
'-------- PROGRAMM START --------
define COUNTER byte[1]
define MATCHCOUNTER byte[2]
define CODE byte[3]


LED1=off:LED2=off:LED4=off:LED5=off:LED6=off
'----------------------------------
'-- MAIN PROGRAM SELECT ---
'----------------------------------
#SELECT_PGM
gosub GETCODE
on COUNTER gosub PGM0,PGM1,PGM2,PGM3,PGM4,PGM5
goto SELECT_PGM
'-----------------------------------
#PGM0
RETURN
'-----------------------------------
#PGM1
LED1=on:pause 2:LED1=off:pause 2:RETURN
'-----------------------------------
#PGM2
LED2=on:pause 2:LED2=off:pause 2:RETURN
'-----------------------------------
#PGM3
LED4=on:pause 2:LED4=off:pause 2:RETURN
'-----------------------------------
#PGM4
LED5=on:pause 2:LED5=off:pause 2:RETURN
'-----------------------------------
#PGM5
LED6=on:pause 2:LED6=off:pause 2:RETURN
'-----------------------------------
'-- GET THE CLICK CODE --
'-----------------------------------
#GETCODE
if BUTTON=on then RETURN
COUNTER=1
#WAIT_RELEASE
if BUTTON=OFF then goto WAIT_RELEASE
SECOND=0 ' RESET 20ms TIMER
'----- WAIT TIMEOUT OR BUTTON ----
#WAIT_PRESS
if TIMER=40 then RETURN ' TIMEOUT 400ms ?
if BUTTON=ON then goto WAIT_PRESS
COUNTER=COUNTER+1:goto WAIT_RELEASE
'---------------------------------

leotef
28.01.2005, 17:32
Hallo DieHard,
danke für deinen Vorschlag. War zwar nicht ganz, das was ich suchte, habe aber einen großen Teil deiner Routine verwenden können =D>
Ausserdem habe ich auch vieles aus den ConradSamples übernehmen können.

Der Quelltext ist höchstwahrscheinlich ziemlich unausgereift, unnötig lang und unübersichtlich, aber nach Stunden der Tippselei ist es vollbracht: es funktioniert ! Sind fast ganze 1.5Kbyte 8-[

Weiss, dass das reindenken in fremdes Code nicht einfach ist, bin aber trotzdem für Optimierungsvorschläge dankbar. Vor allem muss ich mir angewöhnen, mehr mit UProgrammen zu arbeiten.



'------Ports---------------------
define Top_LED port[1]
define Power port[2]
define Joy_MicroTaster port[3]
define Front_LED port[5]
define Betrieb_ON port[6]

define Ringcounter byte[1]
define Matchcounter byte[2]
define Code byte[3]
define COUNTER byte[4]
define CountDown byte[5]
define CountDownAus byte[13]
define CountDownZaehler byte[5]
'------Für Effekt 4-------------
define BlinkerZaehler byte[6]
'-----Für NeonLampe-----------
define RAND1 byte[7]
define RAND2 byte[8]
define RAND4 byte[9]
define RAND5 byte[10]
define RAND6 byte[11]
define SCOUNTER byte[12]
'---------------------------------

#NoRun
Front_LED=off:Top_LED=off

#AnfangsLoop
If Betrieb_ON=ON Then Goto Neonlampe
if TIMER=49 then goto RESET
if Joy_MicroTaster then goto AnfangsLoop
SECOND=0
wait Joy_MicroTaster:RINGCOUNTER=RINGCOUNTER+1
looktab AnCode,RINGCOUNTER,CODE
if ((TIMER > 15) and (TIMER<CODE))then goto MATCH
if ((TIMER < 15) and (TIMER>CODE))then goto MATCH
MATCHCOUNTER=0:if ((RINGCOUNTER=3) or (Ringcounter>3)) then RINGCOUNTER=0
GOTO AnfangsLoop

#MATCH
MATCHCOUNTER=MATCHCOUNTER+1
if (RINGCOUNTER=3) and (MATCHCOUNTER=3) then goto OPEN
goto AnfangsLoop

#OPEN
RINGCOUNTER=0:MATCHCOUNTER=0:
Goto PowerOn

#RESET
RINGCOUNTER=0
MATCHCOUNTER=0
goto AnfangsLoop

#PowerON
Power=on:pause 25:Power=off
if Betrieb_ON=off then goto NoRun
Gosub NeonLampe

#MittelLoop
if Betrieb_ON=off then goto NoRun

#Run
if Betrieb_ON=off then goto NoRun
if Joy_MicroTaster then goto Run
SECOND=0
wait Joy_MicroTaster
if (TIMER >15) then goto MachausInit
if ((TIMER < 15) and (TIMER>1))then goto LampensteuerungInit
GOTO MittelLoop

#MachausInit
Second=0
#Machaus
if Timer > 25 then goto MittelLoop
gosub GETCODE
on COUNTER goto Aus_0,Aus_1,Aus_2
goto Machaus
#Aus_0
Counter=0
goto Machaus
#Aus_1
Counter=0
goto Machaus
#Aus_2
Counter=0
CountDownZaehler=10
For CountDownAus=1 to 10
Front_Led=off:Top_Led=off
pause CountDownZaehler
Front_Led=On:Top_Led=On
pause CountDownZaehler
CountDownZaehler=CountDownZaehler-1
Next CountDownAus
Power=on:pause 50:Power=off
Goto NoRun

#LampensteuerungInit
Second=0
#Lampensteuerung
if Timer > 30 then goto MittelLoop
gosub GETCODE
on COUNTER goto PGM0,PGM1,PGM2,PGM3,PGM4
goto Lampensteuerung
'-----------------------------------
#PGM0
Goto Lampensteuerung
#PGM1
Tog Top_LED:Counter=0:Goto MittelLoop
#PGM2
Tog Front_LED:Counter=0:Goto MittelLoop
#PGM3
Counter=0:Goto Lampensteuerung
#PGM4
Counter=0:
Goto FlackerLicht


'----Routine von DieHard----------
'-- GET THE CLICK CODE --
#GETCODE
if Joy_MicroTaster=on then RETURN
COUNTER=1
#WAIT_RELEASE
if Joy_MicroTaster=OFF then goto WAIT_RELEASE
SECOND=0 ' RESET 20ms TIMER
'----- WAIT TIMEOUT OR BUTTON ----
#WAIT_PRESS
if TIMER=20 then RETURN ' TIMEOUT 200ms ?
if Joy_MicroTaster=ON then goto WAIT_PRESS
COUNTER=COUNTER+1:Second=0:goto WAIT_RELEASE
'---------------------------------

'-------- PROGRAMM START --------
#NeonLampe
Top_LED=off:Front_LED=off
Scounter=0
RAND1=RAND:RAND2=RAND:RAND4=RAND:RAND5=RAND:RAND6= RAND
#NeonLoop
'--- GET THE RANDOM VALUES -----
RAND1=RAND:RAND2=RAND:RAND4=RAND:RAND5=RAND:RAND6= RAND
'--- MAKE RANDOM FLICKERING -----
#PERIOD
SCOUNTER=SCOUNTER+1:if SECOND>2 then goto ON1:if SCOUNTER>RAND1 then Front_LED=off
#L2 if SECOND>2 then goto ON2:if SCOUNTER>RAND2 then Top_LED=off
#L4 if SECOND>3 then goto ON4
#L5 if SECOND>4 then goto ON5
#L6 if SECOND>5 then goto ON6
if SCOUNTER<RAND1 then deact Front_LED:if SCOUNTER<RAND2 then deact Top_LED
IF SCOUNTER<>255 then goto PERIOD
goto NeonLoop
'---- SWITCH TO FULL BRIGHTNES ---
#ON1 Front_LED=on:goto L2
#ON2 Top_LED=on:goto L4
#ON4 goto L5
#ON5 goto L6
#ON6
'#ALLON goto ALLON
Goto Mittelloop

#Flackerlicht
Top_LED=off:Front_LED=off
pause 100
#Flackerlicht_1
Top_LED=on
if not Joy_MicroTaster=on then goto Flackerlicht_2
if Betrieb_ON=off then goto NoRun
pause 150
Top_LED=off
Front_Led=on
if not Joy_MicroTaster=on then goto Flackerlicht_2
if Betrieb_ON=off then goto NoRun
pause 150
Front_Led=off
goto Flackerlicht_1
#Flackerlicht_2
wait Joy_MicroTaster
if Betrieb_ON=off then goto NoRun
goto Programm2

#Programm2
Pause 100
Top_LED=off:Front_LED=off
#Programm2_1
Top_LED=on:Front_LED=on:pause 3
if Betrieb_ON=off then goto NoRun
Top_LED=off:Front_LED=off:pause 100
if not Joy_MicroTaster=on then goto Programm2_2
goto Programm2_1
#Programm2_2
wait Joy_MicroTaster
if Betrieb_ON=off then goto NoRun
goto Programm3

#Programm3
if Betrieb_ON=off then goto NoRun
Top_LED=on:Front_LED=on:pause (RAND and &H04)*3+6
if Betrieb_ON=off then goto NoRun
Top_LED=off:Front_LED=off:pause (RAND and &H08)*5+7
if not Joy_MicroTaster=on then goto Programm3_1
if Betrieb_ON=off then goto NoRun
goto Programm3
#Programm3_1
wait Joy_MicroTaster
if Betrieb_ON=off then goto NoRun
goto Programm4

#Programm4
Top_LED=off:Front_LED=off
if Betrieb_ON=off then goto NoRun
pause 100
BlinkerZaehler=50
#Programm4_1
For CountDown=1 to 24
Front_Led=on:Top_Led=on
if Betrieb_ON=off then goto NoRun
if not Joy_MicroTaster=on then goto Programm4_2
pause BlinkerZaehler
Front_Led=Off:Top_Led=Off
if Betrieb_ON=off then goto NoRun
if not Joy_MicroTaster=on then goto Programm4_2
pause BlinkerZaehler
If BlinkerZaehler>11 then BlinkerZaehler=BlinkerZaehler-3 else BlinkerZaehler=BlinkerZaehler-1
Next CountDown
BlinkerZaehler=50
goto Programm4
#Programm4_2
wait Joy_MicroTaster
if Betrieb_ON=off then goto NoRun
goto Mittelloop

Table AnCode 0 50 1 1
TabEnd

mesli-andres
09.03.2005, 12:52
Empfielst du den C_controll micro für einen Anfänger??
danke für eine Antwort

leotef
09.03.2005, 13:08
Bis auf den relativen hohen Preis, ist der C-Control Mikro imho durchaus als Einstiegs-uC geeignet, da das C-Basic wirklich rudimentär ist und selbst Leuten, die mit Programmiersprachen nichts am Hut hatten, einen einfachen Einstieg ermöglicht.