tmiw / ezdv Goto Github PK
View Code? Open in Web Editor NEWA FreeDV device based on the ESP32.
A FreeDV device based on the ESP32.
v0.1 does not have any mounting holes. Adding some will eventually be needed for the final version or even future dev boards, so evaluate to determine what size/how many is appropriate.
A thought just came to me as I was using the module with my FTdx10 connected via rear port. The module doesn't report to FreeDV Reporter when being used as we have previously discussed when I was initially testing.
Could the module reporting page where Callsign and Locator are configured be updated to allow entry of Frequency and Mode currently being used? most people will be using their computer maybe to change modes or just keep an eye on battery levels so would be a useful way of enabling reporting via reporter at the same time for those where the rigs cannot communicate to the module their settings.
The EMC vias added just prior to sending the board to JLCPCB are interfering with some of the sillkscreen items. Move or delete the vias as appropriate so that the text is readable.
Currently R1 is 2.7k (derived from the typical application schematic for the TLV320). However, this only allows 1mA of current to the microphone; the Android specs indicate 1.8-2.9 mA according to this post. A 1k resistor instead would result in 2.5mA of current @ 2.5V, which would be within spec.
As other FreeDV projects are transitioning away from GitHub, ezDV probably should too (context here). This issue is being created to track this task.
TODO:
Related issues on other projects: codec2 (https://github.com/drowe67/codec2/issues/354), LPCNet (drowe67/LPCNet#46), freedv-gui (drowe67/freedv-gui#281)
Currently there is logic in ezDV (in FlexTcpTask.cpp
) that unregisters itself from Flex radios when shutting down, and could presumably be run as well after a brief disconnection. However, when running this logic, the radio itself crashes. Thus, in the current FW, this logic is disabled.
The crash is being tracked by FlexRadio as SMART-9473 and this issue will be open until confirmed to be fixed (and the logic can be reenabled).
The currents through each of the LEDs on v0.1 (R10, R14, R17 and R20) may produce dramatically different brightness levels. We can use PWM as a workaround but these should be readjusted based on the selected LEDs so that the brightness is approximately equal.
Measuring ~890uA on v0.4 when turned off and USB is not plugged in. Per component datasheets, we should be seeing about 1/4-1/3 of that amount of consumption.
In analog mode audio routing is ok after device reset. Transmit is also ok. However, It is not routing back the radio audio to the user audio.
Used firmware: ezdv-20231122-full
The I2C pullup resistors (R2 and R8) are currently 4.7K. This may be insufficient depending on how fast we drive the I2C bus. Investigate and increase the resistance if necessary.
Analog Bypass
If we switch IN1_L and IN1_R in the future versions, it looks like we may have a low power analog bypass mode, which will reduce latency and we can put esp32 into sleep mode to save power.
We may add speaker amplifier to LOL line and internal mic to one of the available inputs, (preferably analog routable one). So, the device can be usable as an ordinary hand mike. I have added LM4871MX on my pcb and routed LOL to this pin, it works nice. We only need to implement some amplifier enable signal other than Sync output because this output flickers a lot and continuously turn amplifier on and off. I have tryed headphone detect interrupt to switch headphone/speaker channels however it is not working, probably allways connected radio channel is preventing that, not sure atm.
Just a few ideas, 73
Since the QST article about FreeDV has been published it has become clear that the reporter needs to have more fine grained setting options.
It's great to see more stations on the bands, but on 20m especially the reporter is becoming difficult to read in use.
Suggestions:
1 A filter to remove calls that have not been updated in the last N mins.
2 An option to only display (or highlight?) calls who have received me in the last N mins).
3 Show my own call line in a different colour.
4 An option to switch the reporter band filter automatically to the currently reported band (but only when that changes). i.e. The reporter band selector would still over-ride.
Just few ideas for discussion ;)
We have vias all over the middle of the board but not on the board edges. Investigate and verify whether these are needed (and add if so).
Some LEDs are on dimly in sleep mode, which could be contributing to the high power consumption (see #15). For v0.5, we should switch the GPIOs around to avoid this issue.
The ESP32-S3 has internal pullups which may make R9, R12, R13 and R15 unnecessary. Evaluate and remove if those internal pullups are usable.
Hi,
I've been following your project and loving all the work you've done.
This overlap perfectly with a project I was researching on: building a crypto transciever based on an ESP (something similar to what aarmono did here: https://github.com/aarmono/crypto_transceiver_instructions but cheaper and smaller).
I would then like to start contributing to your project, maybe trying to port the work aarmono did on top of codec2 to build encryption support. (Is this something you were already thinking about, maybe?)
First thing, though, I'd need to get some hardware to develop with.
Any chance there is a ready-to-go package or instructions to get a set of pcb manufactured by any PCBA provider?
Current references in the web interface and user's guide mention the FlexRadio 6000 series, but these need to be updated due to FlexRadio's announcement of the 8400/8600 at the 2024 Dayton Hamvention. No breaking changes to their API are expected in the new lineup.
It mentions to use N2R2 or N2R8
version, but on Tindie it has the N8R2 or N8R8
listed.
Not familiar with these boards, so I assume a typo??
Suggested starter for documenting the build process for the ezDV module based on HW Version 0.7 and my experience so far.
ezDV Build Process.pdf
I couldn't create a pull request to have it reviewed, possibly not authorised for this project
hope it is useful and review comments welcomed
I generated in Text Edit on the Mac and exported to PDF to add it here
Paul
I planned to use this module without battery. Everything works however, if I try to connect web interface system reboots.
Library shouldn't try to read battery if ic is not found during boot process.
`
I (22945) ButtonArray: Button VolDown now 0
I (23925) SettingsTask: Committing pending settings to flash.
I (40405) wifi:new:<1,0>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (40405) wifi:station: 12:34:56:78:90:AB join, AID=1, bgn, 20
I (40405) WirelessTask: Wifi event: 14
I (40535) wifi:idx:2 (ifx:1, 12:75:8d:8e:1d:67), tid:0, ssn:0, winSize:64
I (40745) esp_netif_lwip: DHCP server assigned IP to a client, IP is: 192.168.4.2
I (40765) DVTask: Task FlexVitaTask started
I (57075) HttpServerTask: Sending file : /bootstrap.min.css.gz (27324 bytes)...
I (57195) HttpServerTask: File sending complete
I (57285) HttpServerTask: Sending file : /localstyle.css (3249 bytes)...
I (57295) HttpServerTask: File sending complete
I (57385) HttpServerTask: Sending file : /bootstrap.bundle.min.js.gz (23265 bytes)...
I (57485) HttpServerTask: File sending complete
I (57495) HttpServerTask: Sending file : /jquery-3.6.1.min.js.gz (30850 bytes)...
I (57625) HttpServerTask: File sending complete
I (57715) HttpServerTask: Sending file : /localscript.js (22156 bytes)...
I (57845) HttpServerTask: File sending complete
I (57885) HttpServerTask: Websocket connection opened
I (57885) HttpServerTask: Sending JSON message to socket 57
I (57885) HttpServerTask: Sending JSON message to socket 57
I (57885) HttpServerTask: Sending JSON message to socket 57
I (57895) HttpServerTask: Sending JSON message to socket 57
I (57895) HttpServerTask: Sending JSON message to socket 57
I (57895) HttpServerTask: Sending JSON message to socket 57
I (57905) HttpServerTask: Sending JSON message to socket 57
assert failed: void ezdv::driver::MAX17048::onRequestBatteryStateMessage_(ezdv::task::DVTask*, ezdv::driver::RequestBatteryStateMessage*) MAX17048.cpp:215 (success)
Backtrace: 0x40376016:0x3fca9000 0x40380f31:0x3fca9020 0x40388c26:0x3fca9040 0x42015eca:0x3fca9160 0x42127fca:0x3fca91e0 0x42016639:0x3fca9200 0x42016649:0x3fca9230 0x420162a9:0x3fca9250 0x420162bf:0x3fca9280 0x42022369:0x3fca92a0 0x420223d6:0x3fca92f0 0x42022415:0x3fca9310 0x4038459d:0x3fca9330
I (1202) MAX17048: Checking for device...
W (1302) MAX17048: Device not found; battery monitoring disabled.
I (1302) DVTask: Task MAX17048 started
I (1312) DVTask: Task LedArray started
I (1322) gpio: GPIO[4]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (1322) gpio: GPIO[5]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (1322) gpio: GPIO[6]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (1322) gpio: GPIO[7]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (1322) gpio: GPIO[0]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (1322) DVTask: Task ButtonArray started
I (1332) TLV320Driver: reset TLV320
I (1332) TLV320Driver: configure clocks
I (1342) TLV320Driver: configure processing blocks
I (1342) TLV320Driver: configure LDOs
I (1342) TLV320Driver: configure routing for ADC
I (1352) TLV320Driver: configure routing for DAC
I (1602) ButtonArray: Button UsbPower now 1
I (3182) TLV320Driver: configuring interrupts
I (3182) gpio: GPIO[12]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (3182) gpio: GPIO[14]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (3182) TLV320Driver: all audio codec config complete
I (3182) DVTask: Task TLV320Driver started
W (3202) TLV320Driver: ADC overload! (Left/User = 1, Right/Radio = 0)
I (3292) DVTask: Task FreeDVTask started
I (3302) DVTask: Task AudioMixer started
I (3302) TLV320Driver: button state: 10
I (3312) DVTask: Task BeeperTask started
I (3322) VoiceKeyerTask: Starting VoiceKeyerTask
I (3322) DVTask: Task VoiceKeyerTask started
I (3332) UserInterfaceTask: Sending welcome message to beeper
I (3332) DVTask: Task UserInterfaceTask started
I (3332) BeeperTask: Got beeper message ANA
I (3342) DVTask: Task WirelessTask started
I (3342) DVTask: Task MainApp started
I (3352) SettingsTask: Initializing NVS.
I (3352) SoftwareUpdateTask: Starting SoftwareUpdateTask
I (3352) DVTask: Task SoftwareUpdateTask started
I (3352) SettingsTask: Opening NVS handle.
I (3352) SettingsTask: leftChannelVolume: 10
I (3352) SettingsTask: rightChannelVolume: -35
I (3352) SettingsTask: wifiEnabled: 0
I (3352) SettingsTask: wifiMode: 0
I (3352) SettingsTask: wifiSecurity: 0
I (3352) SettingsTask: wifiChannel: 1
I (3352) SettingsTask: wifiSsid:
I (3362) TLV320Driver: Volume control: setting volume on register 65 to 10
I (3362) SettingsTask: wifiPassword: ********
I (3362) SettingsTask: radioEnabled: 0
I (3362) SettingsTask: headsetPtt: 0
I (3362) SettingsTask: timeOutTimer: 120
I (3362) SettingsTask: radioType: 0
I (3362) SettingsTask: radioHostname:
I (3362) SettingsTask: radioPort: 0
I (3362) SettingsTask: radioUsername:
I (3362) SettingsTask: radioPassword: ********
I (3362) UserInterfaceTask: Disallowing headset button from toggling PTT.
I (3362) SettingsTask: enableVoiceKeyer: 0
I (3362) SettingsTask: voiceKeyerNumberTimesToTransmit: 10
I (3362) SettingsTask: voiceKeyerSecondsToWaitAfterTransmit: 5
I (3362) SettingsTask: callsign:
I (3362) SettingsTask: gridSquare: UN00KN
I (3362) SettingsTask: ledDutyCycle: 8192
I (3362) SettingsTask: lastMode: 3
I (3362) DVTask: Task SettingsTask started
I (3362) FreeDV: Setting FreeDV mode to 3
I (3362) BeeperTask: Got beeper message 1600
I (3372) TLV320Driver: Volume control: setting volume on register 66 to -35
`
Oops. Turns out that the ADC only works on GPIOs 1-20 on the ESP32-S3. Reassign GPIO appropriately for next board spin.
Testing of the v0.1 boards show that significant 60Hz noise is getting into the mic line on the headset jack. The radio jack is working properly, however. For v0.2, we need to reroute this trace to shorten it and provide more shielding.
During implementation of IC-705 support, it was discovered that the system is memory constrained. That is, it can't comfortably do both FreeDV encode/decode and Wi-Fi handling. For the next version, we'll need to use a different ESP32S3 part or development board that has additional built-in RAM.
Some power traces may be insufficiently wide for the current being drawn. Investigate to confirm and update the PCB accordingly.
With headset detection turned on, there's some sort of background noise in the audio while in loopback mode. May need to inspect this part of the circuit again and ensure any RFI, etc. is taken care of.
v0.1 of the board has SCL on GPIO 48. However, the nanoESP32-S3 is apparently using that for its RGB LED. Cutting off the pin on the board for GPIO 45 and bodging the pin next to it to 45 allowed I2C to work properly.
Having had the enclosure built for me I discovered that when the module v0.7 was fitted, the top did not fit due to the headers fitted to the pcb, as a result I have adjusted the height of the top and the length of the buttons to cater for the new case height.
Attached are new scad files that I have created and successfully printed to fit this module.
enclosure-lid.scad
enclosure-button-v3.scad
enclosure-new-files.zip
Testing the ezDV module using two radios, one IC-705 the other a Yaesu FTdx10, Wifi enabled for the 705 which seems to be working ok, but when trying to focus efforts on the dx10, am unable to disable the WiFi connectivity for the radio.
Whenever i untick the option for WiFi connectivity and try to save, it reverts back to previous settings without unticking the WiFi option.
Have to disable WiFi on the 705 to force connectivity to work with the dx10
Have updated to latest version of code just released via ota but no change in the WiFi issue
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.