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
// Odesle nulu nebo jednicku podle nejnizsiho bitu predanych dat
19
// Nula je posloupnost LH a jednicka je HL
20
//
21
void odeslat_bit(int8 data)
22
{
23
   output_bit(VYSILAC,bit_test(data,0));
24
   delay_us(IMPULS);
25
   output_bit(VYSILAC,!bit_test(data,0));
26
   delay_us(IMPULS);
27
}
28
 
29
 
30
// Odelse ramec o 4 bitech
31
// Datovy ramec zacina 11, synchronizacni ramec zacina 10
32
//
33
void odeslat_nibble(int1 datovy, int8 data)
34
{
35
   int i;
36
 
37
   delay_ms(3);            // klidovy stav na lince
38
 
39
   odeslat_bit(1);         // start bit
40
   odeslat_bit(datovy);
41
 
42
   for (i=5; --i!=0; )     // datove bity
43
   {
44
      odeslat_bit(data);
45
   }
46
 
47
   output_low(VYSILAC);    // klidovy stav
48
}
49
 
50
 
51
void odeslat_paket(int8 kanal, data)
52
{
53
   int8 suma;
54
 
55
   suma = kanal+data;
56
   odeslat_nibble(0,0b1111);  // Synchronizace
57
   odeslat_nibble(1,kanal);   // Identifikace osy
58
   odeslat_nibble(1,data);    // Hodnota osy
59
   odeslat_nibble(1,suma);    // Kontrolni soucet
60
 
61
   delay_ms(10);              // cas pro prijimac aby mohl zpracovat data
62
                              // mozno nahradit vysilanim jednicek
63
}
64
 
65
 
66
int stredX, stredY, x, y;
67
 
68
void kalibrace()
69
{
70
int8 min_x;
71
int8 max_x;
72
int8 min_y;
73
int8 max_y;
74
int8 sred_x;
75
int8 sred_y;
76
int8 adc;
77
   min_x=max_x=min_y=max_y=sred_x=sred_y=128;
78
 
79
   printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");
80
znovu:
81
   if (TTL1 || TTL2)
82
   {
83
   set_adc_channel(AD_OSA_X);
84
   delay_us(10);
85
   sred_x=read_adc();
86
   set_adc_channel(AD_OSA_Y);
87
   delay_us(10);
88
   sred_y=read_adc();
89
   };
90
 
91
   //else goto znovu;
92
 
93
   printf(lcd_putc,"\f");
94
   printf(lcd_putc,"Pak ");
95
 
96
   set_adc_channel(AD_OSA_X);
97
   delay_us(10);
98
 
99
   adc=read_adc();
100
 
101
   if (max_x < adc )max_x=adc;
102
   if (min_x > adc )min_x=adc;
103
 
104
   set_adc_channel(AD_OSA_Y);
105
   delay_us(10);
106
 
107
   adc=read_adc();
108
 
109
   if (max_y < adc )max_y=adc;
110
   if (min_y > adc )min_y=adc;
111
 
112
   if (TTL1 || TTL2) return;
113
}
114
 
115
 
116
void main()
117
{
118
 
119
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
120
   setup_adc(ADC_CLOCK_DIV_2);
121
   setup_spi(FALSE);
122
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
123
   setup_timer_1(T1_DISABLED);
124
   setup_timer_2(T2_DISABLED,0,1);
125
 
126
   lcd_init();
127
   printf(lcd_putc,"\fAhoj!");
128
   delay_ms(300);
129
 
130
   while(true)
131
   {
132
      set_adc_channel(AD_OSA_X);
133
      lcd_gotoxy(1,1);
134
      x=read_adc() >> 4;
135
      printf(lcd_putc,"X: %D      ", x);
136
      set_adc_channel(AD_OSA_Y);
137
      lcd_gotoxy(1,2);
138
      y=read_adc() >> 4;
139
      printf(lcd_putc,"Y: %D      ", y);
140
 
141
      odeslat_paket(OSA_X,x);
142
      odeslat_paket(OSA_Y,y);
143
 
144
   }
145
 
146
}