Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
6 kaklik 1
// Vysilac
2
 
3
#include "main.h"
4
#include "..\common.h"
5
 
6
#DEFINE  LCD_RS         PIN_B1      // rizeni registru LCD displeje
7
#DEFINE  LCD_E          PIN_B2      // enable LCD displeje
8
#DEFINE  LCD_DATA_LSB   PIN_B4      // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou)
9
#INCLUDE "MYLCD.C"
10
 
11
#DEFINE  VYSILAC        PIN_C3
12
#DEFINE  AD_OSA_X          0           // adresa A/D prevodniku pro osu X
13
#DEFINE  AD_OSA_Y          1           // adresa A/D prevodniku pro osu Y
14
#DEFINE  TTL1           PIN_B4
15
#DEFINE  TTL2           PIN_B3
16
 
17
 
18
int stredX, stredY, x, y;
19
 
20
void nula()
21
{
22
   output_high(VYSILAC);
23
   delay_us(IMPULS);
24
   output_low(VYSILAC);
25
   delay_us(IMPULS);
26
}
27
 
28
void jedna()
29
{
30
   output_low(VYSILAC);
31
   delay_us(IMPULS);
32
   output_high(VYSILAC);
33
   delay_us(IMPULS);
34
}
35
 
36
void odeslat_nibble(int8 data)
37
{
38
   int i;
39
 
40
   delay_ms(1);            // klidovy stav na lince
41
 
42
   nula();                 // start bit
43
 
44
   for (i=0; i<4; i++)     // datove bity
45
   {
46
      if (bit_test(data,i)) jedna(); else nula();
47
   }
48
 
49
   output_low(VYSILAC);    // klidovy stav
50
}
51
 
52
void odeslat_nibble2 (int8 kodeslani)
53
{
54
   int i;
55
 
56
   for  (i=0;i<=3;i++)
57
   {
58
      if (1==bit_test(kodeslani,i))
59
      {
60
         output_high(VYSILAC);
61
         delay_us(2*IMPULS);          // X pri 1: |--|___
62
         output_low(VYSILAC);
63
         delay_us(3*IMPULS);
64
      }
65
      else
66
      {
67
         output_high(VYSILAC);
68
         delay_us(IMPULS);           // X pri 0: |-|__|-|_
69
         output_low(VYSILAC);
70
 
71
         delay_us(2*IMPULS);
72
 
73
         output_high(VYSILAC);
74
         delay_us(IMPULS);
75
         output_low(VYSILAC);
76
         delay_us(IMPULS);
77
     };
78
   }
79
}
80
 
81
 
82
void odesli (int8 neco,adresa)
83
{
84
  odeslat_nibble(0b1111);     // Synchronizace
85
  odeslat_nibble(adresa);     // Identifikace osy
86
  odeslat_nibble(neco);       // Hodnota osy
87
  odeslat_nibble(neco);       // Zopakovana hodnota osy pro kontrolu
88
}
89
 
90
 
91
void kalibrace()
92
{
93
int8 min_x;
94
int8 max_x;
95
int8 min_y;
96
int8 max_y;
97
int8 sred_x;
98
int8 sred_y;
99
int8 adc;
100
   min_x=max_x=min_y=max_y=sred_x=sred_y=128;
101
 
102
   printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");
103
znovu:
104
   if (TTL1 || TTL2)
105
   {
106
   set_adc_channel(AD_OSA_X);
107
   delay_us(10);
108
   sred_x=read_adc();
109
   set_adc_channel(AD_OSA_Y);
110
   delay_us(10);
111
   sred_y=read_adc();
112
   };
113
 
114
   //else goto znovu;
115
 
116
   printf(lcd_putc,"\f");
117
   printf(lcd_putc,"Pak ");
118
 
119
   set_adc_channel(AD_OSA_X);
120
   delay_us(10);
121
 
122
   adc=read_adc();
123
 
124
   if (max_x < adc )max_x=adc;
125
   if (min_x > adc )min_x=adc;
126
 
127
   set_adc_channel(AD_OSA_Y);
128
   delay_us(10);
129
 
130
   adc=read_adc();
131
 
132
   if (max_y < adc )max_y=adc;
133
   if (min_y > adc )min_y=adc;
134
 
135
   if (TTL1 || TTL2) return;
136
}
137
 
138
 
139
void main()
140
{
141
int c=0;
142
 
143
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
144
   setup_adc(ADC_CLOCK_DIV_2);
145
   setup_spi(FALSE);
146
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
147
   setup_timer_1(T1_DISABLED);
148
   setup_timer_2(T2_DISABLED,0,1);
149
 
150
   lcd_init();
151
 
152
 /*  while (c<=16)
153
   {
154
   lcd_gotoxy(c,1);
155
   printf(lcd_putc,"_");
156
   delay_ms(50);
157
   printf(lcd_putc,"\f");
158
   c++;
159
   }
160
 
161
   printf(lcd_putc,"\fAhoj!");
162
   delay_ms(1500);*/
163
 
164
   printf(lcd_putc,"\f");
165
 
166
   lcd_gotoxy(7,2);
167
   printf(lcd_putc,"vysilam");
168
 
169
   while(true)
170
   {
171
      set_adc_channel(AD_OSA_X);
172
      lcd_gotoxy(1,1);
173
      x=read_adc() >> 4;
174
      printf(lcd_putc,"X: %D      ", x);
175
      set_adc_channel(AD_OSA_Y);
176
      lcd_gotoxy(1,2);
177
      y=read_adc() >> 4;
178
      printf(lcd_putc,"Y: %D      ", y);
179
 
180
/*      output_high(PIN_C1);
181
      output_low(PIN_C2);
182
      delay_ms(100);
183
      output_low(PIN_C1);
184
      output_high(PIN_C2);
185
      delay_ms(100);*/
186
 
187
/*      output_high(PIN_C4);       // ladici impuls pro synchronizaci mereni
188
      output_high(PIN_C6);
189
      delay_ms(1);
190
      output_low(PIN_C4);
191
*/
192
      odesli(x,OSA_X);
193
      odesli(y,OSA_Y);
194
 
195
      output_low(PIN_C6);       // ladici impuls pro synchronizaci mereni
196
   }
197
 
198
}