Blame | Last modification | View Log | Download
// Vysilac#include "main.h"#include "..\common.h"#DEFINE LCD_RS PIN_B1 // rizeni registru LCD displeje#DEFINE LCD_E PIN_B2 // enable LCD displeje#DEFINE LCD_DATA_LSB PIN_B4 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou)#INCLUDE "MYLCD.C"#DEFINE VYSILAC PIN_C3#DEFINE AD_OSA_X 0 // adresa A/D prevodniku pro osu X#DEFINE AD_OSA_Y 1 // adresa A/D prevodniku pro osu Y#DEFINE TTL1 PIN_B4#DEFINE TTL2 PIN_B3int stredX, stredY, x, y;void nula(){output_high(VYSILAC);delay_us(IMPULS);output_low(VYSILAC);delay_us(IMPULS);}void jedna(){output_low(VYSILAC);delay_us(IMPULS);output_high(VYSILAC);delay_us(IMPULS);}void odeslat_nibble(int8 data){int i;delay_ms(1); // klidovy stav na lincenula(); // start bitfor (i=0; i<4; i++) // datove bity{if (bit_test(data,i)) jedna(); else nula();}output_low(VYSILAC); // klidovy stav}void odeslat_nibble2 (int8 kodeslani){int i;for (i=0;i<=3;i++){if (1==bit_test(kodeslani,i)){output_high(VYSILAC);delay_us(2*IMPULS); // X pri 1: |--|___output_low(VYSILAC);delay_us(3*IMPULS);}else{output_high(VYSILAC);delay_us(IMPULS); // X pri 0: |-|__|-|_output_low(VYSILAC);delay_us(2*IMPULS);output_high(VYSILAC);delay_us(IMPULS);output_low(VYSILAC);delay_us(IMPULS);};}}void odesli (int8 neco,adresa){odeslat_nibble(0b1111); // Synchronizaceodeslat_nibble(adresa); // Identifikace osyodeslat_nibble(neco); // Hodnota osyodeslat_nibble(neco); // Zopakovana hodnota osy pro kontrolu}void kalibrace(){int8 min_x;int8 max_x;int8 min_y;int8 max_y;int8 sred_x;int8 sred_y;int8 adc;min_x=max_x=min_y=max_y=sred_x=sred_y=128;printf(lcd_putc,"Paku dejte do prostred a stisknete tlacitko");znovu:if (TTL1 || TTL2){set_adc_channel(AD_OSA_X);delay_us(10);sred_x=read_adc();set_adc_channel(AD_OSA_Y);delay_us(10);sred_y=read_adc();};//else goto znovu;printf(lcd_putc,"\f");printf(lcd_putc,"Pak ");set_adc_channel(AD_OSA_X);delay_us(10);adc=read_adc();if (max_x < adc )max_x=adc;if (min_x > adc )min_x=adc;set_adc_channel(AD_OSA_Y);delay_us(10);adc=read_adc();if (max_y < adc )max_y=adc;if (min_y > adc )min_y=adc;if (TTL1 || TTL2) return;}void main(){int c=0;setup_adc_ports(RA0_RA1_RA3_ANALOG);setup_adc(ADC_CLOCK_DIV_2);setup_spi(FALSE);setup_counters(RTCC_INTERNAL,RTCC_DIV_2);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);lcd_init();/* while (c<=16){lcd_gotoxy(c,1);printf(lcd_putc,"_");delay_ms(50);printf(lcd_putc,"\f");c++;}printf(lcd_putc,"\fAhoj!");delay_ms(1500);*/printf(lcd_putc,"\f");lcd_gotoxy(7,2);printf(lcd_putc,"vysilam");while(true){set_adc_channel(AD_OSA_X);lcd_gotoxy(1,1);x=read_adc() >> 4;printf(lcd_putc,"X: %D ", x);set_adc_channel(AD_OSA_Y);lcd_gotoxy(1,2);y=read_adc() >> 4;printf(lcd_putc,"Y: %D ", y);////odeslat_nibble(x); // Zopakovana hodnota osy pro kontrolu/* output_high(PIN_C1);output_low(PIN_C2);delay_ms(100);output_low(PIN_C1);output_high(PIN_C2);delay_ms(100);*/output_high(PIN_C4); // ladici impuls pro synchronizaci merenioutput_high(PIN_C6);delay_ms(1);output_low(PIN_C4);odesli(x,OSA_X);odesli(y,OSA_Y);output_low(PIN_C6); // ladici impuls pro synchronizaci mereni}}