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
 
92
void kalibrace()
93
{
94
int8 min_x;
95
int8 max_x;
96
int8 min_y;
97
int8 max_y;
98
int8 sred_x;
99
int8 sred_y;
100
int8 adc;
101
   min_x=max_x=min_y=max_y=sred_x=sred_y=128;
102
 
103
   printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");
104
znovu:
105
   if (TTL1 || TTL2)
106
   {
107
   set_adc_channel(AD_OSA_X);
108
   delay_us(10);
109
   sred_x=read_adc();
110
   set_adc_channel(AD_OSA_Y);
111
   delay_us(10);
112
   sred_y=read_adc();
113
   };
114
 
115
   //else goto znovu;
116
 
117
   printf(lcd_putc,"\f");
118
   printf(lcd_putc,"Pak ");
119
 
120
   set_adc_channel(AD_OSA_X);
121
   delay_us(10);
122
 
123
   adc=read_adc();
124
 
125
   if (max_x < adc )max_x=adc;
126
   if (min_x > adc )min_x=adc;
127
 
128
   set_adc_channel(AD_OSA_Y);
129
   delay_us(10);
130
 
131
   adc=read_adc();
132
 
133
   if (max_y < adc )max_y=adc;
134
   if (min_y > adc )min_y=adc;
135
 
136
   if (TTL1 || TTL2) return;
137
}
138
 
139
 
140
void main()
141
{
142
int c=0;
143
 
144
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
145
   setup_adc(ADC_CLOCK_DIV_2);
146
   setup_spi(FALSE);
147
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
148
   setup_timer_1(T1_DISABLED);
149
   setup_timer_2(T2_DISABLED,0,1);
150
 
151
   lcd_init();
152
 
153
 /*  while (c<=16)
154
   {
155
   lcd_gotoxy(c,1);
156
   printf(lcd_putc,"_");
157
   delay_ms(50);
158
   printf(lcd_putc,"\f");
159
   c++;
160
   }
161
 
162
   printf(lcd_putc,"\fAhoj!");
163
   delay_ms(1500);*/
164
 
165
   printf(lcd_putc,"\f");
166
 
167
   lcd_gotoxy(7,2);
168
   printf(lcd_putc,"vysilam");
169
 
170
   while(true)
171
   {
172
      set_adc_channel(AD_OSA_X);
173
      lcd_gotoxy(1,1);
174
      x=read_adc() >> 4;
175
      printf(lcd_putc,"X: %D      ", x);
176
      set_adc_channel(AD_OSA_Y);
177
      lcd_gotoxy(1,2);
178
      y=read_adc() >> 4;
179
      printf(lcd_putc,"Y: %D      ", y);
180
 
181
////odeslat_nibble(x);       // Zopakovana hodnota osy pro kontrolu
182
 
183
 
184
/*      output_high(PIN_C1);
185
      output_low(PIN_C2);
186
      delay_ms(100);
187
      output_low(PIN_C1);
188
      output_high(PIN_C2);
189
      delay_ms(100);*/
190
 
191
      output_high(PIN_C4);       // ladici impuls pro synchronizaci mereni
192
      output_high(PIN_C6);
193
      delay_ms(1);
194
      output_low(PIN_C4);
195
 
196
      odesli(x,OSA_X);
197
      odesli(y,OSA_Y);
198
 
199
      output_low(PIN_C6);       // ladici impuls pro synchronizaci mereni
200
   }
201
 
202
}