From 7bdb921a9d389f7a60279ef6818b09d01e01f3be Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 10:44:01 -0500 Subject: [PATCH 01/13] added sr_frs_present --- cubesatsim/cubesatsim.h | 1 + 1 file changed, 1 insertion(+) diff --git a/cubesatsim/cubesatsim.h b/cubesatsim/cubesatsim.h index 47c27f9a..9c5cae80 100644 --- a/cubesatsim/cubesatsim.h +++ b/cubesatsim/cubesatsim.h @@ -381,6 +381,7 @@ RPI_PICO_Timer ITimer1(1); bool timer0_on = false; volatile int timer_counter; bool filter_present = false; // BPF installation state for transmitter +bool sr_frs_present = false; // SR_FRS FM transmitter module state char callsign[20]; int morse_timing = 60; // ms for a dit From 0e3388e59825554816dbba805dda05512c86c201 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 10:47:51 -0500 Subject: [PATCH 02/13] added sr_frs_present for testing --- cubesatsim/cubesatsim.ino | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index f4f3d584..f53ede1c 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -506,7 +506,7 @@ void transmit_on() { if (debug_mode) Serial.println("Transmit on!!!"); // pwm_set_gpio_level(BPSK_PWM_A_PIN, (config.top + 1) * 0.5); -// pwm_set_gpio_level(BPSK_PWM_B_PIN, (config.top + 1) * 0.5); +// pwm_set__level(BPSK_PWM_B_PIN, (config.top + 1) * 0.5); /* int ret = 1; int i = 0; @@ -3536,10 +3536,12 @@ void config_gpio() { else Serial.println("BPF not present - no transmitting after CW ID"); - if (digitalRead(TXC_PIN) == FALSE) - Serial.println("TXC present"); + if (digitalRead(TXC_PIN) == FALSE) { + Serial.println("SR_FRS present"); + sr_frs_present = true; + } else - Serial.println("TXC not present"); + Serial.println("SR_FRS not present"); // Serial.print("Squelch: "); // Serial.println(digitalRead(SQUELCH)); @@ -3828,18 +3830,24 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise // if (!wifi) digitalWrite(LED_BUILTIN, HIGH); // Transmit LED on digitalWrite(MAIN_LED_BLUE, HIGH); - - unsigned long start = micros(); - unsigned long duration_us = duration * 1000; - float period_us = (0.5E6) / (float)(freq); - bool phase = HIGH; - while((micros() - start) < duration_us) { - digitalWrite(AUDIO_OUT_PIN, phase); // ToDo: if no TXC, just turn on PWM carrier - phase = !phase; - float time_left = (float)(start + duration_us - micros()); - sleep(min(time_left, period_us) / 1.0E6); + + if (sr_frs_present) { + unsigned long start = micros(); + unsigned long duration_us = duration * 1000; + float period_us = (0.5E6) / (float)(freq); + bool phase = HIGH; + while((micros() - start) < duration_us) { + digitalWrite(AUDIO_OUT_PIN, phase); // ToDo: if no TXC, just turn on PWM carrier + phase = !phase; + float time_left = (float)(start + duration_us - micros()); + sleep(min(time_left, period_us) / 1.0E6); + } + digitalWrite(AUDIO_OUT_PIN, LOW); } - digitalWrite(AUDIO_OUT_PIN, LOW); + else { + Serial.println("No sr_frs present!"); + } + // if (!wifi) digitalWrite(LED_BUILTIN, LOW); // Transmit LED off digitalWrite(MAIN_LED_BLUE, LOW); From 7cdc7a35c644e39b355ea01c9754f462dae654da Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 11:13:52 -0500 Subject: [PATCH 03/13] added clock turn on for non SR_FRS CW --- cubesatsim/cubesatsim.ino | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index f53ede1c..595870bb 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3861,6 +3861,21 @@ void transmit_callsign(char *callsign) { strcat(id, callsign); Serial.print("Transmitting CW id: "); print_string(id); + + if (!sr_frs_present) { + start_clockgen(); + if (clockgen.setClockFSK()) { + start_clockgen(); + clockgen.setClockFSK(); + Serial.println("Config clock for CW without SR_FRS!"); + } else { + Serial.println("Config clock for CW without SR_FRS"); + } + digitalWrite(PD_PIN, LOW); // disable SR_FRS + clockgen.enableOutputs(true); + digitalWrite(BPSK_CONTROL_B, LOW); + digitalWrite(BPSK_CONTROL_A, LOW); + } /* if (reset_count == 0) { program_radio(); @@ -3875,10 +3890,12 @@ void transmit_string(char *string) { int j = 0; if (debug_mode) Serial.println("Transmit on"); - digitalWrite(PD_PIN, HIGH); // Enable SR_FRS - digitalWrite(MAIN_LED_BLUE, HIGH); - digitalWrite(LED_BUILTIN, HIGH); - digitalWrite(PTT_PIN, LOW); + if (sr_frs_present) { + digitalWrite(PD_PIN, HIGH); // Enable SR_FRS + digitalWrite(PTT_PIN, LOW); + } +//// digitalWrite(MAIN_LED_BLUE, HIGH); +//// digitalWrite(LED_BUILTIN, HIGH); while ((string[j] != '\0') && (j < 256) && !cw_stop) { // Serial.print("j = "); @@ -3904,8 +3921,8 @@ void transmit_string(char *string) { if (debug_mode) Serial.println("Transmit off"); - digitalWrite(MAIN_LED_BLUE, LOW); - digitalWrite(LED_BUILTIN, LOW); +//// digitalWrite(MAIN_LED_BLUE, LOW); +//// digitalWrite(LED_BUILTIN, LOW); digitalWrite(PTT_PIN, HIGH); digitalWrite(PD_PIN, LOW); // disable SR_FRS } From e6f91470bec40e047917169349dc9dda9bb4c812 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 14:46:52 -0500 Subject: [PATCH 04/13] added carrier in transmit_cw() --- cubesatsim/cubesatsim.ino | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 595870bb..e4961bea 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3831,9 +3831,10 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise digitalWrite(LED_BUILTIN, HIGH); // Transmit LED on digitalWrite(MAIN_LED_BLUE, HIGH); + unsigned long duration_us = duration * 1000; + if (sr_frs_present) { - unsigned long start = micros(); - unsigned long duration_us = duration * 1000; + unsigned long start = micros(); float period_us = (0.5E6) / (float)(freq); bool phase = HIGH; while((micros() - start) < duration_us) { @@ -3845,7 +3846,11 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise digitalWrite(AUDIO_OUT_PIN, LOW); } else { - Serial.println("No sr_frs present!"); + Serial.println("No sr_frs present!"); + unsigned long start = micros(); + digitalWrite(BPSK_CONTROL_A, HIGH); + while((micros() - start) < duration_us) { } + digitalWrite(BPSK_CONTROL_A, LOW); } // if (!wifi) From 953e2cbbb4ea15e10eb1612019c65cbe0b200445 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 14:52:32 -0500 Subject: [PATCH 05/13] use enable outputs instead of just control --- cubesatsim/cubesatsim.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index e4961bea..f2b17682 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3848,9 +3848,11 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise else { Serial.println("No sr_frs present!"); unsigned long start = micros(); + clockgen.enableOutputs(true); digitalWrite(BPSK_CONTROL_A, HIGH); while((micros() - start) < duration_us) { } digitalWrite(BPSK_CONTROL_A, LOW); + clockgen.enableOutputs(false); } // if (!wifi) From d02e8655cbef7f1fc9ef109a4511ee112a29d4bd Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:04:38 -0500 Subject: [PATCH 06/13] enableOutputOnly for 0 --- cubesatsim/cubesatsim.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index f2b17682..cf6a92a3 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3848,7 +3848,8 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise else { Serial.println("No sr_frs present!"); unsigned long start = micros(); - clockgen.enableOutputs(true); +// clockgen.enableOutputs(true); + clockgen.enableOutputOnly(0); digitalWrite(BPSK_CONTROL_A, HIGH); while((micros() - start) < duration_us) { } digitalWrite(BPSK_CONTROL_A, LOW); From 36abf257a9152224e54b5f583cafc5cb95a90cbb Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:05:32 -0500 Subject: [PATCH 07/13] remove prints for no sr_frs --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index cf6a92a3..8f46b320 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3846,7 +3846,7 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise digitalWrite(AUDIO_OUT_PIN, LOW); } else { - Serial.println("No sr_frs present!"); +// Serial.println("No sr_frs present!"); unsigned long start = micros(); // clockgen.enableOutputs(true); clockgen.enableOutputOnly(0); From 37e37625c9c3c9cc7651de0494e5e40dee976b9a Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:13:00 -0500 Subject: [PATCH 08/13] only program SR_FRS if present --- cubesatsim/cubesatsim.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 8f46b320..564102e5 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3880,7 +3880,7 @@ void transmit_callsign(char *callsign) { Serial.println("Config clock for CW without SR_FRS"); } digitalWrite(PD_PIN, LOW); // disable SR_FRS - clockgen.enableOutputs(true); + clockgen.enableOutputs(false); digitalWrite(BPSK_CONTROL_B, LOW); digitalWrite(BPSK_CONTROL_A, LOW); } @@ -4455,7 +4455,7 @@ void set_lat_lon() { } void program_radio() { - + if (sr_frs_present) { Serial.println("Programming SR_FRS!"); digitalWrite(PD_PIN, HIGH); // enable SR_FRS @@ -4476,6 +4476,7 @@ void program_radio() { mySerial.println("AT+DMOSETMIC=8,0\r"); // was 8 } + } digitalWrite(PD_PIN, LOW); // disable SR_FRS } From c792c4695405e072e5b25414c00c25c674201e9e Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:22:03 -0500 Subject: [PATCH 09/13] enable clock for CW mode without SR_FRS --- cubesatsim/cubesatsim.ino | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 564102e5..400c0e74 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -2165,12 +2165,31 @@ void config_radio() pinMode(TEMPERATURE_PIN, INPUT); pinMode(AUDIO_IN_PIN, INPUT); */ - if ((mode == AFSK) || (mode == SSTV) || (mode == CW)) { + if ((mode == AFSK) || (mode == SSTV)) { digitalWrite(PD_PIN, HIGH); // Enable SR_FRS // pinMode(AUDIO_OUT_PIN, OUTPUT); // program_radio(); // remove for now + } else if (mode == CW) { + if (sr_frs_present) + digitalWrite(PD_PIN, HIGH); // Enable SR_FRS + else { + start_clockgen(); + if (clockgen.setClockFSK()) { + start_clockgen(); + clockgen.setClockFSK(); + Serial.println("Config clock for CW without SR_FRS!"); + } else { + Serial.println("Config clock for CW without SR_FRS"); + } + digitalWrite(PD_PIN, LOW); // disable SR_FRS + clockgen.enableOutputs(false); + digitalWrite(BPSK_CONTROL_B, LOW); + digitalWrite(BPSK_CONTROL_A, LOW); + + } + } else if (mode == BPSK) { /* int ret = 1; From 96f6db1cdbc77cd4c36669b24ee6ba1cce004d84 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:26:02 -0500 Subject: [PATCH 10/13] enable CW mode transmit with no SR_FRS --- cubesatsim/cubesatsim.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 400c0e74..b8e180dc 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -474,7 +474,8 @@ void send_aprs_packet() { } void send_cw() { - if (filter_present) { // only transmit CW packet if BPF filter is present +// if (filter_present) + { // only transmit CW packet if BPF filter is present char de[] = " DE "; char telem[1000]; From d5a7197070110f88300a4af4a7e2992b6c43b347 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:29:28 -0500 Subject: [PATCH 11/13] force BPF present --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index b8e180dc..9c051f38 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3549,7 +3549,7 @@ void config_gpio() { pinMode(BPF_PIN, INPUT_PULLUP); // Read LPF to see if present // pinMode(SQUELCH, INPUT); // Squelch from TXC - if (digitalRead(BPF_PIN) == FALSE) { + if (digitalRead(BPF_PIN) != FALSE) { // force BPF present Serial.println("BPF present - transmit enabled"); filter_present = true; } From b40b83f8e8b5297840d78320f9998e74f9a3b413 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 15:35:36 -0500 Subject: [PATCH 12/13] remove SR_FRS force --- cubesatsim/cubesatsim.ino | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 9c051f38..6d509dee 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3549,14 +3549,16 @@ void config_gpio() { pinMode(BPF_PIN, INPUT_PULLUP); // Read LPF to see if present // pinMode(SQUELCH, INPUT); // Squelch from TXC - if (digitalRead(BPF_PIN) != FALSE) { // force BPF present + if (digitalRead(BPF_PIN) == FALSE) { +// if (digitalRead(BPF_PIN) == FALSE) { // force BPF present Serial.println("BPF present - transmit enabled"); filter_present = true; } else - Serial.println("BPF not present - no transmitting after CW ID"); + Serial.println("BPF not present - no transmitting after CW ID"); - if (digitalRead(TXC_PIN) == FALSE) { + if (digitalRead(TXC_PIN) == FALSE) { +// if (digitalRead(TXC_PIN) != FALSE) { // force SR_FRS not present Serial.println("SR_FRS present"); sr_frs_present = true; } From 4b5523ff400dfaf1afec67fd4045d3fe58c1daa5 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sun, 4 Dec 2022 22:28:11 -0500 Subject: [PATCH 13/13] disable clock outputs on FSK only --- cubesatsim/cubesatsim.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 6d509dee..52580218 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3608,14 +3608,14 @@ bool TimerHandler0(struct repeating_timer *t) { // delayMicroseconds(10); digitalWrite(BPSK_CONTROL_A, HIGH); // Serial.print("-"); -// clockgen.enableOutputOnly(1); + if (mode == FSK) clockgen.enableOutputOnly(1); } else { // digitalWrite(BPSK_CONTROL_A, LOW); digitalWrite(BPSK_CONTROL_A, LOW); // delayMicroseconds(10); digitalWrite(BPSK_CONTROL_B, HIGH); // Serial.print("_"); -// clockgen.enableOutputOnly(0); + if (mode == FSK) clockgen.enableOutputOnly(0); } if (wav_position > bufLen) { // 300) { wav_position = wav_position % bufLen;