forked from ArjanteMarvelde/uSDR-pico
-
Notifications
You must be signed in to change notification settings - Fork 0
/
relay.c
79 lines (66 loc) · 1.44 KB
/
relay.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* relay.c
*
* Created: Nov 2021
* Author: Arjan te Marvelde
*
* Two PCF8574 expanders are on the I2C bus, one on the RX and one on the BPF board.
* The RX (0x42) bit assignments:
* 0: Enable -20dB attenuator
* 1: Enable -10dB attenuator
* 2: Enable +10dB pre-amplifier
* The BPF (0x40) bit assignments:
* 0: Enable LPF 2.5 MHz
* 1: Enable BPF 2.0 - 6.0 MHz
* 2: Enable BPF 5.0 -12.0 MHz
* 3: Enable BPF 10.0 -24.0 MHz
* 4: Enable BPF 20.0 -40.0 MHz
*
*/
#include <stdio.h>
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "relay.h"
/* I2C address and pins */
#define I2C_RX 0x21
#define I2C_BPF 0x20
void relay_setband(uint8_t val)
{
uint8_t data[2];
int ret;
data[0] = val&0x1f;
if (i2c_write_blocking(i2c1, I2C_BPF, data, 1, false) < 0)
i2c_write_blocking(i2c1, I2C_BPF, data, 1, false);
}
int relay_getband(void)
{
uint8_t data[2];
int ret;
ret = i2c_read_blocking(i2c1, I2C_BPF, data, 1, false);
if (ret>=0)
ret=data[0];
return(ret);
}
void relay_setattn(uint8_t val)
{
uint8_t data[2];
data[0] = val&0x07;
if (i2c_write_blocking(i2c1, I2C_RX, data, 1, false) < 0)
i2c_write_blocking(i2c1, I2C_RX, data, 1, false);
}
int relay_getattn(void)
{
uint8_t data[2];
int ret;
ret = i2c_read_blocking(i2c1, I2C_RX, data, 1, false);
if (ret>=0)
ret=data[0];
return(ret);
}
void relay_init(void)
{
relay_setattn(REL_PRE_10);
sleep_ms(1);
relay_setband(REL_BPF12);
}