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
      data>>=1;
46
   }
47
 
48
   output_low(VYSILAC);    // klidovy stav
49
}
50
 
51
 
52
void odeslat_paket(int8 kanal, data)
53
{
54
   int8 suma;
55
 
56
   suma = kanal+data;
57
   odeslat_nibble(0,0b1111);  // Synchronizace
58
   odeslat_nibble(1,kanal);   // Identifikace osy
59
   odeslat_nibble(1,data);    // Hodnota osy
60
   odeslat_nibble(1,suma);    // Kontrolni soucet
61
 
62
   delay_ms(10);              // cas pro prijimac aby mohl zpracovat data
63
                              // mozno nahradit vysilanim jednicek
64
}
65
 
66
 
67
int stredX, stredY, x, y;
68
 
69
void kalibrace()
70
{
71
int8 min_x;
72
int8 max_x;
73
int8 min_y;
74
int8 max_y;
75
int8 sred_x;
76
int8 sred_y;
77
int8 adc;
78
   min_x=max_x=min_y=max_y=sred_x=sred_y=128;
79
 
80
   printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");
81
znovu:
82
   if (TTL1 || TTL2)
83
   {
84
   set_adc_channel(AD_OSA_X);
85
   delay_us(10);
86
   sred_x=read_adc();
87
   set_adc_channel(AD_OSA_Y);
88
   delay_us(10);
89
   sred_y=read_adc();
90
   };
91
 
92
   //else goto znovu;
93
 
94
   printf(lcd_putc,"\f");
95
   printf(lcd_putc,"Pak ");
96
 
97
   set_adc_channel(AD_OSA_X);
98
   delay_us(10);
99
 
100
   adc=read_adc();
101
 
102
   if (max_x < adc )max_x=adc;
103
   if (min_x > adc )min_x=adc;
104
 
105
   set_adc_channel(AD_OSA_Y);
106
   delay_us(10);
107
 
108
   adc=read_adc();
109
 
110
   if (max_y < adc )max_y=adc;
111
   if (min_y > adc )min_y=adc;
112
 
113
   if (TTL1 || TTL2) return;
114
}
115
 
116
 
117
void main()
118
{
119
 
120
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
121
   setup_adc(ADC_CLOCK_DIV_2);
122
   setup_spi(FALSE);
123
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
124
   setup_timer_1(T1_DISABLED);
125
   setup_timer_2(T2_DISABLED,0,1);
126
 
127
   lcd_init();
128
   printf(lcd_putc,"\fAhoj!");
129
   delay_ms(300);
130
 
131
   while(true)
132
   {
133
      set_adc_channel(AD_OSA_X);
134
      lcd_gotoxy(1,1);
135
      x=read_adc() >> 4;
136
      printf(lcd_putc,"X: %D      ", x);
137
      set_adc_channel(AD_OSA_Y);
138
      lcd_gotoxy(1,2);
139
      y=read_adc() >> 4;
140
      printf(lcd_putc,"Y: %D      ", y);
141
 
142
      odeslat_paket(OSA_X,x);
143
      odeslat_paket(OSA_Y,y);
144
 
145
   }
146
 
147
}