summaryrefslogtreecommitdiffstats
path: root/rf_test
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2024-11-23 15:06:13 +0800
committerSadeep Madurange <sadeep@asciimx.com>2024-11-23 15:06:13 +0800
commit6b31b3f77b05286ca56590dde14717541f4cb5ba (patch)
tree38390bb597837bda1eff9f7a2e54688a27613ef7 /rf_test
parent956a9c26e42d842a0c49c3bf9aa3f71c00c49488 (diff)
downloadsmart-home-6b31b3f77b05286ca56590dde14717541f4cb5ba.tar.gz
wip: attempt with basic RF modules.
Diffstat (limited to 'rf_test')
-rw-r--r--rf_test/Recv.Makefile2
-rw-r--r--rf_test/Send.Makefile2
-rw-r--r--rf_test/recv.c87
-rw-r--r--rf_test/send.c87
4 files changed, 91 insertions, 87 deletions
diff --git a/rf_test/Recv.Makefile b/rf_test/Recv.Makefile
index c7b98a7..cd5b4ff 100644
--- a/rf_test/Recv.Makefile
+++ b/rf_test/Recv.Makefile
@@ -9,7 +9,7 @@ CFLAGS = -std=gnu99
CFLAGS += -Os
CFLAGS += -Wall
CFLAGS += -mmcu=$(MCU)
-CFLAGS += -DBAUD=4800
+CFLAGS += -DBAUD=2400
CFLAGS += -DF_CPU=16000000UL
CFLAGS += -ffunction-sections -fdata-sections
diff --git a/rf_test/Send.Makefile b/rf_test/Send.Makefile
index e7d3e79..397a9db 100644
--- a/rf_test/Send.Makefile
+++ b/rf_test/Send.Makefile
@@ -9,7 +9,7 @@ CFLAGS = -std=gnu99
CFLAGS += -Os
CFLAGS += -Wall
CFLAGS += -mmcu=$(MCU)
-CFLAGS += -DBAUD=4800
+CFLAGS += -DBAUD=2400
CFLAGS += -DF_CPU=16000000UL
CFLAGS += -ffunction-sections -fdata-sections
diff --git a/rf_test/recv.c b/rf_test/recv.c
index a908bbe..9cb3daa 100644
--- a/rf_test/recv.c
+++ b/rf_test/recv.c
@@ -1,80 +1,67 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
-#include <util/setbaud.h>
#define TEST_LED PB1
#define LOCK_LED PD6
#define UNLOCK_LED PD7
-#define SYN 0xA1
-#define FIN 0xB2
-#define LOCK 0xC3
-#define UNLOCK 0xD3
+#define SYN 0xAA
+#define LOCK 0xB5
+#define UNLOCK 0xAE
-static void usart_init(void)
-{
- UBRR0H = UBRRH_VALUE;
- UBRR0L = UBRRL_VALUE;
- UCSR0B = (1 << RXEN0) | (1 << RXCIE0);
- UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
-}
+#define SIGPIN PB3
+#define SIGLEN 200
+
+static volatile unsigned char data = 0;
-static unsigned char usart_recv(void)
+static inline void led_init(void)
{
- while((UCSR0A & (1 << RXC0)) == 0);
- return UDR0;
+ DDRB |= (1 << TEST_LED);
+ DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
}
-static void led_init(void)
+static inline void pcint2_init(void)
{
- DDRB |= (1 << TEST_LED);
- DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
- PORTD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
+ PCICR |= (1 << PCIE2);
+ PCMSK2 |= (1 << PCINT2);
}
int main(void)
{
- usart_init();
+ DDRB &= ~(1 << SIGPIN);
+ PORTB &= ~(1 << SIGPIN);
+
led_init();
+ pcint2_init();
sei();
- for (;;)
- ;
+ for (;;) {
+ if (data == LOCK) {
+ PORTD |= (1 << LOCK_LED);
+ PORTD &= ~(1 << UNLOCK_LED);
+ }
+
+ if (data == UNLOCK) {
+ PORTD &= ~(1 << LOCK_LED);
+ PORTD |= (1 << UNLOCK_LED);
+ }
+
+ data = 0;
+ _delay_ms(100);
+ }
return 0;
}
-ISR(USART_RX_vect)
+ISR(PCINT2_vect)
{
- unsigned char data, buf;
-
- data = 0;
- buf = usart_recv();
-
- if (buf == SYN) {
- buf = usart_recv();
-
- while (buf != FIN) {
- buf = usart_recv();
-
- if (buf == SYN) {
- PORTB ^= (1 << TEST_LED);
- return;
- }
-
- if (buf != FIN)
- data = buf;
- }
+ int n, bit;
- if(data == LOCK) {
- PORTD |= (1 << LOCK_LED);
- PORTD &= ~(1 << UNLOCK_LED);
- } else if (data == UNLOCK) {
- PORTD |= (1 << UNLOCK_LED);
- PORTD &= ~(1 << LOCK_LED);
- }
+ for (n = 7; n >= 0; n--) {
+ _delay_ms(SIGLEN);
+ bit = ((PINB >> SIGPIN) & 1);
+ data = bit == 1 ? (data | (1 << n)) : (data & ~(1 << n));
}
-
}
diff --git a/rf_test/send.c b/rf_test/send.c
index de69818..3ea0719 100644
--- a/rf_test/send.c
+++ b/rf_test/send.c
@@ -1,70 +1,87 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
-#include <util/setbaud.h>
-#define LOCK_LED PB1
+#define LOCK_LED PB5
#define LOCK_BTN PD6
#define UNLOCK_BTN PD7
-#define SYN 0xA1
-#define FIN 0xB2
-#define LOCK 0xC3
-#define UNLOCK 0xD3
+#define SYN 0xAA
+#define LOCK 0xB5
+#define UNLOCK 0xAE
-static void usart_init(void)
-{
- UBRR0H = UBRRH_VALUE;
- UBRR0L = UBRRL_VALUE;
- UCSR0B = (1 << TXEN0);
- UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
-}
+#define SIGPIN PD2
+#define SIGLEN 500
-static void usart_send(unsigned char data)
+static inline void send(unsigned char c)
{
- while (!(UCSR0A & (1 << UDRE0)))
- ;
- UDR0 = data;
-}
+ int n;
+
+ for (n = 7; n >= 0; n--) {
+ PORTD = ((c >> n) & 1) == 1
+ ? PORTD | (1 << SIGPIN)
+ : PORTD & ~(1 << SIGPIN);
-static inline void pcint2_init(void)
-{
- PCICR |= (1 << PCIE2);
- PCMSK2 |= ((1 << PCINT22) | (1 << PCINT23));
+ _delay_us(SIGLEN);
+ }
+
+ PORTD &= ~(1 << SIGPIN);
}
static inline void lock(void)
{
+ send(SYN);
+ send(LOCK);
PORTB |= (1 << LOCK_LED);
-
- usart_send(SYN);
- usart_send(LOCK);
- usart_send(FIN);
}
static inline void unlock(void)
{
+ send(SYN);
+ send(UNLOCK);
PORTB &= ~(1 << LOCK_LED);
+}
+
+static inline int is_btn_pressed(unsigned char btn)
+{
+ if (!((PINB >> btn) & 0x01)) {
+ _delay_us(2000);
+ return !((PINB >> btn) & 0x01);
+ }
+
+ return 0;
+}
- usart_send(SYN);
- usart_send(UNLOCK);
- usart_send(FIN);
+static inline void pcint2_init(void)
+{
+ PCICR |= (1 << PCIE2);
+ PCMSK2 |= ((1 << PCINT22) | (1 << PCINT23));
}
int main(void)
{
DDRB |= (1 << LOCK_LED);
- PORTB |= (1 << LOCK_LED);
- usart_init();
+ DDRD &= ~((1 << LOCK_BTN) | (1 << UNLOCK_BTN));
+ PORTD |= (1 << LOCK_BTN) | (1 << UNLOCK_BTN);
+
+ DDRD |= (1 << SIGPIN);
+ PORTD &= ~(1 << SIGPIN);
+
+ pcint2_init();
+ sei();
for (;;) {
- _delay_ms(4000);
- lock();
- _delay_ms(4000);
- unlock();
}
return 0;
}
+ISR(PCINT2_vect)
+{
+ if (is_btn_pressed(LOCK_BTN))
+ lock();
+
+ if (is_btn_pressed(UNLOCK_BTN))
+ unlock();
+}