-=================================================================
2 --= PRACA MAGISTERSKA 2011 =
3 --= =
4 --= Temat: Rozbudowa modelu przenośnika taśmowego - detekcja kolorów oraz =
5 --= komunikacja z komputerem =
6 --= =
7 --= =
8 --= inż. K. Bargieł Promotor: Konsultant: =
9 --= inż. K. Cirocki dr inż. K. M. Noga mgr inż. R. Sokół =
10 -================================================================
11 --===============================================================
12 --= Program pracy przenośnika taśmowego umożliwiający wykrywanie wysokości =
13 --= transportowanego elementu w trybie pracy inżynierskiej oraz detekcje kolorów =
14 --= Czerwonego, Zielonego oraz Niebieskiego działając w trybie pracy magisterskiej =
15 --===============================================================
16 -- deklaracja bibliotek
17 library IEEE;
18 use IEEE.STD_LOGIC_1164.ALL;
19 use IEEE.STD_LOGIC_ARITH.ALL;
20 use IEEE.STD_LOGIC_UNSIGNED.ALL;
21
22 -- deklaracja portów wejścia/wyjścia
23 entity SterSekwKomb is
24 Port ( Start: in STD_LOGIC; -- przełącznik START STOP(SW16)
25 Clk : in STD_LOGIC; -- wejście zegarowe 50MHz
26 Enable: out STD_LOGIC; -- wyjście służące do uruchomienia silnika krokowego
27
28 -- sygnały sterujące wyświetlacza LCD
29 lcd_ON: out STD_LOGIC; -- włączenie wyświetlacza
30 lcd_RW: out STD_LOGIC; -- tryb wysyłanie(RW=1) lub odczytywania (RW=0) danych z wyświetlacza
31 lcd_Blon: out STD_LOGIC; -- podświetlenie wyświetlacza
32 lcd_E: out STD_LOGIC; -- uruchomienie wyświetlacza( Enable)
33 lcd_RS: out STD_LOGIC; -- zmienna pozwalająca wysłać tekst na wyświetlacz
34 lcd_dane: out STD_LOGIC_VECTOR(7 downto 0); -- "Szyna danych" umożliwiająca wysyłanie tekstu na wyświetlacz
35
36
37 Detector1: in STD_LOGIC; -- detektor elementu niskiego
38 Detector2: in STD_LOGIC; -- detektor elementu średniego
39 Detector3: in STD_LOGIC; -- detektor elementu wysokiego
40
41
42 Kamera1: in STD_LOGIC; -- detekcja koloru czerwonego(OI_B34)
43 Kamera2: in STD_LOGIC; -- detekcja koloru zielonego9IO_B33)
44 Kamera3: in STD_LOGIC; -- detekcja koloru niebieskiego(IO_B32)
45 KameraCenter: in STD_LOGIC; -- detekcja wykrycia wartości maksymalnej(IO_B31)
46
47
48 Inf: in STD_LOGIC; --przycisk uruchomiający wyświetlenie napisu "Akademia Morska Gdynia 2011" na wyświetlaczu LCD(SW0)
49
50
51 Led_D1: out STD_LOGIC; -- dioda sygnalizująca element niski(LEDR2)
52 Led_D2: out STD_LOGIC; -- dioda sygnalizująca element średni(LEDR1)
53 Led_D3: out STD_LOGIC; -- dioda sygnalizująca element wysoki(LEDR0)
54
55 Led_MGRINZ: out STD_LOGIC; -- dioda sygnalizująca pracę programu służącego do detekcji kolorów(LEDG4)
56
57 Led_C1: out STD_LOGIC; -- dioda sygnalizująca element koloru czerwonego(LEDG0)
58 Led_C2: out STD_LOGIC; -- dioda sygnalizująca element koloru zielonego(LEDG1)
59 Led_C3: out STD_LOGIC; -- dioda sygnalizująca element koloru niebieskiego(LEDG2)
60 Led_Center: out STD_LOGIC; -- dioda sygnalizująca wykrycie środka elementu(LEDG3)
61
62
63
64 Servo: out STD_LOGIC_VECTOR(3 downto 1); -- uruchomienie serwomechanizmu
65 Led1: out STD_LOGIC; -- dioda sygnalizująca zdarzenie1(LEDR15)
66 Led2: out STD_LOGIC; -- dioda sygnalizująca zdarzenie2(LEDR14)
67 Led3: out STD_LOGIC; -- dioda sygnalizująca zdarzenie3(LEDR13)
68 Led4: out STD_LOGIC; -- dioda sygnalizująca zdarzenie4(LEDR12)
69 Led_On: out STD_LOGIC; -- dioda sygnalizująca uruchomienie pracy(LEDR17)
70
71 MGRINZ: in STD_LOGIC; -- sygnał sterujący programem odpowiedzialny za detekcje kolorów (OI_B27 (LPT Start))
72 Speed1: in STD_LOGIC; -- przełącznik prędkości drugiej(SW15)
73 Speed2: in STD_LOGIC; -- przełącznik prędkości trzeciej(SW14)
74 Step: inout STD_LOGIC ); -- wyjście na silnik
75
76
77
78 end SterSekwKomb;
79
80 -- program główny
81 architecture ArchSterSekwKomb of SterSekwKomb is
82
83 -- deklaracja zmiennych
84 signal licznik : integer range 0 to 2147483647; -- 2^31
85 signal zdarzenie : integer range 0 to 255; -- 2^8
86 signal liczkrok : integer range 0 to 16384; -- 2^16
87 signal TIME_GEN : integer range 25000 to 524288; -- 2^19
88 signal LCDLicz : integer range 0 to 1600; -- 2^6
89 signal LCDLicz2 : integer range 0 to 1600; -- 2^6
90 signal LCDLicz3 : integer range 0 to 1600; -- 2^6
91 signal LCDCzas : integer range 0 to 131072000; -- 2^17
92 begin
93 process(Start, Clk)
94 begin
95 lcd_ON <='1'; -- Włączenie wyświetlacza LCD
96 Lcd_RW <='0'; -- Ustawienie tryby wysyłanie danych na LCD
97 Lcd_Blon <='1'; -- Włączenie podświetlenia wyświetlacza LCD
98
99
100
101 Led_C1 <=Kamera1; -- Pojawienie się "1" na pinie Kamera1 wyśle sygnał wysoki
na diodę Led_C1(LEDG0)
102 Led_C2 <=Kamera2; -- Pojawienie się "1" na pinie Kamera2 wyśle sygnał wysoki
na diodę Led_C1(LEDG1)
103 Led_C3 <=Kamera3; -- Pojawienie się "1" na pinie Kamera2 wyśle sygnał wysoki
na diodę Led_C1(LEDG2)
104 Led_Center <=KameraCenter; -- Pojawienie się "1" na pinie KameraCenter wyśle sygnał wysoki na diodę Led_Center(LEDG3)
105 Led_MGRINZ <=MGRINZ; -- Pojawienie się "1" na pinie MGRINZ wyśle sygnał wysoki na diodę Led_C1(LEDG4)
106
107 Led_D1 <=Detector1; -- Pojawienie się "1" na pinie Detektor1 wyśle sygnał wysoki na diodę Led_D1(LEDR2)
108 Led_D2 <=Detector2; -- Pojawienie się "1" na pinie Detektor2 wyśle sygnał wysoki na diodę Led_D12LEDR1)
109 Led_D3 <=Detector3; -- Pojawienie się "1" na pinie Detektor3 wyśle sygnał wysoki na diodę Led_D3(LEDR0)
110
111
112 if (Speed1 ='1') then TIME_GEN<=70000; -- Ustawienie prędkości 2 przesuwania się taśmy
113 elsif (Speed2='1') then TIME_GEN<=300000;-- Ustawienie prędkości 3 przesuwania się taśmy
114 else TIME_GEN<=25000; -- Ustawienie prędkości 1 przesuwania się taśmy
115 end if;
116
117 if (falling_edge(Clk)) then
118 if (Start = '0') and (MGRINZ = '0') then
119 Led_On <='0'; -- włącznik pracy modelu
120 Step <= '0'; -- zatrzymanie silnika krokowego
121 licznik <= 0; -- zerowanie licznika
122 Enable <='0'; -- wyłączenie sygnału sterowania silnikiem krokowym
123 zdarzenie <=0; -- zerowanie zdarzeń
124 Led1 <='0'; -- wyłączenie diody Led1
125 Led2 <='0'; -- wyłączenie diody Led2
126 Led3 <='0'; -- wyłączenie diody Led3
127 Led4 <='0'; -- wyłączenie diody Led4
128 liczkrok <=0; -- zerowanie licznika liczącego kroki silnika
129
130
131 --inicjacja lcd
132 if LCDLicz =63 then LCDLicz<=0; end if;--umożliwia wykonanie inicjacji przy wyjściu ze zdarzenia oczekiwania na obiekt
133 if LCDLicz <=30 then
134
135 if (LCDLicz <=6) or (LCDLicz =17) then lcd_RS <='0'; else lcd_RS <='1'; end if;
136 if LCDLicz =6 then lcd_dane <="00000001"; end if;
137
138 -- Inicjacja LCD
139 if LCDLicz=0 then lcd_dane <="00110000"; end if;-- konfiguracja wyświetlacza 8-bitowego
140 if LCDLicz=1 then lcd_dane <="00110000"; end if;-- konfiguracja wyświetlacza 8-bitowego
141 if LCDLicz=2 then lcd_dane <="00110000"; end if;-- konfiguracja wyświetlacza 8 bitowego
142 if LCDLicz=3 then lcd_dane <="00111000";end if;-- wyłączenie kursora oraz wyłączenie migania kursora
143 if LCDLicz=4 then lcd_dane <="00001000";end if;-- czyszczenie ekranu
144 if LCDLicz=5 then lcd_dane <="00000001";end if;-- włącznie lcd
145 if LCDLicz=6 then lcd_dane <="00001100";end if;-- ustawienie pozostałych parametrów wyświetlacza
146
147 --Napis "Tryb Pracy Magisterskiej"
148 if LCDLicz=7 then lcd_dane <="01010100";end if;-- "T"
149 if LCDLicz=8 then lcd_dane <="01110010";end if;-- "r"
150 if LCDLicz=9 then lcd_dane <="01111001";end if;-- "y"
151 if LCDLicz=10 then lcd_dane <="01100010";end if;--"b"
152 if LCDLicz=11 then lcd_dane <="10100000";end if;--" "
153 if LCDLicz=12 then lcd_dane <="01010000";end if;--"P"
154 if LCDLicz=13 then lcd_dane <="01110010";end if;--"r"
155 if LCDLicz=14 then lcd_dane <="01100001";end if;--"a"
156 if LCDLicz=15 then lcd_dane <="01100011";end if;--"c"
157 if LCDLicz=16 then lcd_dane <="01111001";end if;--"y"
158
159 if LCDLicz=17 then lcd_dane <="11000000";end if;--przejście do 2 wiersza wyświetlacza LCD
160
161 if LCDLicz=18 then lcd_dane <="01001101";end if;--"M"
162 if LCDLicz=19 then lcd_dane <="01100001";end if;--"a"
163 if LCDLicz=20 then lcd_dane <="01100111";end if;--"g"
164 if LCDLicz=21 then lcd_dane <="01101001";end if;--"i"
165 if LCDLicz=22 then lcd_dane <="01110011";end if;--"s"
166 if LCDLicz=23 then lcd_dane <="01110100";end if;--"t"
167 if LCDLicz=24 then lcd_dane <="01100101";end if;--"e"
168 if LCDLicz=25 then lcd_dane <="01110010";end if;--"r"
169 if LCDLicz=26 then lcd_dane <="01110011";end if;--"s"
170 if LCDLicz=27 then lcd_dane <="01101011";end if;--"k"
171 if LCDLicz=28 then lcd_dane <="01101001";end if;--"i"
172 if LCDLicz=29 then lcd_dane <="01100101";end if;--"e"
173 if LCDLicz=30 then lcd_dane <="01101010";end if;--"j"
174
175 if LCDCzas >= 100000 then -- zliczanie czasu służącego do zapisu danych na wyświetlacz
176 LCDLicz<=LCDLicz+1;
177 LCDCzas <=0;
178 else
179 if (LCDCzas > 40000) and (LCDCzas < 80000) then
180 lcd_E <='0';
181 else
182 lcd_E <='1';
183 end if;
184 LCDCzas<=LCDCzas+1;
185 end if;
186 end if;
187
188
189 else
190
191 Led_On <='1';
192 Enable <= '1';
193
194 -- przesuniecie taśmy przenośnika - generowanie impulsów
195 if (licznik <= TIME_GEN) then
196 licznik <= licznik + 1;
197 else
198 licznik <= 0;
199 Step <= not(STEP);
200 liczkrok <= liczkrok + 1;
201 end if;
202
203 -- Oczekiwanie na wykrycie obiektu
204 if (zdarzenie =0) then
205 Led1 <='1';
206
207 if (MGRINZ ='0') then -- część programu odpowiedzialna za wykrywanie wysokości elementu
208
209 if (Detector3 ='1') then
210 zdarzenie <=1; -- zdarzenie 1 odpowiedzialne jest za przesunięcie elementu w celu jego dokładnego zmierzenia
211 liczkrok <=0; -- zerowanie licznika liczącego kroki silnika
212 end if;
213
214
215 else -- część programu odpowiedzialna za wykrywanie kolorów
216 if (KameraCenter = '1') then -- środek elementu został wykryty
217 liczkrok<=1;
218 Led1 <='0';
219 zdarzenie <=2;-- podczas wykrywania kolorów nie ma konieczności wykonania zdarzenia 1 gdy_ element, którego kolor jest wykrywany znajduje się w dogodnej pozycji, co symbolizowane jest przez zmienna KameraCenter
220 LCDLicz <=0;
221
222 else
223
224 --***********************************************************
225 if (LCDLicz <=62) then-- ustaw pinu sterującego LCD
226 if LCDLicz =31 or (LCDLicz =46) then lcd_RS <='0'; else lcd_RS <='1 '; end if;-- Czyszczenie LCD
227 if LCDLicz =31 then lcd_dane <="00000001"; end if;-- Czyszczenie LCD
228 --Napis "Oczekiwanie"
229 if LCDLicz=32 then lcd_dane <="01001111";end if;--"O"
230 if LCDLicz=33 then lcd_dane <="01100011";end if;--"c"
231 if LCDLicz=34 then lcd_dane <="01111010";end if;--"z"
232 if LCDLicz=35 then lcd_dane <="01100101";end if;--"e"
233 if LCDLicz=36 then lcd_dane <="01101011";end if;--"k"
234 if LCDLicz=37 then lcd_dane <="01101001";end if;--"i"
235 if LCDLicz=38 then lcd_dane <="01110111";end if;--"w"
236 if LCDLicz=39 then lcd_dane <="01100001";end if;--"a"
237 if LCDLicz=40 then lcd_dane <="01101110";end if;--"n"
238 if LCDLicz=41 then lcd_dane <="01101001";end if;--"i"
239 if LCDLicz=42 then lcd_dane <="01100101";end if;--"e"
240 if LCDLicz=43 then lcd_dane <="10100000";end if; --" "
241 if LCDLicz=44 then lcd_dane <="01101110";end if;--"n"
242 if LCDLicz=45 then lcd_dane <="01100001";end if;--"a"
243
244 if LCDLicz=46 then lcd_dane <="11000000";end if;--przejście do 2 wiersza wyświetlacza LCD
245
246 if LCDLicz=47 then lcd_dane <="01110111";end if;--"w"
247 if LCDLicz=48 then lcd_dane <="01111001";end if;--"y
248 if LCDLicz=49 then lcd_dane <="01101011";end if;--"k"
249 if LCDLicz=50 then lcd_dane <="01110010";end if;--"r"
250 if LCDLicz=51 then lcd_dane <="01111001";end if;--"y"
251 if LCDLicz=52 then lcd_dane <="01100011";end if;--"c"
252 if LCDLicz=53 then lcd_dane <="01101001";end if;--"i"
253 if LCDLicz=54 then lcd_dane <="01100101";end if;--"e"
254 if LCDLicz=55 then lcd_dane <="10100000";end if;--" "
255 if LCDLicz=56 then lcd_dane <="01101111";end if;--"o"
256 if LCDLicz=57 then lcd_dane <="01100010";end if;--"b"
257 if LCDLicz=58 then lcd_dane <="01101001";end if;--"i"
258 if LCDLicz=59 then lcd_dane <="01100101";end if;--"e"
259 if LCDLicz=60 then lcd_dane <="01101011";end if;--"k"
260 if LCDLicz=61 then lcd_dane <="01110100";end if;--"t"
261 if LCDLicz=62 then lcd_dane <="01110101";end if;--"u"
262
263 if LCDCzas >= 100000 then
264 LCDLicz<=LCDLicz+1;
265 LCDCzas <=0;
266 else
267 if (LCDCzas > 40000) and (LCDCzas < 80000) then lcd_E <='0'; else lcd_E <='1'; end if;
268 LCDCzas<=LCDCzas+1;
269 end if;
270
271 end if;
272 --***********************************************************
273 end if;
274 end if;
275
276 end if;
277
278 -- Przesuniecie obiektu na dogodna pozycje wykrycia wysokości
279 if (zdarzenie =1) then
280 Led2 <='1';
281 if (liczkrok =200) then
282 zdarzenie <=2;
283 liczkrok <=0;
284 end if;
285 end if;
286
287
288
289 -- wykrycie wielkości i ustawienie serwomechanizmu
290 if (zdarzenie=2) then
291 Led3 <='1'; --sygnalizacja wykrycia elementu
292 if (MGRINZ ='0') then -- cześć programu odpowiedzialna za wykrywanie wysokości elementu
293 -- fragment programu odpowiedzialny za ustawienie serwomechanizmu do jednej z trzech pozycji w zależności od wykrytego koloru
294 if (Detector1='1') then--wykrycie elementu niskiego
295 Servo<="001";--ustawienie serwomechanizmu w pozycje "Lewo"
296 else
297 if (Detector2='1') then--wykrycie elementu średniego
298 Servo<="010";--ustawienie serwomechanizmu w pozycje "Środek"
299 else--wykrycie elementu wysokiego
300 Servo<="100";--ustawienie serwomechanizmu w pozycje "Prawo"
301 end if;
302 end if;
303
304 zdarzenie <=3;
305 else -- część programu odpowiedzialna za wykrywanie kolorów
306 -- fragment programu odpowiedzialny za ustawienie serwomechanizmu do jednej z trzech pozycji w zależności od wykrytego koloru
307 if (Kamera1='1') then--wykrycie koloru czerwonego
308 Servo<="001";--ustawienie serwomechanizmu w pozycje "Lewo"
309 Led3 <='0';
310 Led2 <='0';
311 --***********************************************************
312 if LCDLicz <=30 then
313 if (LCDLicz =0) or (LCDLicz =16) then lcd_RS <='0'; else lcd_RS <=' 1'; end if;
314 if LCDLicz =0 then lcd_dane <="00000001"; end if;
315
316 --Napis "Wykryty Obiekt: Kolor Czerwony"
317
318 if LCDLicz=1 then lcd_dane <="01010111";end if; --"W"
319 if LCDLicz=2 then lcd_dane <="01111001";end if; --"y
320 if LCDLicz=3 then lcd_dane <="01101011";end if; --"k"
321 if LCDLicz=4 then lcd_dane <="01110010";end if; --"r"
322 if LCDLicz=5 then lcd_dane <="01111001";end if; --"y"
323 if LCDLicz=6 then lcd_dane <="01110100";end if; --"t"
324 if LCDLicz=7 then lcd_dane <="01111001";end if; --"y"
325 if LCDLicz=8 then lcd_dane <="10100000";end if; --" "
326 if LCDLicz=9 then lcd_dane <="01001111";end if; --"O"
327 if LCDLicz=10 then lcd_dane <="01100010";end if;--"b"
328 if LCDLicz=11 then lcd_dane <="01101001";end if;--"i"
329 if LCDLicz=12 then lcd_dane <="01100101";end if;--"e"
330 if LCDLicz=13 then lcd_dane <="01101011";end if;--"k"
331 if LCDLicz=14 then lcd_dane <="01110100";end if;--"t"
332 if LCDLicz=15 then lcd_dane <="00111010";end if; --":"
333 if LCDLicz=16 then lcd_dane <="11000000";end if; --przejście do 2 wiersza wyświetlacza LCD
334
335 if LCDLicz=17 then lcd_dane <="01001011";end if; --"K"
336 if LCDLicz=18 then lcd_dane <="01101111";end if; --"o"
337 if LCDLicz=19 then lcd_dane <="01101100";end if; --"l"
338 if LCDLicz=20 then lcd_dane <="01101111";end if; --"o"
339 if LCDLicz=21 then lcd_dane <="01110010";end if; --"r"
340 if LCDLicz=22 then lcd_dane <="10100000";end if; --" "
341 if LCDLicz=23 then lcd_dane <="01000011";end if; --"C"
342 if LCDLicz=24 then lcd_dane <="01111010";end if; --"z"
343 if LCDLicz=25 then lcd_dane <="01100101";end if; --"e"
344 if LCDLicz=26 then lcd_dane <="01110010";end if; --"r"
345 if LCDLicz=27 then lcd_dane <="01110111";end if; --"w"
346 if LCDLicz=28 then lcd_dane <="01101111";end if; --"o"
347 if LCDLicz=29 then lcd_dane <="01101110";end if; --"n"
348 if LCDLicz=30 then lcd_dane <="01111001";end if; --"y"
349
350 if LCDCzas >= 100000 then
351 LCDLicz<=LCDLicz+1;
352 LCDCzas <=0;
353 else
354 if (LCDCzas > 20000) and (LCDCzas < 40000) then lcd_E <='0'; else lcd_E <='1'; end if;
355 LCDCzas<=LCDCzas+1;
356 end if;
357 else--koniec wyświetlania napisu
358 zdarzenie <=3;
359 LCDLicz <=0;
360 end if;
361 --***********************************************************
362 else
363 if (Kamera2='1') then--wykrycie koloru zielonego
364 Servo<="010";--ustawienie serwomechanizmu w pozycje "Środek"
365 Led3 <='0';
366 Led2 <='0';
367 --***********************************************************
368 if LCDLicz <=29 then
369 if (LCDLicz =0) or (LCDLicz =16) then lcd_RS <='0'; else lcd_RS <='
1'; end if;
370 if LCDLicz =0 then lcd_dane <="00000001"; end if;
371 --Napis "Kolor Zielony"
372
373 if LCDLicz=1 then lcd_dane <="01010111";end if; --"W"
374 if LCDLicz=2 then lcd_dane <="01111001";end if; --"y
375 if LCDLicz=3 then lcd_dane <="01101011";end if; --"k"
376 if LCDLicz=4 then lcd_dane <="01110010";end if; --"r"
377 if LCDLicz=5 then lcd_dane <="01111001";end if; --"y"
378 if LCDLicz=6 then lcd_dane <="01110100";end if; --"t"
379 if LCDLicz=7 then lcd_dane <="01111001";end if; --"y"
380 if LCDLicz=8 then lcd_dane <="10100000";end if; --" "
381 if LCDLicz=9 then lcd_dane <="01001111";end if; --"O"
382 if LCDLicz=10 then lcd_dane <="01100010";end if;--"b"
383 if LCDLicz=11 then lcd_dane <="01101001";end if;--"i"
384 if LCDLicz=12 then lcd_dane <="01100101";end if;--"e"
385 if LCDLicz=13 then lcd_dane <="01101011";end if;--"k"
386 if LCDLicz=14 then lcd_dane <="01110100";end if;--"t"
387 if LCDLicz=15 then lcd_dane <="00111010";end if; --":"
388 if LCDLicz=16 then lcd_dane <="11000000";end if; --przejście do 2 wiersza wyświetlacza LCD
389
390
391 if LCDLicz=17 then lcd_dane <="01001011";end if; --"K"
392 if LCDLicz=18 then lcd_dane <="01101111";end if; --"o"
393 if LCDLicz=19 then lcd_dane <="01101100";end if; --"l"
394 if LCDLicz=20 then lcd_dane <="01101111";end if; --"o"
395 if LCDLicz=21 then lcd_dane <="01110010";end if; --"r"
396 if LCDLicz=22 then lcd_dane <="10100000";end if; --" "
397 if LCDLicz=23 then lcd_dane <="01011010";end if; --"Z"
398 if LCDLicz=24 then lcd_dane <="01101001";end if; --"i"
399 if LCDLicz=25 then lcd_dane <="01100101";end if; --"e"
400 if LCDLicz=26 then lcd_dane <="01101100";end if;--"l"
401 if LCDLicz=27 then lcd_dane <="01101111";end if;--"o"
402 if LCDLicz=28 then lcd_dane <="01101110";end if;--"n"
403 if LCDLicz=29 then lcd_dane <="01111001";end if;--"y"
404
405
406 if LCDCzas >= 100000 then
407 LCDLicz<=LCDLicz+1;
408 LCDCzas <=0;
409 else
410 if (LCDCzas > 40000) and (LCDCzas < 80000) then lcd_E <='0'; else lcd_E <='1'; end if;
411 LCDCzas<=LCDCzas+1;
412 end if;
413 else--koniec wyświetlania napisu
414 zdarzenie <=3;
415 LCDLicz <=0;
416 end if;
417 --***********************************************************
418 else--wykrycie koloru niebieskiego
419 Servo<="100";--ustawienie serwomechanizmu w pozycje "Prawo"
420 Led3 <='0';
421 Led2 <='0';
422 --***********************************************************
423 if LCDLicz <=31 then
424 if (LCDLicz =0) or (LCDLicz =16) then lcd_RS <='0'; else lcd_RS <='
1'; end if;
425 if LCDLicz =0 then lcd_dane <="00000001"; end if;
426 --Napis "Kolor Niebieski"
427 if LCDLicz=1 then lcd_dane <="01010111";end if; --"W"
428 if LCDLicz=2 then lcd_dane <="01111001";end if; --"y
429 if LCDLicz=3 then lcd_dane <="01101011";end if; --"k"
430 if LCDLicz=4 then lcd_dane <="01110010";end if; --"r"
431 if LCDLicz=5 then lcd_dane <="01111001";end if; --"y"
432 if LCDLicz=6 then lcd_dane <="01110100";end if; --"t"
433 if LCDLicz=7 then lcd_dane <="01111001";end if; --"y"
434 if LCDLicz=8 then lcd_dane <="10100000";end if; --" "
435 if LCDLicz=9 then lcd_dane <="01001111";end if; --"O"
436 if LCDLicz=10 then lcd_dane <="01100010";end if;--"b"
437 if LCDLicz=11 then lcd_dane <="01101001";end if;--"i"
438 if LCDLicz=12 then lcd_dane <="01100101";end if;--"e"
439 if LCDLicz=13 then lcd_dane <="01101011";end if;--"k"
440 if LCDLicz=14 then lcd_dane <="01110100";end if;--"t"
441 if LCDLicz=15 then lcd_dane <="00111010";end if; --":"
442 if LCDLicz=16 then lcd_dane <="11000000";end if; --przejście do 2 wiersza wyświetlacza LCD
443
444
445 if LCDLicz=17 then lcd_dane <="01001011";end if; --"K"
446 if LCDLicz=18 then lcd_dane <="01101111";end if; --"o"
447 if LCDLicz=19 then lcd_dane <="01101100";end if; --"l"
448 if LCDLicz=20 then lcd_dane <="01101111";end if; --"o"
449 if LCDLicz=21 then lcd_dane <="01110010";end if; --"r"
450 if LCDLicz=22 then lcd_dane <="10100000";end if; --" "
451 if LCDLicz=23 then lcd_dane <="01001110";end if; --"N"
452 if LCDLicz=24 then lcd_dane <="01101001";end if; --"i"
453 if LCDLicz=25 then lcd_dane <="01100101";end if; --"e"
454 if LCDLicz=26 then lcd_dane <="01100010";end if;--"b"
455 if LCDLicz=27 then lcd_dane <="01101001";end if;--"i"
456 if LCDLicz=28 then lcd_dane <="01100101";end if;--"e"
457 if LCDLicz=29 then lcd_dane <="01110011";end if;--"s"
458 if LCDLicz=30 then lcd_dane <="01101011";end if;--"k"
459 if LCDLicz=31 then lcd_dane <="01101001";end if;--"i"
460
461 if LCDCzas >= 100000 then
462 LCDLicz<=LCDLicz+1;
463 LCDCzas <=0;
464 else
465 if (LCDCzas > 40000) and (LCDCzas < 80000) then lcd_E <='0'; else lcd_E <='1'; end if;
466 LCDCzas<=LCDCzas+1;
467 end if;
468 else--koniec wyświetlania napisu
469 zdarzenie <=3;
470 LCDLicz <=0;
471 end if;
472 --***********************************************************
473 end if;
474 end if;
475 liczkrok <=0;
476 end if;
477 end if;
478
479 -- Przesuniecie obiektu
480 if (zdarzenie =3) then
481 Led4 <='1';
482
483 if (MGRINZ ='0') then
484 if (liczkrok =9000) then
485 zdarzenie <=0;
486 liczkrok <=0;
487 Led1 <='0';
488 Led2 <='0';
489 Led3 <='0';
490 Led4 <='0';
491 LCDLicz<=0;
492 end if;
493 else
494 if (liczkrok =4000) then
495 zdarzenie <=0;
496 liczkrok <=0;
497 Led1 <='0';
498 Led2 <='0';
499 Led3 <='0';
500 Led4 <='0';
501 LCDLicz<=0;
502 end if;
503 end if;
504 end if;
505
506 end if;
507
508 --***********************************************************
509 if Inf ='1' then
510 if LCDLicz2 <=29 then
511 if (LCDLicz2 =0) or (LCDLicz2=16)then lcd_RS <='0'; else lcd_RS <='
1'; end if;
512
513 if LCDLicz2 =0 then lcd_dane <="00000001"; end if;
514
515 --Napis "Kolor Czerwony"
516 if LCDLicz2=1 then lcd_dane <="01000001";end if; --"A"
517 if LCDLicz2=2 then lcd_dane <="01101011";end if; --"k"
518 if LCDLicz2=3 then lcd_dane <="01100001";end if; --"a"
519 if LCDLicz2=4 then lcd_dane <="01100100";end if; --"d"
520 if LCDLicz2=5 then lcd_dane <="01100101";end if; --"e"
521 if LCDLicz2=6 then lcd_dane <="01101101";end if; --"m"
522 if LCDLicz2=7 then lcd_dane <="01101001";end if; --"i"
523 if LCDLicz2=8 then lcd_dane <="01100001";end if; --"a"
524 if LCDLicz2=9 then lcd_dane <="10100000";end if; --" "
525 if LCDLicz2=10 then lcd_dane <="01001101";end if; --"M"
526 if LCDLicz2=11 then lcd_dane <="01101111";end if; --"o"
527 if LCDLicz2=12 then lcd_dane <="01110010";end if; --"r"
528 if LCDLicz2=13 then lcd_dane <="01110011";end if; --"s"
529 if LCDLicz2=14 then lcd_dane <="01101011";end if; --"k"
530 if LCDLicz2=15 then lcd_dane <="01100001";end if; --"a"
531
532
533 if LCDLicz2=16 then lcd_dane <="11000000";end if; --przejście do 2 wiersza wyświetlacza LCD
534
535 if LCDLicz2=17 then lcd_dane <="10100000";end if; --" "
536 if LCDLicz2=18 then lcd_dane <="10100000";end if; --" "
537 if LCDLicz2=19 then lcd_dane <="01000111";end if; --"G"
538 if LCDLicz2=20 then lcd_dane <="01100100";end if; --"d"
539 if LCDLicz2=21 then lcd_dane <="01111001";end if; --"y"
540 if LCDLicz2=22 then lcd_dane <="01101110";end if; --"n"
541 if LCDLicz2=23 then lcd_dane <="01101001";end if; --"i"
542 if LCDLicz2=24 then lcd_dane <="01100001";end if; --"a"
543 if LCDLicz2=25 then lcd_dane <="10100000";end if; --" "
544 if LCDLicz2=26 then lcd_dane <="00110010";end if; --"2"
545 if LCDLicz2=27 then lcd_dane <="00110000";end if; --"0"
546 if LCDLicz2=28 then lcd_dane <="00110001";end if; --"1"
547 if LCDLicz2=29 then lcd_dane <="00110001";end if; --"1"
548
549 if LCDCzas >= 100000 then
550 LCDLicz2<=LCDLicz2+1;
551 LCDCzas <=0;
552 else
553 if (LCDCzas > 20000) and (LCDCzas < 40000) then lcd_E <='0'; else lcd_E <='1'; end if;
554 LCDCzas<=LCDCzas+1;
555 end if;
556
557
558
559 end if;
560
561 else
562 if LCDLicz2 =30 then LCDLicz <=0; end if;
563 LCDLicz2 <=0;
564
565
566 end if;
567 --***********************************************************
568 --***********************************************************
569 if Start ='1' then
570 if LCDLicz3 <=24 then
571 if (LCDLicz3 =0) or (LCDLicz3 =11) then lcd_RS <='0'; else lcd_RS <='1'; end if;
572
573 if LCDLicz3 =0 then lcd_dane <="00000001"; end if;
574
575 --Napis "Tryb Pracy Inżynierskiej"
576 if LCDLicz3=1 then lcd_dane <="01010100";end if;-- "T"
577 if LCDLicz3=2 then lcd_dane <="01110010";end if;-- "r"
578 if LCDLicz3=3 then lcd_dane <="01111001";end if;-- "y"
579 if LCDLicz3=4 then lcd_dane <="01100010";end if;-- "b"
580 if LCDLicz3=5 then lcd_dane <="10100000";end if;--" "
581 if LCDLicz3=6 then lcd_dane <="01010000";end if;--"P"
582 if LCDLicz3=7 then lcd_dane <="01110010";end if;--"r"
583 if LCDLicz3=8 then lcd_dane <="01100001";end if;--"a"
584 if LCDLicz3=9 then lcd_dane <="01100011";end if;--"c"
585 if LCDLicz3=10 then lcd_dane <="01111001";end if;--"y"
586 if LCDLicz3=11 then lcd_dane <="11000000";end if; --przejście do 2 wiersza wyświetlacza LCD
587
588 if LCDLicz3=12 then lcd_dane <="01001001";end if;--"I"
589 if LCDLicz3=13 then lcd_dane <="01101110";end if;--"n"
590 if LCDLicz3=14 then lcd_dane <="01111010";end if;--"z"
591 if LCDLicz3=15 then lcd_dane <="01111001";end if;--"y"
592 if LCDLicz3=16 then lcd_dane <="01101110";end if;--"n"
593 if LCDLicz3=17 then lcd_dane <="01101001";end if;--"i"
594 if LCDLicz3=18 then lcd_dane <="01100101";end if;--"e"
595 if LCDLicz3=19 then lcd_dane <="01110010";end if;--"r"
596 if LCDLicz3=20 then lcd_dane <="01110011";end if;--"s"
597 if LCDLicz3=21 then lcd_dane <="01101011";end if;--"k"
598 if LCDLicz3=22 then lcd_dane <="01101001";end if;--"i"
599 if LCDLicz3=23 then lcd_dane <="01100101";end if;--"e"
600 if LCDLicz3=24 then lcd_dane <="01101010";end if;--"j"
601
602
603 if LCDCzas >= 100000 then
604 LCDLicz3<=LCDLicz3+1;
605 LCDCzas <=0;
606 else
607 if (LCDCzas > 20000) and (LCDCzas < 40000) then lcd_E <='0'; else lcd_E <='1'; end if;
608 LCDCzas<=LCDCzas+1;
609 end if;
610
611
612
613 end if;
614
615 else
616 if LCDLicz3 =25 then LCDLicz <=0; end if;
617 LCDLicz3 <=0;
618
619 --***********************************************************
620 end if;
621
622 end if;
623
624 --if (Inf ='1') then
625
626
627
628 --end if;
629 end process;
630 end ArchSterSekwKomb;