Relátka spínám proti zemi. Vypínače s LED na přepínání antén jsou proti zemi a v procesoru je zapnut interni pullup. Příjem je možný z libovolné kombinace antén. Při sepnutí PTT na zem se vysílá pouze do antnény 1 a 2.
Zdrojový kód je napsaný v GCC pro AVR je zde:
/*--------------------------------------------------
BCC Stackmatch controler 0.1
(c)OK1CDJ, OK1CDK 2007
Pin Function
6 PD2 PTT IN (0=PTT)
7 PD3 Switch 1 (0=ON)
8 PD4 Switch 2 (0=ON)
9 PD5 Switch 3 (0=ON)
12 PB0 REL. 1 (1=ON)
13 PB1 REL. 2 (1=ON)
14 PB2 REL. 3 (1=ON)
15 PB3 REL. 4 (1=ON)
*/
#include
unsigned char bit(unsigned char param);
#define ON 1 // turned on
#define OFF 0 // turned off
unsigned char PTT=OFF;
#define PTTIN PD2
#define S1 PD3
#define S2 PD4
#define S3 PD5
#define R1 PB0
#define R2 PB1
#define R3 PB2
#define R4 PB3
int main(void)
{
unsigned char portstatus;
unsigned char PTT=OFF;
DDRD = 0x0;
PORTD |= _BV(PTTIN); //PD3 = 1
PORTD |= _BV(S1);
PORTD |= _BV(S2);
PORTD |= _BV(S3);
// PB1,2,3,4 as output
DDRB = 0xFF;
PORTB = 0x0;
PTT=ON;
while(1) //
{
portstatus = PIND;
if( ! bit_is_set(PIND, PTTIN) ) //if PTT = 0 klicovani
{
if (PTT == OFF)
{
PTT=ON;
PORTB= 0xB;
}
}
if( bit_is_set(PIND, PTTIN) )//if PTT = 1 odklicovani
{
if (PTT == ON)
{
PTT=OFF;
}
switch(portstatus & 56) // stavy spinacu
{
case 48:
{ //S1
PORTB = 1;
}break;
case 40: //S2
{
PORTB = 2;
}break;
case 24: //S3
{
PORTB = 4;
}break;
case 32: //S1+2
{
PORTB = 11;
}break;
case 16: //S1+3
{
PORTB = 13;
}break;
case 8: //S2+3
{
PORTB = 14;
}break;
case 0: //S1+2+3
{
PORTB = 15;
}break;
case 56: //Nic nesepnuto
{
PORTB = 0;
}break;
}
}
}
return(0);// to avoid a compiler warning
}
}
Toto ovládání jsme používali v CQ WW 2007 na 20m a 80m a nebyl v průběhu závodu
nebyl jediný problém.
V příští verzi firmware dodělám ukládání konfigurace vysílacích antén do EEPROM.
Žádné komentáře:
Okomentovat