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-02-03 16:58:13 +0100 (Sat, 03 Feb 2007) $
8
 * By:              $LastChangedBy: johboh $
9
 * Revision:        $Revision: 282 $
10
 ********************************************************************/
11
#include <blinds.h>
12
 
13
#ifdef USE_BLINDS
14
 
277 johboh 15
static unsigned int timerVal = 50536;
275 johboh 16
 
17
/*
18
*   Function: blindsInit
19
*
20
*   Input:  none.
21
*   Output: none.
22
*   Pre-conditions: none
23
*   Affects: none.
24
*   Depends: none.
25
*/
26
void blindsInit()
27
{
28
    // setup timer one on 0.5ms.
29
    // 16 bit write, system clock, prescale 2 bit, oscillator off, 
30
    T1CON = 0b11000001;
277 johboh 31
    TMR1H=((timerVal&0xFF00)>>8);
32
    TMR1L=(timerVal&0xFF);
275 johboh 33
    PIR1bits.TMR1IF = 0;
34
    PIE1bits.TMR1IE = 1;
35
    IPR1bits.TMR1IP = 1; // high prior?
36
}
37
 
38
/*
276 johboh 39
*   Function: blindsTurn
275 johboh 40
*
277 johboh 41
*   Input:  Angle to turn to.
275 johboh 42
*   Output: none.
43
*   Pre-conditions: none
44
*   Affects: none.
45
*   Depends: none.
46
*/
282 johboh 47
void blindsTurn(signed char angle)
275 johboh 48
{
277 johboh 49
    // 65536-TIME/0,0000001
50
    // -90 0.5 ms = 60536 (5000)
51
    // 0   1.5 ms = 50536 (15000)
52
    // 90  2.5 ms = 40536 (25000)
275 johboh 53
 
277 johboh 54
    if (angle<-90) timerVal=60536;
55
    else if (angle>90) timerVal=40536;
56
    else
57
    {
282 johboh 58
        timerVal=60536-(unsigned int)((90+(signed int)angle)*111.111);
277 johboh 59
    }
275 johboh 60
}
61
 
276 johboh 62
 
275 johboh 63
/*
276 johboh 64
*   Function: blindsISR
275 johboh 65
*
276 johboh 66
*   Input:  none.
275 johboh 67
*   Output: none.
68
*   Pre-conditions: none
69
*   Affects: none.
70
*   Depends: none.
71
*/
72
void blindsISR(void)
73
{
74
    if (PIR1bits.TMR1IF == 1 && PIE1bits.TMR1IE == 1)
75
    {
277 johboh 76
        TMR1H=((timerVal&0xFF00)>>8);
77
        TMR1L=(timerVal&0xFF);
275 johboh 78
 
277 johboh 79
        BLINDS0_IO=~BLINDS0_IO;
275 johboh 80
 
81
        PIR1bits.TMR1IF = 0;
82
    }
83
}
84
 
85
#endif