dus hier wat gegevens:
- Een interne regelbare pulsgenerator (AUTO) - puls aangegeven met een groene (3mm) LED.
- Een schakeling die muziek omzet in pulsen (AUDIO) - puls aangegeven met een gele (3mm) LED.
SCHEMA
- 7 druktoetsen (met rode 3mm LED) waarmee 1 van de volgende programma's kan worden gekozen:
1. Synch: 1111 (alle kanalen aan)
2. Flip Flop 1: 1010 <-> 0101 (wisselen tussen kanalen 1,3 en 2,4)
3. Flip Flop 2: 1100 <-> 0011 (wisselen tussen kanalen 1,2 en 3,4)
4. Flip Flop 3: 1001 <-> 0110 (wisselen tussen kanalen 1,4 en 2,3)
5. Chaser 1: 1000 --> 0001 (looplicht van kanaal 1 naar 4)
6. Chaser 2: 1000 <-- 0001 (looplicht van kanaal 4 naar 1)
7. Bounce: 1000 <-> 0001 (looplicht van kanaal 1 naar 4 en terug)
kanalen aangegeven met 4 rode (3mm) LED's (Controller LED's)
- Een schakelaar voor 3 ipv. 4 kanalen (bij programma's 1,2,3,4 wordt het 4e kanaal niet gebruikt, programma's 5,6,7 lopen maar t/m kanaal 3 ipv. 4)
- Een schakelaar om te kiezen tussen AUTO of AUDIO voor de snelheid waarmee de programma's
worden doorlopen - puls aangegeven met een geel/groene (3mm) duo LED
- Een stappenschakelaar waarmee de snelheid eerst kan worden gedeeld (1 .. 10) - puls
aangegeven met groene (3mm) LED
(hierdoor zullen de stroboscopen een x aantal keer (1 .. 10) flitsen per stap)
- Een keuzeschakelaar om te kiezen tussen AUTO of AUDIO voor de snelheid waarmee de kanalen aan
en uit worden geschakeld. - puls aangegeven met een geel/groene (3mm) duo LED, kanalen aangegeven met
4 rode (5mm) LED's (Stroboscope LED's)
- aan/uit schakelaar en druktoets om kanalen door te schakelen naar uitgangen (OFF/ON) - aangegeven met rode (3mm) LED
- druktoets per uitgang voor enkele flits (FLASH)
- druktoets voor enkele flits alle uitgangen tegelijk (FLASH ALL)
- aan/uit schakelaar per uitgang (kanalen worden niet doorgegeven, FLASH toetsen wel)
- uitgangen aangegeven met 4 (5mm) witte LED's
De pulsgenerator is aangesloten via een 6.3mm Mono Jack met schakelcontact zodat ook een externe pulsgenerator
kan worden gebruikt ipv. de interne.
Audio aansluiting met 6.3 mm Stereo Jack waarvan de middelste aansluiting via een weerstand verbonden is met de voedingsspanning,
zodat je ook een electret microfoon kunt aansluiten
Druktoetsen schakeling met 7x S-R FlipFlop en DEC-BIN decoder.
De deler is opgebouwd rond een 4017 waarbij een transistor, gestuurd door de puls, uitgang1 (Q0) doorgeschakeld. En een stappenschakelaar waarmee de reset met uitgang 2/3/4/5/6/7/8/9/10 (Q1...Q9) of GND wordt verbonden.
SCHEMA Puls Deler
De uitgangen (en bijbehorende witte LED's) worden aangestuurd met een NE555 die een puls levert van 20mS.
SCHEMA Strobe Output
SCHEMA Strobe Switches
In eerste instantie wilde ik de programma's maken met een stel multiplexers maar eigenlijk is dit natuurlijk prima
te doen met een microprocessor. Ik had eerder al een programmer gemaakt en getest maar ben er verder niet mee door
gegaan omdat ik geen tijd had en het programmeren (in assembly) me nog niet echt duidelijk was. Maar ben nu toch nog
eens gaan zoeken en toen ontdekte ik picbasic.nl en dat programmeren in basic maakt het een heel stuk eenvoudiger.
Dus na de eerste 3 mini-cursussen te hebben doorgelezen ben ik gaan programmeren en zie hier mijn eerste programma
Code: Selecteer alles
;
; ******************************************************************
; * 3/4 CHANNEL STROBOSCOPE CONTROLLER *
; ******************************************************************
; * *
; * 2 Clock inputs: *
; * - Clk1 (PORTA.1) Controller Speed *
; * - Clk2 (PORTA.0) Stroboscope Flash Speed *
; * *
; * 3 or 4 Channel Switch: *
; * - STR34 (PORTA.5) *
; * *
; * 7 Programs: *
; * - Program 1 = Synch : 1111 *
; * - Program 2 = Flip Flop1 : 1010 <-> 0101 *
; * - Program 3 = Flip Flop2 : 1100 <-> 0011 *
; * - Program 4 = Flip Flop3 : 1001 <-> 0110 *
; * - Program 5 = Chaser1 : 1000 -> 0001 *
; * - Program 6 = Chaser2 : 1000 <- 0001 *
; * - Program 7 = Bounce ; 1000 <-> 0001 *
; * *
; * 4 Controller Output LED's: *
; * - LEDC1 (PORTB.3) *
; * - LEDC2 (PORTB.2) *
; * - LEDC3 (PORTB.1) *
; * - LEDC4 (PORTB.0) *
; * *
; * 4 Stroboscope Output LED's: *
; * - LEDS1 (PORTB.7) *
; * - LEDS2 (PORTB.6) *
; * - LEDS3 (PORTB.5) *
; * - LEDS4 (PORTB.4) *
; * *
; ******************************************************************
;
Device 16F628A ;PIC type 16F628A
Config WDT_OFF, PWRTE_ON
ALL_DIGITAL = TRUE ;Alle ingangen digitaal
PORTB_PULLUPS = ON ;Enable PORTB pullup resistors
;INGANGEN
Symbol keuzeA = PORTA.2 ;Op poort A.2 zit Programma keuzeschakelaar A
Symbol keuzeB = PORTA.3 ;Op poort A.3 zit Programma keuzeschakelaar B
Symbol keuzeC = PORTA.4 ;Op poort A.4 zit Programma keuzeschakelaar C
Symbol Str34 = PORTA.5 ;Op poort A.5 zit keuzeschakelaar voor 3 of 4 kanalen
Symbol Clk1 = PORTA.1 ;Op poort A.1 zit Controller snelheid ingang Clk1
Symbol Clk2 = PORTA.0 ;Op poort A.0 zit Stroboscope snelheid ingang Clk2
;UITGANGEN
; Op poort B.3 zit Controller LED1
; Op poort B.2 zit Controller LED2
; Op poort B.1 zit Controller LED3
; Op poort B.0 zit Controller LED4
; Op poort B.5 zit Stroboscope LED1
; Op poort B.4 zit Stroboscope LED2
; Op poort B.7 zit Stroboscope LED3
; Op poort B.6 zit Stroboscope LED4
;VARIABELEN
Symbol Str3 = 0 ;STR34 = 0 bij 3 kanalen
Symbol Str4 = 1 ;STR34 = 1 bij 4 kanalen
Symbol Laag = 0 ;Clockpuls 0 = laag
Symbol Hoog = 1 ;Clockpuls 1 = hoog
Dim ProgK As Byte ;Maak variabele 'ProgK' voor Programma Keuze
Dim ProgH As Byte ;Maak Variabele 'ProgH' voor Huidige Programma
Dim Out As Byte ;Maak Variabele 'Out' voor uitgang van programma stap
;INIT.
Clear ;Wis RAM geheugen
; 76543210
PORTA = %00000000 ;Alle PORTA poorten laag
PORTB = %00000000 ;Alle PORTB poorten laag
TRISA = %11111111 ;Alle PORTA poorten als ingang
TRISB = %00000000 ;Alle PORTB poorten als uitgang
;HOOFDPROGRAMMA
;--------------
GOSUB ClearLeds ;Alle LED's uitzetten
Stap:
While Clk1 = Hoog ;Zolang Clk1 hoog is:
GOSUB Stap2 ;ga naar 'Stap2'
Wend ;Ga verder als Clk1 laag is
While Clk1 = Laag ;Zolang Clk1 laag is:
GOSUB Stap2 ;ga naar 'Stap2'
Wend ;Ga verder als Clk1 hoog is
GOSUB ProgrammaL ;Lees programma keuze
IF ProgK = ProgH THEN ;Als keuze hetzelfde is als huidige programma:
Return ;ga verder met volgende stap programma
ELSE ;Als keuze niet hetzelfde is als huidige programma:
GOSUB ProgrammaK ;begin met nieuw programma
ENDIF
Stap2: ;Schakel Stroboscope LED's afhankelijk van Clk2
IF Clk2 = Laag THEN PORTB = Out ;Als Clk2 laag is alleen Controller LED's aan (= eerste 4 bits)
IF Clk2 = Hoog THEN PORTB = Out * 17 ;*17 maakt laatste 4 bits (= S.LED's) gelijk aan eerste 4 bits
Return ;Terug naar programma
;CONTROLLER PROGRAMMA KEUZE
;--------------------------
ProgrammaL: ;lees programma keuze ABC
IF keuzeA = 0 AND keuzeB = 0 AND keuzeC = 0 THEN ProgK = 0 ;000
IF keuzeA = 1 AND keuzeB = 1 AND keuzeC = 1 THEN ProgK = 1 ;111
IF keuzeA = 1 AND keuzeB = 0 AND keuzeC = 0 THEN ProgK = 2 ;100
IF keuzeA = 0 AND keuzeB = 1 AND keuzeC = 0 THEN ProgK = 3 ;010
IF keuzeA = 0 AND keuzeB = 0 AND keuzeC = 1 THEN ProgK = 4 ;001
IF keuzeA = 1 AND keuzeB = 1 AND keuzeC = 0 THEN ProgK = 5 ;110
IF keuzeA = 0 AND keuzeB = 1 AND keuzeC = 1 THEN ProgK = 6 ;011
IF keuzeA = 1 AND keuzeB = 0 AND keuzeC = 1 THEN ProgK = 7 ;101
Return
ProgrammaK: ;kies programma
SELECT ProgK
CASE 0 : GOSUB ClearLeds ;Programma 0 = ClearLeds
CASE 1 : GOSUB Synch ;Programma 1 = Synch
CASE 2 : GOSUB FF1 ;Programma 2 = Flip Flop1
CASE 3 : GOSUB FF2 ;Programma 3 = Flip Flop2
CASE 4 : GOSUB FF3 ;Programma 4 = Flip Flop3
CASE 5 : GOSUB Ch1 ;Programma 5 = Chaser1
CASE 6 : GOSUB Ch2 ;Programma 6 = Chaser2
CASE 7 : GOSUB Bounce ;Programma 7 = Bounce
ENDSELECT
;CONTROLLER PROGRAMMAS
;---------------------
ClearLeds: ;ClearLeds: 0000
ProgH = 0 ;Huidige programma = 0
Out = %0000 ;----
GOSUB Stap ;Ga naar 'Stap'
GOTO ClearLeds ;Ga terug naar begin
Synch: ;Synch: 1111
ProgH = 1 ;Huidige programma = 1
IF Str34 = Str3 THEN Out = %1110 ;ooo (3 Channel)
IF Str34 = Str4 THEN Out = %1111 ;oooo (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO Synch
FF1: ;Flip Flop 1: 1010<->0101
ProgH = 2 ;Huidige programma = 2
Out = %1010 ;o-o-
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN Out = %0100 ;-o- (3 Channel)
IF Str34 = Str4 THEN Out = %0101 ;-o-o (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO FF1 ;Ga terug naar begin
FF2: ;Flip Flop 2: 1100<->0011
ProgH = 3 ;Huidige programma = 3
Out = %1100 ;oo--
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN Out = %0010 ;--o (3 Channel)
IF Str34 = Str4 THEN Out = %0011 ;--oo (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO FF2 ;Ga terug naar begin
FF3: ;Flip Flop 3: 1001<->0110
ProgH = 4 ;Huidige programma = 4
IF Str34 = Str3 THEN Out = %1000 ;o-- (3 Channel)
IF Str34 = Str4 THEN Out = %1001 ;o--o (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
Out = %0110 ;-oo-
GOSUB Stap ;Ga naar 'Stap'
GOTO FF3 ;Ga terug naar begin
Ch1: ;Chaser 1: 1000->0001
ProgH = 5 ;Huidige programma = 5
Out = %1000 ;o---
GOSUB Stap ;Ga naar 'Stap'
Out = %0100 ;-o--
GOSUB Stap ;Ga naar 'Stap'
Out = %0010 ;--o-
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN GOTO Ch1 ;Ga terug naar begin (3 Channel)
IF Str34 = Str4 THEN Out = %0001 ;---o (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO Ch1 ;Ga terug naar begin
Ch2: ;Chaser 2: 1000<-0001
ProgH = 6 ;Huidige programma = 6
IF Str34 = Str3 THEN Out = %0010 ;--o (3 Channel)
IF Str34 = Str4 THEN Out = %0001 ;---o (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN Out = %0100 ;-o- (3 Channel)
IF Str34 = Str4 THEN Out = %0010 ;--o- (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN Out = %1000 ;o-- (3 Channel)
IF Str34 = Str4 THEN Out = %0100 ;-o-- (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN GOTO Ch2 ;Ga terug naar begin (3 Channel)
IF Str34 = Str4 THEN Out = %1000 ;o--- (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO Ch2 ;Ga terug naar begin
Bounce: ;Bounce: 1000<->0001
ProgH = 7 ;Huidige programma = 7
Out = %1000 ;o---
GOSUB Stap ;Ga naar 'Stap'
Out = %0100 ;-o--
GOSUB Stap ;Ga naar 'Stap'
Out = %0010 ;--o-
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN Out = %0100 ;-o- (3 Channel)
IF Str34 = Str4 THEN Out = %0001 ;---o (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
IF Str34 = Str3 THEN GOTO Bounce ;Ga terug naar begin (3 Channel)
IF Str34 = Str4 THEN Out = %0010 ;--o- (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
Out = %0100 ;-o-- (4 Channel)
GOSUB Stap ;Ga naar 'Stap'
GOTO Bounce ;Ga terug naar begin
End ;Einde programma
Ik heb nu nog 2 poorten vrij (PORTA.6, PORTA.7) die ik eigenlijk voor een kristal
had willen gebruiken maar volgens mij is dat voor deze toepassing echt niet nodig.
Dus daar zou ik nog wat mee kunnen doen.
Ik was zelf al aan't denken om de 4017 te schrappen en dit door de microprocessor
te laten doen door met wat weerstanden van de stappenschakelaar een instelbare
weerstand te maken en een poort te gebruiken om de stand te meten. De andere poort kan
ik dan gebruiken om de bijbehorende LED op aan te sluiten. Maar met een 4017 werkt
dit ook prima en daar heb ik er nog genoeg van liggen dus misschien dat iemand andere
suggesties heeft. Ook stroboscope besturing ideeen die niet met de microprocessor te maken hebben zijn welkom.
edit: zal wat schema's tekenen en links toevoegen (afbeeldingen invoegen werkt vreemd genoeg niet)
edit2: Ik zit nu achter de PC van mijn ouders en daar zie ik de afbeeldingen wel. Dus dat zal dan wel aan mijn PC liggen.
edit3: Ik heb de B,C aansluitingen van de transistor voor de pulsdeler omgewisseld, zodat de stroom voor de LED nu door de 4017 wordt geleverd.
Ook heb ik het volgende gedeelte in het programma verwijderd aangezien dit niet meer nodig was.
Code: Selecteer alles
;UITGANGEN
Symbol LEDC1 = PORTB.3 ;Op poort B.3 zit Controller LED1
Symbol LEDC2 = PORTB.2 ;Op poort B.2 zit Controller LED2
Symbol LEDC3 = PORTB.1 ;Op poort B.1 zit Controller LED3
Symbol LEDC4 = PORTB.0 ;Op poort B.0 zit Controller LED4
Symbol LEDS1 = PORTB.7 ;Op poort B.5 zit Stroboscope LED1
Symbol LEDS2 = PORTB.6 ;Op poort B.4 zit Stroboscope LED2
Symbol LEDS3 = PORTB.5 ;Op poort B.7 zit Stroboscope LED3
Symbol LEDS4 = PORTB.4 ;Op poort B.6 zit Stroboscope LED4
(nb. toen ik met het programma begon stuurde ik de LED's aan met "LEDC1 = aan LEDC2 = uit" etc.)
