Guru Meditation Error of type LoadProhibited occurred on core.



  • I'm running a basic all reading a distance from an HC-SR04 ultrasonic sensor, & after a shortish(irregular) amount of time the board crashes with the following message:

    Guru Meditation Error of type Load Prohibited occurred on core  0. Exception was unhandled.                              
    Register dump:                                                                                                          
    PC      : 0x400869c6  PS      : 0x00060037  A0      : 0x80085b58  A1      : 0x3ff81c50                                  
    A2      : 0x3ff81cac  A3      : 0x3ff81c70  A4      : 0x00000020  A5      : 0x3ffc397c                                  
    A6      : 0x00000005  A7      : 0x3ffae010  A8      : 0xe67ec000  A9      : 0x3ffb6db8                                  
    A10     : 0x3ff81cac  A11     : 0x3ffc3a88  A12     : 0x3ffb6db8  A13     : 0x3ffae020                                  
    A14     : 0x3ffae040  A15     : 0x3ffae6c0  SAR     : 0x0000001f  EXCCAUSE: 0x0000001c                                  
    EXCVADDR: 0xe67ec004  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000                                  
                                                                                                                            
    Backtrace: 0x400869c6:0x3ff81c50   
    

    My code is based on this: https://github.com/mithru/MicroPython-Examples/blob/master/08.Sensors/HC-SR04/ultrasonic.py

    Anyone have any idea what this means & what can be done about it?



  • @tobru From memory I think it was a 10k resister - check the spec sheet for the HC-SR04. I probably just attached it straight onto the expansion board, maybe via a breadboard - I can't remember sorry.



  • @tobz Thanks a lot for sharing the code. How did you connect the sensor to the board? You mentioned something about a resistor you had to use?



  • @RobTuDelft Here's the code I was using for the HC-SR04.
    I hope it makes sense & works for you.

    import machine
    import time
    import math
    from machine import Timer
    
    class Ultrasonic:
        def __init__(self, name, trigPin, echoPin, delay = 60):
    
            self.name = name
            self.triggerPin = trigPin
            self.echoPin = echoPin
            self.delay = delay
    
            self.last_distance = 0
    
            # Init trigger pin (out)
            self.trigger = machine.Pin(self.triggerPin)
            self.trigger.init(machine.Pin.OUT, None)
            self.trigger.value(False)
    
            # Init echo pin (in)
            self.echo = machine.Pin(self.echoPin)
            self.echo.init(machine.Pin.IN)
    
        def distance_in_inches(self):
            return (self.distance_in_cm() * 0.3937)
    
        def distance_in_cm(self):
            start = 0
            end = 0
    
            # Create a microseconds counter.
            micros = Timer.Chrono()
            micros.reset()
            micros.start()
    
            # Send a 10us pulse.
            self.trigger.value(True)
            Timer.sleep_us(10)
            self.trigger.value(False)
    
            # Wait 'till whe pulse starts.
            while self.echo.value() == 0:
                start = micros.read_us()
    
            # Wait 'till the pulse is gone.
            while self.echo.value() == 1:
                end = micros.read_us()
    
            # Deinit the microseconds counter
            micros.stop()
    
            # Calc the duration of the recieved pulse, divide the result by
            # 2 (round-trip) and divide it by 29 (the speed of sound is
            # 340 m/s and that is 29 us/cm).
            dist_in_cm = ((end - start) / 2) / 29
    
            return dist_in_cm
    
        def start(self, threshold, callback):
            print('Start reading Ultrasonic Sensor')
            while True:
                # get the current distance
                distance = self.distance_in_cm()
    
                # if the distance between this reading and the previous one
                # and the difference is greater than the threshold then
                # run the callback method
                if (math.fabs(self.last_distance - distance) > threshold):
                    print("%s value: %s -> %s at %s" % (self.name, self.last_distance, distance, time.time()))
    
                    if callback(self.name, distance) is True:
                        # set this readding as the previous reading for next run
                        self.last_distance = distance
    
                else:
                    print("%s value: %s <-> %s at %s" % (self.name, self.last_distance, distance, time.time()))
    
                time.sleep(self.delay)
    

    useage:

    // init sensor, reading every 60 seconds
    sensor = Ultrasonic('some-name', triggerPin, echoPin, 60)
    sensor.start(changeThreshold, callbackMethod)
    


  • @RobTuDelft sorry - I've been head down in work - will hopefully get some time later this week & post my code if you're still interested in it.



  • @tobz That's nice, could you share your code perhaps? Got one of these sensors coming in soon and would help to have a starting point.



  • @RobTuDelft yeah the sensor works fine (once I worked out you need a resistor in the circuit - derp). The crash appears to be caused by the urequest library (see https://forum.pycom.io/topic/1061/https-post-using-urequests-py-and-guru-mediation-error).



  • @tobz Did you manage to get the HC-SR04 working after all?



  • @bucknall Cool. I'll follow along with that thread & hopefully that IS my issue and it gets resolved :)



  • @tobz Ah ok, you are using the urequests library? We're looking into this.

    Thanks!



  • I think my issue might actaully be related to this post: https://forum.pycom.io/topic/1061/https-post-using-urequests-py-and-guru-mediation-error

    the urequest class and nothing to do with the ultrasonic sensor.



  • Please be aware that there are also a number of difference between the pyboard and the Pycom devices namely that Pycom doesn't use the pyb library and that a number of the standard classes/methods are different.



  • @tobz Can you please list where in your code that this error occurs?



Pycom on Twitter

Looks like your connection to Pycom Forum was lost, please wait while we try to reconnect.