Jan-15-2022, 10:46 PM
Wierd problem been trying to resolve for several hours - appreciate any help !
I'm runinng an ADC-sampler in a separate thread function, which logs the max-sample found during each second (approx).
It signals 'main' that the max-value is ready via a flag global.... while also posting the max-value in a data global.
Below is the code and the output. 'main' gets signaled properly via the flag global, but the data-value doesn't arrive - it's usually 0, but about 20% of the time some odd non-0 value.
OUTPUT SAMPLE ('sampler max_found' is correct, but 'main' gets mostly 0's or odd#):
sampler max_found: 2688
main max_found: 2368
sampler max_found: 2704
main max_found: 0
sampler max_found: 2672
main max_found: 0
sampler max_found: 2688
main max_found: 2128
I'm runinng an ADC-sampler in a separate thread function, which logs the max-sample found during each second (approx).
It signals 'main' that the max-value is ready via a flag global.... while also posting the max-value in a data global.
Below is the code and the output. 'main' gets signaled properly via the flag global, but the data-value doesn't arrive - it's usually 0, but about 20% of the time some odd non-0 value.
import machine import _thread ################################################ # Variables global readyFlag readyFlag = False global max_found max_found = 0 ################################################ # Functions def sampler_thread(): # Function that will be launched as a separate thread. global readyFlag global max_found adc1 = machine.ADC(26) # Start an ADC while True: max_found = 0 # Init to smallest possible value before sampling-loop cnt = 20000 # Init loop-cntr while cnt > 0: # Loop until counter=0 cnt -= 1 sample = adc1.read_u16() # Get next sample if sample > max_found: # If >max-found, set it to max-found max_found = sample print("sampler max_found:", max_found) readyFlag = True # Tell the 'main' thread that max_found is ready. ############################################## # Main _thread.start_new_thread(sampler_thread, ()) while True: if readyFlag: print("main max_found:",max_found) readyFlag = False**********************
OUTPUT SAMPLE ('sampler max_found' is correct, but 'main' gets mostly 0's or odd#):
sampler max_found: 2688
main max_found: 2368
sampler max_found: 2704
main max_found: 0
sampler max_found: 2672
main max_found: 0
sampler max_found: 2688
main max_found: 2128