Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
275 johboh 1
/*********************************************************************
2
 *
3
 *   Functions for controlling blinds
4
 *
5
 *********************************************************************
6
 * FileName:        $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canTemp/Source/blinds.c $
7
 * Last changed:    $LastChangedDate: 2007-03-03 19:07:14 +0100 (Sat, 03 Mar 2007) $
8
 * By:              $LastChangedBy: johboh $
9
 * Revision:        $Revision: 353 $
10
 ********************************************************************/
11
#include <blinds.h>
12
 
13
#ifdef USE_BLINDS
14
 
347 johboh 15
static WORD timerVal = 50536;
16
static WORD turnOffIO = 0;
353 johboh 17
static BYTE currentPrecent = 0;
347 johboh 18
static BYTE dutyOffCounter = 0;
275 johboh 19
 
20
/*
21
*   Function: blindsInit
22
*
23
*   Input:  none.
24
*   Output: none.
25
*   Pre-conditions: none
26
*   Affects: none.
27
*   Depends: none.
28
*/
29
void blindsInit()
30
{
31
    // setup timer one on 0.5ms.
32
    // 16 bit write, system clock, prescale 2 bit, oscillator off, 
33
    T1CON = 0b11000001;
353 johboh 34
    TMR1H=(BYTE)((timerVal&0xFF00)>>8);
277 johboh 35
    TMR1L=(timerVal&0xFF);
275 johboh 36
    PIR1bits.TMR1IF = 0;
37
    PIE1bits.TMR1IE = 1;
353 johboh 38
    IPR1bits.TMR1IP = 1; // high prior
275 johboh 39
}
40
 
41
/*
339 johboh 42
*   Function: blindsGetAngle
43
*
44
*   Input:  none.
45
*   Output: angle.
46
*   Pre-conditions: none
47
*   Affects: none.
48
*   Depends: none.
49
*/
50
BYTE blindsGetPrecent()
51
{
52
    return currentPrecent;
53
}
54
 
55
 
56
/*
276 johboh 57
*   Function: blindsTurn
275 johboh 58
*
277 johboh 59
*   Input:  Angle to turn to.
275 johboh 60
*   Output: none.
61
*   Pre-conditions: none
62
*   Affects: none.
63
*   Depends: none.
64
*/
339 johboh 65
void blindsTurn(BYTE precent)
275 johboh 66
{
353 johboh 67
 
277 johboh 68
    // 65536-TIME/0,0000001
69
    // -90 0.5 ms = 60536 (5000)
70
    // 0   1.5 ms = 50536 (15000)
71
    // 90  2.5 ms = 40536 (25000)
275 johboh 72
 
339 johboh 73
    BLINDS0P_IO=1;
74
    turnOffIO = IO_TIMEOUT;
75
 
347 johboh 76
    currentPrecent = precent;
77
    if (precent>100) { currentPrecent = 100; }
78
    if (precent<0)   { currentPrecent =   0; }
79
    dutyOffCounter = 0;
339 johboh 80
 
353 johboh 81
    timerVal=60536-(unsigned int)((90+(-1.05*(unsigned int)currentPrecent+60))*111.111);
82
 
275 johboh 83
}
84
 
276 johboh 85
 
275 johboh 86
/*
276 johboh 87
*   Function: blindsISR
275 johboh 88
*
276 johboh 89
*   Input:  none.
275 johboh 90
*   Output: none.
91
*   Pre-conditions: none
92
*   Affects: none.
93
*   Depends: none.
94
*/
95
void blindsISR(void)
96
{
97
    if (PIR1bits.TMR1IF == 1 && PIE1bits.TMR1IE == 1)
98
    {
353 johboh 99
 
347 johboh 100
        WORD timerValBuffer = timerVal;
353 johboh 101
 
347 johboh 102
        dutyOffCounter++;
275 johboh 103
 
347 johboh 104
        if (BLINDS0_IO==0 && dutyOffCounter>4)
105
        {
106
            BLINDS0_IO=1;
107
            dutyOffCounter=0;  
108
        }
109
        else if (BLINDS0_IO==0 && dutyOffCounter<=4)
110
        {
111
            timerValBuffer = DUTY_OFF_DELAY;
112
        }
113
        else if (BLINDS0_IO==1)
114
        {
115
            BLINDS0_IO=0;
116
        }
353 johboh 117
 
118
        TMR1H=(BYTE)((timerValBuffer&0xFF00)>>8);
347 johboh 119
        TMR1L=(timerValBuffer&0xFF);
120
 
353 johboh 121
 
339 johboh 122
        if (turnOffIO--<1)
123
        {
124
            BLINDS0P_IO=0;
125
        }
353 johboh 126
 
339 johboh 127
 
275 johboh 128
        PIR1bits.TMR1IF = 0;
129
    }
130
}
131
 
132
#endif