pelikanu Posted November 23, 2009 Share Posted November 23, 2009 Am o problema de felul urmator:O bucata pic16f876 - care se conecteaza printr-un max232 la portul serial; Partea lui MAX232 merge cum trebuie; insa cum imi pot da seama dupa programul microcontroller-ului care sunt pinii de lare trebuie sa leg Rx Tx la 232 si care sunt pinii la care trebuie sa leg Rx Tx la mouse?In schema atasata de mine, K1 ar trebui sa corespunda RxTx de la mouse, iar RB6 si RB7 ar trebui sa fie iesirea TxRx catre 232 - sunt convins ca-i gresit (deoarece nu merge, insa programul cu siguranta este bun)Atasez programul, sper sa fie cineva mai in tema ca mine (eu sunt putin pe dinafara)#define clock portb.f7#define data portb.f6#define tris_clock trisb.f7#define tris_data trisb.f6#define tmr_on t1con.f0=1#define tmr_off t1con.f0=0unsigned lungime=100;unsigned short valori[20];unsigned short in,flag,uart_recive;int x_position=0x00;int y_position=0x00;//portd.f1=clock//portd.f0=datastruct {unsigned read_flag :1;unsigned write_flag :1;unsigned if_flag :1;unsigned first_read :1;} flags;short tmp1=0;short tmp2=0;void init(void){usart_init(57600);trisb=0xf3;portb=0;tris_clock=1;tris_data=1;clock=0;data=0;in=0;flag=0;uart_recive=0;flags.read_flag=0;flags.write_flag=0;flags.if_flag=1;flags.first_read=0;///timertmr1l=0x3c;tmr1h=0xaf;t1con=0x00;//*****usartintcon=0b11000000;pie1=0b00100001;pir1.f0=0;pir1.f5=0;}//portd.f1=clock//portd.f0=dataunsigned short cit(void){unsigned short out,out2,i;out=0;while(data&&clock){}if(clock==1&&data==0){{while(clock){}while(!clock){}for(i=0;i<8;i++){while(clock){}//clock lowdelay_us(5);if(data){out=out|0x80;}//out.f7=1;}//else{//out.f7=0;}if(i!=7){out=out>>1;}while(!clock){}}}delay_us(100);// usart_write(out);return out;// delay_ms(1000);} }void trimite(unsigned short out){short i,par=1;for(i=0;i<8;i++){if((out>>i)&1){par=~par;}} //calculez paritateatris_data=0;tris_clock=0;clock=0; //pull clock lowdelay_us(150);data=0; //pull data lowclock=1; //realease clocktris_clock=1;while(clock){} //wait for device to pull clock highfor(i=0;i<8;i++){if((out>>i)&1){data=1;} //***********else{data=0;} //transmit datawhile(!clock){} //********while(clock){} //********}if(par){data=1;} //********parityelse{data=0;}while(!clock){}while(clock){}data=1;while(!clock){} //*****stop bitwhile(clock){}tris_data=1;}void mouse_init(){Delay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);///resetDelay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);//********Delay_ms(200);trimite(0xff); //resetdelay_us(200);cit();delay_us(200);cit();delay_us(200);cit();delay_ms(10);trimite(0xE8); //resolutiondelay_us(200);cit();delay_ms(10);trimite(0x03); //resolution 1 cont/mmdelay_us(200);cit();delay_ms(10);//***************sample ratetrimite(0xf3); //resolutiondelay_us(200);cit();delay_ms(10);trimite(0xC8); //resolution 1 cont/mmdelay_us(200);cit();delay_ms(10);//*************************trimite(0xe6); //scaling 1:1delay_us(200);cit();delay_ms(10);trimite(0xf0); //remote modedelay_us(200);cit();delay_ms(10);}short citeste_mouse(){unsigned short stare,x,y;x=0;y=0;trimite(0xEB); //read datadelay_us(100);cit();delay_us(100);stare=cit();delay_us(100);x=cit();delay_us(100);y=cit();//if(stare.f4){x=x-1;x=~x;x_position=x_position-x;}else{x_position=x_position+x;}if(stare.f5){y=y-1;y=~y;y_position=y_position-y;}else{y_position=y_position+y;}//done//usart_write(y_position);return y;}void interrupt(){if( pir1.f0){t1con.f0=0;tmr1l+=0xbf;tmr1h=0x3c;t1con.f0=1;portb.f3=~portb.f3;flags.read_flag=1;pir1.f0=0;}if(pir1.f5){uart_recive=usart_read();switch(uart_recive){case 1 : tmr_on;break;default : lungime=100*uart_recive;break;}pir1.f5=0;}}void txt_out(char *out){short index=0;do{usart_write(out[index++]);}while(index<7);}void main(){char txt[7];unsigned i=0;short tem;init();mouse_init();//tmr_on;while(1){if(flags.read_flag){if(flags.write_flag==0){if(flags.first_read){citeste_mouse();flags.first_read=0;}if(flags.if_flag==1){tmp1=citeste_mouse();flags.if_flag=0;}else{tmp2=citeste_mouse();flags.if_flag=1;tem=tmp1-tmp2;//usart_write(tem);if((tem>2)||(tem<-2)){flags.write_flag=1;tmp1=0;tmp2=0;flags.if_flag=1;}}portb.f2=~portb.f2;}else{portb.f2=0;citeste_mouse();//usart_write(y_position);IntToStr(y_position,txt);//valori[i++]=y_position;txt_out(txt);i++;if(i>lungime){flags.write_flag=0; i=0; tmr_off;y_position=0;portb.f3=0;flags.first_read=1;}}//citeste_mouse();//usart_write(y_position);flags.read_flag=0;}}} Link to comment
pelikanu Posted November 24, 2009 Author Share Posted November 24, 2009 Mai exact, cred ca si felul in care am exprimat problema-i de vina, vreau sa aflu unde sa leg cele 4 fire, care in schema mea sunt legate la RB6 si RB7 (pentru 232) si la RB0 si RB1 pentru mouse Link to comment
ghimpe-- Posted November 24, 2009 Share Posted November 24, 2009 Nu stiu daca am inteles exact ce vrei, dar sper sa te ajute poza de mai jos: Link to comment
pelikanu Posted November 24, 2009 Author Share Posted November 24, 2009 Da, dispunerea pinilor o cunosc - pe mine ma intereseaza cum pot lega in schema mea microcontrolerul Link to comment
pelikanu Posted November 25, 2009 Author Share Posted November 25, 2009 Subiectul inca este de actualitate - chiar nu are nimeni nici o idee?/ Link to comment
pelikanu Posted November 25, 2009 Author Share Posted November 25, 2009 S-a rezolvat, multumesc mult.Topicul poate fi inchiss ori folosit ca baza pentru viitoarele interogari Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now