Sequencer

Sequencer on radioamatöörien tarvitsema laite, joka laittaa eri radiolaitteet päälle järjestyksessä ja pois päältä vastakkaisessa järjestyksessä.

sekvensseri.jpgrelay12V.jpg
relay.png

Siinä on tulo, jolla laite käynnistyy ja sammuu. Kun tulo menee maihin, laite lähtee käyntiin.
Laitteessa on neljä antoa 12V releille. Ne on tarkoitettu teholähettimen etuvahvistimelle ja pääteasteelle.

Jokainen anto laitetaan päälle 50ms välein ja sammutetaan taas 50 ms välein, mutta päinvastaisessa järjestyksessä.

Laite käyttää 12V käyttöjännitettä 7mA (kun releet eivät ole päällä) ja siinä LM7805 5 voltin regulaattori mikroprosessoria varten.

Jokaista lähtöä varten on oma driveri. Ne on tehty kahdesta transistorista.

Sequenencer.jpg

Klikkaa isommaksi

sequencer.pdf

Tässä on laitten kuva

sekvensseri1.jpg

Tässä on laitteen lähdekoodi

/**
Filename: sequencer.c & PIC16F886
Name : Pekka Ritamäki
Time 1.10.2016
Function: lue input ((a0) tila ja anna output-tilan portit päälle 50ms välein
kun input nousee taas laita outputtilat päivavastaisessa järjestyksessä pois päältä

output koodi:

rele1 rele2 rele3 rele4
RB0 RB1 RB2 RB3

;**/
#include <16f886.h>
#device *=16 // 16 bittinen RAM

#device ADC=10 // ADC muunnin on 10 bittinen
#FUSES WDT // Watch Dog Timer

#FUSES INTRC_IO // Internal osc without output 8MHz
#FUSES NOPROTECT // Code is not protected from reads
#FUSES IESO // Internal External Switch Over mode enabled
#FUSES NODEBUG // No Debug mode for ICD
#FUSES PUT // Power up timer
#FUSES NOMCLR // Master Clear pin enabled
#FUSES NOLVP // No low power programming
//#FUSES BROWNOUT_SW // älä laita brownoutia päälle
#FUSES NOBROWNOUT // älä laita brownoutia päälle

#use delay(clock=8MHZ,restart_wdt) // määrittele sisäinen oskillaattori
#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7) // sarjaliikenne määritelyt

// määrittele portit
#BYTE PORTA = 5
#byte PORTB = 6
#byte PORTC = 7
#BYTE TRISA = 0x85
#BYTE TRISB = 0x86
#BYTE TRISC = 0x87

// määrittele suuntarekisterit
#bit trisb0 =TRISB.0
#bit trisb1 =TRISB.1
#bit trisb2 =TRISB.2
#bit trisb3 =TRISB.3

#define K3 PIN_B3
#define K2 PIN_B2
#define K1 PIN_B1
#define K0 PIN_B0

#define A PIN_A1
#define B PIN_A2
#define C PIN_A3
#define D PIN_A0

====================
8MHz/4= 2MHz
// 2MHz/8 = 125kHz
// 125kHz /65535 = 1.9Hz
// tämä pitää laitteen hengissä

#INT_TIMER1
void timer1_isr ( void)
{
restart_wdt();

}
=============
pääohjelma
//=================

void main(void)
{
int8 tila =0;
int8 muutos =0;
brownout_enable(false) ;

setup_wdt(WDT_2304MS);

delay_ms(100);

setup_adc_ports( NO_ANALOGS );
setup_adc(ADC_CLOCK_INTERNAL );

output_LOW(PIN_B0) ;
output_LOW(PIN_B1) ;
output_LOW(PIN_B2) ;
output_LOW(PIN_B3) ;

enable_interrupts (int_timer1) ;
enable_interrupts( global);

trisb0 =0; // anto portit päälle
trisb1 =0; // anto portit päälle
trisb2 =0; // anto portit päälle
trisb3 =0; // anto portit päälle
delay_ms(1000); // alkusi 0.1s viive käynnistykseen
// lue portteja jatkuvasti ja katso niiden tila
PORTB=0; // aluksi kaikki annot pois
tila=3;
while(1)
{
if (INPUT (A) )
{
delay_ms(5); // pieni viive
if(INPUT(A) ) {
if(tila==3) {
muutos=1;
tila =0;
}
}
}

if (!INPUT (A) )
{
delay_ms(5); // pieni viive
if(!INPUT(A) ) {
if(tila==3)
{
muutos =1;
tila =1;
}
}
}

if( muutos) {
switch( tila) {
case 0: output_low(K3); delay_ms(50); output_low( K2); delay_ms(50); output_low(K1); delay_ms(50); output_low( K0);
muutos=0;
tila =3;
break;
case 1: output_high(K0); delay_ms(50); output_high( K1); delay_ms(50); output_high(K2); delay_ms(50); output_high( K3);
muutos=0;
tila =3;
break;

default:

}
} // muutos
delay_ms(50); // joka toiminna väliin 500ms viive

}
}

Pekka OH3GDO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License