Shop OBEX P1 Docs P2 Docs Learn Events
Prop Loader — Parallax Forums

Prop Loader

HumanoidoHumanoido Posts: 5,770
edited 2011-09-02 16:14 in Propeller 1
I'm trying to get this simple loader to work. It only loads the first prop, and flashes the LED on the first prop. I put the LED on pin 15 and followed Chip's comments in PropellerLoader.spin (see quote below). The schematic is posted here along with comments by Ariba:
http://forums.parallax.com/showthread.php?130422-puzzle-Quine-in-Spin/page2
attachment.php?attachmentid=79429&d=1300527593
Chip Gracey's PropellerLoader.spin object is found here:
http://obex.parallax.com/objects/61/
Chip's comments: This object drives the other Propeller's RESn line, so it is recommended that the other Propeller's BOEn pin be tied high and that its RESn pin be pulled to VSS with a 1M resistor to keep it on ice until showtime.
OBJ loader : "PropellerLoader"                                                                            
PUB LoadPropeller
  dira[15] := 1                                 'LED on                      
  outa[15] := 1
  waitcnt(clkfreq + cnt)                        'wait a second  
  loader.Connect(0, 1, 2, 1, loader#LoadRun, 0) 'reproduce code on next Propeller
«1

Comments

  • AribaAriba Posts: 2,690
    edited 2011-03-22 03:39
    Humanoido wrote: »
    Chip's comments: This object drives the other Propeller's RESn line, so it is recommended that the other Propeller's BOEn pin be tied high and that its RESn pin be pulled to VSS with a 1M resistor to keep it on ice until showtime.

    For this circuit the RESn must be high if the previous chip not pull it to low to make a reset, so just use the normal Reset connection: BOEn to VSS and RESn to P0 of the previous chip.

    Andy
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 04:35
    Ariba wrote: »
    For this circuit the RESn must be high if the previous chip not pull it to low to make a reset, so just use the normal Reset connection: BOEn to VSS and RESn to P0 of the previous chip.
    Andy
    I tied BOEn to Vss and no change. Tried it with props 1,2,3 and with 2,3. No change. RESn connected as shown in the schematic, Prop1 to Prop2, Prop2 to Prop3, Prop3 to Prop1.
  • AribaAriba Posts: 2,690
    edited 2011-03-22 07:25
    Humanoido

    I've tried it with 2 Propellers (first programs the second, no loop) and found that the PropellerLoader works not with the internal 12MHz RCfast oscillator. But if you connect a crystal to every Propeller chip and set PLL mode x 4 or higher - it seems to work!

    Andy
    CON  _clkmode  = xtal1 + pll8x
         _xinfreq  = 5_000_000
    
    OBJ loader : "PropellerLoader"
                                                          
    PUB LoadPropeller
      dira[15] := 1
      outa[15] := 1
      waitcnt(clkfreq+cnt)                                                    
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
    
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 07:38
    I reduced the circuit to just two props to help troubleshooting.
    Here is the setup:

    Prop1 pin 0 to Prop2 RESn
    Prop2 RESn to 1M resistor to Vss
    Prop1 pin 1 to Prop2 pin 31
    Prop1 pin 2 to Pop2 pin 30
    Prop2 BOEn to Vdd (3.3V)
    LEDs on pin 15 both Props

    run the program
    Prop1 LED lights about 2 seconds and goes out
    Prop2 LED lights on for a fraction of second and out
    OBJ loader : "PropellerLoader"                                                                        
    PUB LoadPropeller
      dira[15] := 1                                 'LED on                      
      outa[15] := 1
      waitcnt(clkfreq + cnt)                        'wait a second
      waitcnt(clkfreq + cnt)                        'wait a second   
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0) 'reproduce code on next Propeller
    
    Why does the second Prop's LED quickly go out?
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 08:00
    Ariba wrote: »
    Humanoido

    I've tried it with 2 Propellers (first programs the second, no loop) and found that the PropellerLoader works not with the internal 12MHz RCfast oscillator. But if you connect a crystal to every Propeller chip and set PLL mode x 4 or higher - it seems to work!

    Andy
    CON  _clkmode  = xtal1 + pll8x
         _xinfreq  = 5_000_000
    
    OBJ loader : "PropellerLoader"
                                                          
    PUB LoadPropeller
      dira[15] := 1
      outa[15] := 1
      waitcnt(clkfreq+cnt)                                                    
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
    
    Thanks! I'll give this a try now..
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 08:11
    It's not working. I think your wiring is different.
    Can you show the new wiring?
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 08:25
    If I add this to the end of the code, the prop 1 LED stays on a longer time and the LED on Prop 2 quickly blinks and goes out. But at least it lights up. It's still not working..

    waitcnt(40_000_000 + cnt)
  • davidsaundersdavidsaunders Posts: 1,559
    edited 2011-03-22 09:27
    This is rather interesting. I am having similar problems in my testing. I hope that a solution is found, as I will be using a very similar setup to start 64 props once I get them.
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 10:02
    This is rather interesting. I am having similar problems in my testing. I hope that a solution is found, as I will be using a very similar setup to start 64 props once I get them.
    A simple program that's not dependent on the extra steps of making a binary file would be very useful.

    I don't know why the timing is not working in the second prop but perhaps the key is in the understanding of the Propeller Loader object.

    I tried adding a crystal to each prop and have the same problem. Prop one loads the program and its LED comes on for a total of approx. 3 seconds and goes out. After the first 2 seconds, Prop 2 has its LED switch on, for less than one second.

    The only reason I can see the LED on at prop 2 is because I added a delay at the end of the code. Take away the delay and LED 2 never lights. Obviously it is not loading or running the code properly in prop 2.
    CON  _clkmode  = xtal1 + pll8x
         _xinfreq  = 5_000_000
    OBJ loader : "PropellerLoader"                                                      
    PUB LoadPropeller
      dira[15] := 1
      outa[15] := 1
      waitcnt(clkfreq+cnt)                                                    
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
          waitcnt(40_000_000 + cnt)
    
    I tried the circuit with and without the 1M resistor from RESn to Vss
    and BOEn to 3.3V and this did not fix the problem.
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 10:12
    Here's a sketch with wiring - prop 1 on the left.
    297 x 227 - 10K
  • Clock LoopClock Loop Posts: 2,069
    edited 2011-03-22 12:07
    The cog that programs the prop, a.k.a the cog that runs the loader object needs to stay running to drive the reset line. Or you need hand that duty off to another cog.

    Humanoido wrote: »
    I don't know why the timing is not working in the second prop but perhaps the key is in the understanding of the Propeller Loader object.

    The only reason I can see the LED on at prop 2 is because I added a delay at the end of the code. Take away the delay and LED 2 never lights. Obviously it is not loading or running the code properly in prop 2.
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
        repeat    
           waitcnt(40_000_000 + cnt)
    
  • DaveJensonDaveJenson Posts: 375
    edited 2011-03-22 13:01
    I have a similar setup where I load a second prop from a master prop. The major difference is that I also drive the second prop clock from the master using Synth by Beau Schwabe.

    I tried the code examples that you are trying here. I was only able to get them to work when I put a repeat forever at the end of the code (to keep the cog alive).
    Without the repeat, I could not see a LED turn on.
    {{
                    LED - Test
    }}
    
    CON
    
      _xinfreq = 5_000_000                      
      _clkmode = xtal1 + pll16x
    
      Prop2Clock    = 6              'Prop2 pin 28 (X1)
      Prop2Rx       = 7              'Prop2 pin 30
      Prop2Tx       = 8              'Prop2 pin 31
      Prop2RES      = 9              'Prop2 pin 7 (RES)
    
      Freq          = 5_000_000  '5mhz
    
    OBJ
      loader    : "PropellerLoader"
      ClockGen  : "Synth"                         
    
    
    PUB Main | tChar, rChar, i
    
      ClockGen.Synth("A",Prop2Clock, Freq)    'Generate 5mhz       
      loader.Connect(Prop2RES, Prop2Tx, Prop2Rx, 1, loader#LoadRun, 0)
    
    
        'set outputs
        dira~~
        outa[3]~~           'high
    
        outa[23]~~           'high
    
      repeat
        repeat tChar from 0 to 5
          Blink(tChar)
        repeat tChar from 11 to 31
          Blink(tChar)
        waitcnt(clkfreq/20 + cnt)
    
    
    PRI Blink (LEDPin)
                       
            !outa[LEDPin]
            waitcnt(clkfreq/20 + cnt)
    
    DAT
    {{}}      
    
  • AribaAriba Posts: 2,690
    edited 2011-03-22 14:22
    As I have written in post #2, you need to change the reset circuit.
    What happens now is that the first Prop loads the code into the second, then terminates its code and tri-states all pins. So with a 1M pulldown the second Propeller resets immediatly.
    Either you wire the 1M to 3.3V or you put a repeat at the end of the code, so the Propeller keeps its outputs, or you use the normal reset circuit with BOEn to VSS and no resistor at RESn.
    Other than the reset you have the same wireing as I had at my test. The LED of the second goes on if the LED of the first goes off, and stays on for 2..3 seconds. This means for me: The second Prop was loaded with the correct code and started.

    Andy
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-22 15:07
    Thank you, the comments are very helpful.
    To load up the code, the propeller crystals are not needed.
    With the 5mhz crystal, it runs at 14ma and with the rc timing only 4ma.
    For those of you putting together large numbers of props,
    it's possible to adjust the power draw.
    Keeping the Cog alive will maintain 4ma draw using the rc method.
    This code loads and runs the next prop in only 3 seconds.
    The next step is to add another propeller chip and get that working.
  • AribaAriba Posts: 2,690
    edited 2011-03-22 15:30
    Humanoido wrote: »
    To load up the code, the propeller crystals are not needed....

    I was thinking the same before I tried it. And for sure the receiving Propeller don't need a crystal. But the Propeller which sends the code to the next needs more speed than 12 MHz, otherwise the sent pulses are to long to be detected correct by the bootloader in the ROM. So the first Propeller needs a crystal to run with min. 20 MHz. If you want a chain that reloads always the next chip then all Propellers need a crystal.

    Andy
  • davidsaundersdavidsaunders Posts: 1,559
    edited 2011-03-22 16:23
    Ariba:
    And why could not you use each prop to provide a clock for the next, so that the first is clocked off of the crystal and the second of a software clock running in the first, and each additional Prop has its xin hooked to the xout of the one before it? Using a soft clock source, and assuming the first Propeller is running at 80MHz, you could generate a 5MHz clock and still have 10 MIPS to do something else (as long as you code carefully), thus you only lose half of a cog for any number of Propellers (as only the first Prop needs to provide a soft clock).
  • AribaAriba Posts: 2,690
    edited 2011-03-22 16:45
    david
    Yes you can do this as long as the first Propeller is still running after loading the second Propeller. But if the first Prop stops all cogs or goes in a reset then the clock for the second Prop stops. So it depends on the application.
    You can even use the XO pin (connected to the crystal on the first Prop) wired to the XI pin of the next Propeller, you don't need an IO pin for that.

    Andy
  • davidsaundersdavidsaunders Posts: 1,559
    edited 2011-03-22 16:59
    Ariba:
    True. I was thinking about a good clean square wave. And if your system is not designed to reset a Propeller and one resets is not there a more serious issue than the clock source? though I whas thinking of using some code like this in cog 0 (after you have loaded the loader for the next prop into another cog).
    CON
      _clkmode = xtal1 + pll16x
      _xinfreq = 5_000_000
    
    PUB Begin
       coginit(0,@start,0)
    
    DAT
    
    start   org 0
            mov DIRA, #$0000_0001     'Use P1 as the clock out.
    lp0
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            'your code for 4 clock pulses.
            mov OUTA, zone
            'your code for 4 clock pulses.
            mov OUTA, zzero
            jmp lp0         'Keep the clock going.
    zone    long $0000_0001
    zzero   long $0000_0000
    
  • kuronekokuroneko Posts: 3,623
    edited 2011-03-22 17:26
    mov OUTA, zone
            'your code for 12 clock pulses.
            mov OUTA, zzero
            'your code for 12 clock pulses.
            ...
    
    Why don't you use a counter for this? Besides, this will generate a 2.5MHz square wave.
  • AribaAriba Posts: 2,690
    edited 2011-03-22 17:29
    It really depends on the application. Say you have a first Propeller which executes the main code and a second for generating the VGA output. If the second is clocked from the first, every time you load a new code from the IDE into the first Prop the VGA Propeller will loose its clock.

    But for other applications this may be a good solution. You can generate a clock much simpler than your assembly loop, just with the use of a counter:
    ctra := %00100<<26 + CLKOUT_PIN   'NCO mode
      frqa := $4000_0000   '1/4 clockfreq
      dira[CLKOUT_PIN] := 1
    
    You even don't need another cog.

    Andy
  • davidsaundersdavidsaunders Posts: 1,559
    edited 2011-03-22 17:42
    My error, yes that is 2.5MHz (just threw that together in about 1 minute not really thinking). As to using the counter for this, I have only been using the propeller for about one month and thus did not yet know that the counter could be used in this way.
  • kuronekokuroneko Posts: 3,623
    edited 2011-03-22 17:54
    As to using the counter for this, I have only been using the propeller for about one month and thus did not yet know that the counter could be used in this way.
    Fair enough, no harm done :)
  • AribaAriba Posts: 2,690
    edited 2011-03-22 18:38
    I've made a modified version of the original PropellerLoader object, that uses a counter to generate the 1T and 2T pulses. This seems to work also with the internal RCfast oscillator. So we are back to no crystal and the code of the first post, only with the modified PropellerLoader object:
    OBJ loader : "RC_PropellerLoader"                        
                                                          
    PUB LoadPropeller                                     
      dira[15] := 1
      outa[15] := 1
      waitcnt(clkfreq+cnt)                                                    
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
    
    The new Loader object is attached.

    Andy
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-23 06:44
    Ariba wrote: »
    As I have written in post #2, you need to change the reset circuit.
    What happens now is that the first Prop loads the code into the second, then terminates its code and tri-states all pins. So with a 1M pulldown the second Propeller resets immediatly.
    Either you wire the 1M to 3.3V or you put a repeat at the end of the code, so the Propeller keeps its outputs, or you use the normal reset circuit with BOEn to VSS and no resistor at RESn.
    Other than the reset you have the same wiring as I had at my test. The LED of the second goes on if the LED of the first goes off, and stays on for 2..3 seconds. This means for me: The second Prop was loaded with the correct code and started. Andy
    Did you build one of these circuits and did it work? If yes, can you show me the exact circuit diagram and code?
    I tried all these versions and could not get the second prop's LED to light.
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-23 08:04
    Ariba wrote: »
    I've made a modified version of the original PropellerLoader object, that uses a counter to generate the 1T and 2T pulses. This seems to work also with the internal RCfast oscillator. So we are back to no crystal and the code of the first post, only with the modified PropellerLoader object:
    OBJ loader : "RC_PropellerLoader"                        
                                                          
    PUB LoadPropeller                                     
      dira[15] := 1
      outa[15] := 1
      waitcnt(clkfreq+cnt)                                                    
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
    
    The new Loader object is attached.

    Andy
    When I run this, the 1st prop LED comes on for about 2 seconds and goes out.
    The second prop's LED comes on for about 1 second and goes out.
    So is something not working correctly with the timing?
    There are no crystals and both props are wired according the original
    post schematic (in post 1 of this thread). Is anyone having different results?
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-23 08:45
    I ran a lot more tests. It's working now.
    I simply put a timing routine in the code and it responded correctly with both props.
    So one version runs with the crystals and one version without.
    This is with two props. Next, I will try adding more props.
    Very nice Andy. Thank you. Your help with this is greatly appreciated!
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-23 11:46
    ok, so we can connect 2, 3, 4, 5 etc. props together, the first prop will load the program and run it, then load up all the other props at the same time in parallel (by running p0,p1,p2, to resn, p31,p30 from one prop to the next). My question is, how many props will program this way?
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-23 13:44
    Just an update - I have 5 props running at the same time on the small program without crystals, but then discovered the chinese breadboards have open connections and are defective. I don't know if the 5 prop limit is imposed by the breadboard or the number of props. Did anyone try this with more than 5 props? (using the object "RC_PropellerLoader" and the code below)
    OBJ loader : "RC_PropellerLoader"                                                                     
    PUB LoadPropeller                                     
      dira[15] := 1
    repeat  
      outa[15] := 1
      waitcnt(clkfreq+cnt)
      outa[15]:=0                                                      
      loader.Connect(0, 1, 2, 1, loader#LoadRun, 0)
    
  • AribaAriba Posts: 2,690
    edited 2011-03-23 14:03
    Humanoido wrote: »
    When I run this, the 1st prop LED comes on for about 2 seconds and goes out.
    The second prop's LED comes on for about 1 second and goes out.
    So is something not working correctly with the timing?
    I have this also. The second Prop tries to load a third Prop, but there is no third, so the PropellerLoader gets no Acknowledge and aborts the load process. Therefore the LED lights only 1 second. If you have a third Propeller the LED should be on the same time as the first.
    Humanoido wrote:
    ok, so we can connect 2, 3, 4, 5 etc. props together, the first prop will load the program and run it, then load up all the other props at the same time in parallel (by running p0,p1,p2, to resn, p31,p30 from one prop to the next). My question is, how many props will program this way?
    The Loader is made to load one Propeller. You may be able to load more Propellers in parallel, but you should connect only one from P30 to P2. Otherwise there is a short circuit of all the P30s if they not send exactly the same data at the same time (which is unlikely, because of the different RCfast frequencies). This means only one can send the Acks and you don't know if the others have succesfully loaded the code.
    How many can be loaded? I don't know. But many! The limiting factor is the capacity of the parallel P31 pins.

    Andy
  • HumanoidoHumanoido Posts: 5,770
    edited 2011-03-24 03:02
    Ariba wrote: »
    I have this also. The second Prop tries to load a third Prop, but there is no third, so the PropellerLoader gets no Acknowledge and aborts the load process. Therefore the LED lights only 1 second. If you have a third Propeller the LED should be on the same time as the first.
    Andy, I have confirmed this result. Thanks for clarifying how it works.
    Ariba wrote: »
    The Loader is made to load one Propeller. You may be able to load more Propellers in parallel, but you should connect only one from P30 to P2. Otherwise there is a short circuit of all the P30s if they not send exactly the same data at the same time (which is unlikely, because of the different RCfast frequencies). This means only one can send the Acks and you don't know if the others have succesfully loaded the code.
    Andy, thank you. For the new parallel circuit, I have the first prop with P2 connected to the second prop's p30. The remaining props have p30 unconnected. I modified the program to blink LEDs on all props in unison (after one cycling of the loader). If there is any timing difference, I cannot notice it after hours and hours of blinking. All the props appear to be in perfect sync.
    Ariba wrote: »
    How many can be loaded? I don't know. But many! The limiting factor is the capacity of the parallel P31 pins. Andy
    I really wonder what that capacity is! I have a circuit working with a total of five props in parallel. Circuits need to be transferred to some good breadboards to keep adding props. What I like about this system is the simplicity, both in the demonstration code and in the wiring. If the system can handle lots of props (the overall goal), it will be very useful for many apps. I will post the parallel loader circuit schematic and code soon.
Sign In or Register to comment.