pelikanu Postat Noiembrie 23, 2009 Partajează Postat Noiembrie 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 spre comentariu
pelikanu Postat Noiembrie 24, 2009 Autor Partajează Postat Noiembrie 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 spre comentariu
ghimpe-- Postat Noiembrie 24, 2009 Partajează Postat Noiembrie 24, 2009 Nu stiu daca am inteles exact ce vrei, dar sper sa te ajute poza de mai jos: Link spre comentariu
pelikanu Postat Noiembrie 24, 2009 Autor Partajează Postat Noiembrie 24, 2009 Da, dispunerea pinilor o cunosc - pe mine ma intereseaza cum pot lega in schema mea microcontrolerul Link spre comentariu
pelikanu Postat Noiembrie 25, 2009 Autor Partajează Postat Noiembrie 25, 2009 Subiectul inca este de actualitate - chiar nu are nimeni nici o idee?/ Link spre comentariu
pelikanu Postat Noiembrie 25, 2009 Autor Partajează Postat Noiembrie 25, 2009 S-a rezolvat, multumesc mult.Topicul poate fi inchiss ori folosit ca baza pentru viitoarele interogari Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum