see below

2010/3/27 Rob Conway <rjcon...@bigpond.com>

>  Pascal,  Thanks I understand the concept of starting another process to
> handle the relay and duration.
>
>
> I do have a couple of questions:
>
> 1)  I think though that whilst RTC is greater than the ON time the "main:"
> will always be writing the duration to UserI thus never alowing
> loop_till_end1: to decrement the value to 0 again ?
>
the SUB.W instruction set Z flag to 0 when substraction result is not null
else set to 1.
the BNE instruction do a branch if Z flag==0.
so the affectation of useri is only done precisely at RTC==usern not before,
not after.


> 2) I have tried to read the manual again with regards to stack pointer and
> why AIS -4, however I am still lost on this one.
>
to restore the stack pointer at previous position, you have to pop every
byte/word/longs pushed before.
the code pushed 2 longs before sub.l
the sub.l pop the two needed operands, calculate and push back the result
long.
after such operation, whe have to pop.l the result to a user variable to
free the stack and store the result, however here we don't need the use the
result, only the flags resulting from the opreation are important. So to
avoid consuming a user variable to pop the result, we simply adjust stack
pointer with ais -4.



> 3) I assume AIX -4 is required in my first example as the CMP.L uses the
> stack for calculations and the result of the compare is at position -5 on
> the stack ?
>
AIS not AIX (my bad)
SP (stack pointer) is always pointing to next avail location.
SP -4 is the position of the last long in the stack: use 4 bytes from SP-4
to and including  SP-1.
CMP is a SUB that does not write result back, only flags updated.


>
> rob
>
>  -----Original Message-----
> *From:* Pascal Baerten [mailto:pascal.baer...@gmail.com]
> *Sent:* Saturday, March 27, 2010 9:18 PM
> *To:* OWFS (One-wire file system) discussion and help
> *Subject:* Re: [Owfs-developers] BAE0910 AE Timed output code
>
> here is the sample: I found this approach easier to have better control
> from the master.
> Don't hesitate for any questions.
>
> // AutomationEngine assembly source.
>> // Used for Temperature and Light Control of Reef Tank
>> // March 2010 by Rob Conway
>> //
>> // BAE0910 Direct Connected to Futurlec 4 channel opto Realy Board
>> // Channel 0 & 1 Relay has been replaced with a Mosfet IRF540
>> //
>> // RELAY Ch#   BAE0910 Ch#   Ribbon Cable    USAGE
>> // Output 0    PWM1          (Brown)         Cooling Fan
>> // Output 1    PWM2         (Orange)        Heater
>> // Output 2    PIO           (Yellow)        Main Light
>> // Output 3    OUT           (Blue)          Refugium Light
>> //
>> //
>> // VARIABLES:
>> //  ON / OFF TIMES  (Seconds)
>> //   L_UserN  ON time for Relay1   Seconds since Midnight
>> //   W_UserL  Duration for PIO       Duration for relay ON time, seconds
>> //   W_USERI  decrementing variale with time remaining until realy1 is
>> turned OFF
>>
>>
>> #include "bae0910.inc"
>>
>> #eeprom 0, 0      // start_page, end_page
>> #org  $00      // Code generated at address specified.
>>
>> begin:
>>     NOP     // Allow auto start of process #0 on poweron, first byte of
>> page0 should be a NOP
>> init:
>>
>>     //your initialisation code here
>>     SET.B    B_TPM1C,4    // Pre Scaler (1us resolution)
>>     SET.W    W_PERIOD1,10000    // 10,000us = 100Hz
>>     SET.W    W_DUTY1,10001    // Set PWM1 Output OFF
>>     START 1, relay1process   // this independant process will monitor
>> USERI for action
>> main:
>>     PUSH.L    L_RTC
>>     PUSH.L  L_USERN
>>     SUB.L             //compare current time with sheduled time
>>     AIS    -4             //restore stack
>>     BNE notnow1         // if strictly equal, start cycle (may be true
>> twice within the same second, but this is harmless)
>>     SET.W  W_USERI, W_USERL // set duration to decounting variable USERI,
>>                             // this will invite process1 to turn on for
>> duration
>>                             // this approach allows master check remaining
>> time
>>                             // and also start/interrupt actions.
>> notnow1:
>>     //similar code for relay2
>>
>>
>>     WAIT    10    //not too long to ensure that each seconds are seen by
>> the loop
>>     JMP main
>>
>> relay1process: // asynchronous process for relay1 control, the input is
>> USERI variable representing duration in seconds
>>     SET.W    W_DUTY1,10001  // turn off relay1
>>     WAIT    1
>>     CMP.W    W_USERI,0
>>     BEQ        relay1process
>>     CLR.W     W_DUTY1 // turn on relay1
>> loop_till_end1:
>>     WAIT     16          //wait one second
>>     DEC.W    W_USERI
>>     BGR        loop_till_end1  // master may set directly to 0 to stop
>> relay action, in this case USERI may become negative
>>     CLR.W    W_USERI // set to zero in case of -1
>>     BRA        relay1process
>>
>
>
>
>
> 2010/3/27 Rob Conway <rjcon...@bigpond.com>
>
>>  I thought it would be easier having the ON time in seconds since
>> midnight so I can compare direct to RTC.
>> The length of time the output is ON needs to be able to vary between 1
>> minutes to 12 hrs.  I know I could hard code the ON / OFF time into the
>> stack however whilst I still have user variables I may as well use them.
>>
>>   -----Original Message-----
>> *From:* Pascal Baerten [mailto:pascal.baer...@gmail.com]
>> *Sent:* Saturday, March 27, 2010 6:59 PM
>> *To:* OWFS (One-wire file system) discussion and help
>> *Subject:* Re: [Owfs-developers] BAE0910 AE Timed output code
>>
>> Hi Rob,
>> Sorry, I was busy to unexpeted work during this week and worked very late
>> everyday.
>> You have to use the firmware I sent earlier.
>>
>> I would create a main process that evaluate start conditions and initate
>> sub process that handle the action until duration.
>>
>> some comments in your code below.
>>
>> I will write you a sample skeleton later today.
>>
>> Pascal
>>
>>
>>
>> 2010/3/27 Rob Conway <rjcon...@bigpond.com>
>>
>>>  Hi,
>>>
>>> I was hoping to get some feedback on the AE engine and creating some
>>> simple output timers based upon energizing outputs based on time of day.  I
>>> can already set the RTC from the HOST and it resets at midnight, so the RTC
>>> represents seconds since midnight.
>>>
>>> This is what I am trying to achieve on the stack
>>>
>>>     IF RTC > ON_TIME and RTC <(ON-TIME+DURATION)
>>>     then DUTY1,0
>>>     else DUTY1,10001
>>>
>>> This is some rough code I thought I could use however not tested, I
>>> wanted to know if I was on the correct track and if the stack can handle
>>> maths results that go negative.
>>>
>> yes,
>> for Byte, values above 127 are considered negative
>> for Word, values above 32767 are considered negative
>> for Long, values above 2147483647 are considered negative
>>
>>
>>>
>>  //  ON / OFF TIMES  (Seconds)
>>> //   L_UserN  ON time for Relay1   Seconds since Midnight
>>> //   W_UserL  Duration for PIO       Duration for relay ON time, seconds
>>>
>> what's the max duration? ,maybe fit in 255 range or 65535  to use B or W
>> instead variable.
>>
>>>
>>>
>>> relay1_ctl:
>>> CMP.L    L_RTC,L_USERL
>>> BLE        relay1_off
>>>
>>> PUSH.L    L_RTC          //Get time since midnight
>>> PUSH.L   L_USERN      //  get user ON time in seconds since midnight
>>> SUB                             // Find out how many seconds difference
>>> between RTC and on time
>>> CMP.W     @-1, W_USERL    // See if difference is less than Duration, if
>>> so the output should be ON
>>>
>> as operands are L_ types, use CMP.L, also, @-4 needed for the L_ type who
>> require 4 bytes
>> important to retore stack pointer to inital value  after stack operation
>> AIX -4
>>
>>>  BGR        relay_off
>>> BLE         relay_on
>>> END
>>>
>>> relay1_on
>>> SET.W    W_DUTY1,0
>>> BRA Relay2_ctl
>>>
>>> Relay1_off
>>>  SET.W    W_DUTY1,10001
>>>  BRA Relay2_ctl
>>>
>>>
>>>  relay2_ctl:
>>> ~ code similar to relay 1
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Download Intel&#174; Parallel Studio Eval
>>> Try the new software tools for yourself. Speed compiling, find bugs
>>> proactively, and fine-tune applications for parallel performance.
>>> See why Intel Parallel Studio got high marks during beta.
>>> http://p.sf.net/sfu/intel-sw-dev
>>> _______________________________________________
>>> Owfs-developers mailing list
>>> Owfs-developers@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/owfs-developers
>>>
>>>
>>
>>
>> --
>> Pascal
>> www.brain4home.eu
>>
>> No virus found in this incoming message.
>> Checked by AVG - www.avg.com
>> Version: 9.0.791 / Virus Database: 271.1.1/2772 - Release Date: 03/27/10
>> 06:33:00
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Download Intel&#174; Parallel Studio Eval
>> Try the new software tools for yourself. Speed compiling, find bugs
>> proactively, and fine-tune applications for parallel performance.
>> See why Intel Parallel Studio got high marks during beta.
>> http://p.sf.net/sfu/intel-sw-dev
>> _______________________________________________
>> Owfs-developers mailing list
>> Owfs-developers@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/owfs-developers
>>
>>
>
>
> --
> Pascal
> www.brain4home.eu
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 9.0.791 / Virus Database: 271.1.1/2772 - Release Date: 03/27/10
> 06:33:00
>
>
>
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> Owfs-developers mailing list
> Owfs-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/owfs-developers
>
>


-- 
Pascal
www.brain4home.eu
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to