Vizitator viorel2010 Postat Noiembrie 10, 2010 Partajează Postat Noiembrie 10, 2010 salutdoresc sa fac si eu un proiect cu un pic18f4550 si nu reusesc sa comunic cu calculatorul , comunicarea se face prin modul wireless bluetooth. doresc sa comand 6 motoare pas cu pas cand trimit caractere din p.c .Am facut softul in mikroc l am simulat in proteus si totul pare sa mearga numai cand programez pic ul nu merge deloc, am incercat sa scriu un soft in mikroc in care sa aprin un led cand trimit un caracter din p.c prin uart adica prin modulul wireless si nu merge .As dori un ajutor daca se poate , am folosit un crystal de 12 MHz la proiect.atasez si codul pentru comanda motoarelor ./////////#define TRUE 1#define FALSE 0#define coil_1 PORTD.F0#define coil_2 PORTD.F1#define coil_3 PORTD.F2#define coil_4 PORTD.F3#define sensor PORTA.F0#define limist PORTA.F1#define limidr PORTA.F2char uart_rd; int test_gripper(unsigned char mot,unsigned char dir) //testeaza conditiile de limitare { if ((mot==6) && (dir==1) && sensor) //nu mai strange gripperul (motor 6) daca ai senzorul de gripper {UART1_Write_Text("Blocat"); UART1_Write(10); UART1_Write(13); return 0; } else if ((mot==2) && (dir==0) && limist) //limiteaza directia (motor 2) pe cursa cu un senzor binar return 0; else if ((mot==2) && (dir==1) && limidr) //limiteaza directia (motor 2) pe cursa cu un senzor binar return 0; else return 1;//altfel permite actiunea... } void FWD_DIRECTION (unsigned char mot,unsigned char x,const int Vdelay) //x daca vrei mai multi pasi am pus sa faca numai unu { unsigned char c; while (x > 0) { for (c=1; c < 5; c++) if (test_gripper(mot,0)) { if (c == 1) { coil_1 = TRUE; coil_2 = TRUE; coil_3 = FALSE; coil_4 = FALSE; Vdelay_ms(Vdelay); } if (c == 2) { coil_1 = TRUE; coil_2 = FALSE; coil_3 = FALSE; coil_4 = TRUE; Vdelay_ms (Vdelay); } if (c == 3) { coil_1 = FALSE; coil_2 = FALSE; coil_3 = TRUE; coil_4 = TRUE; Vdelay_ms (Vdelay); } if (c == 4) { coil_1 = FALSE; coil_2 = TRUE; coil_3 = TRUE; coil_4 = FALSE; Vdelay_ms (Vdelay); } } x--; } } void REV_DIRECTION (unsigned char mot,unsigned char x,const int Vdelay) { unsigned char c; while (x > 0) { for (c=1; c < 5; c++) if (test_gripper(mot,1)) { if (c == 1) { coil_1 = TRUE; coil_2 = TRUE; coil_3 = FALSE; coil_4 = FALSE; Vdelay_ms (Vdelay); } if (c == 2) { coil_1 = FALSE; coil_2 = TRUE; coil_3 = TRUE; coil_4 = FALSE; Vdelay_ms (Vdelay); } if (c == 3) { coil_1 = FALSE; coil_2 = FALSE; coil_3 = TRUE; coil_4 = TRUE; Vdelay_ms (Vdelay); } if (c == 4) { coil_1 = TRUE; coil_2 = FALSE; coil_3 = FALSE; coil_4 = TRUE; Vdelay_ms (Vdelay); } } x--; } }void motor(unsigned char mot,unsigned char dir,int _Vdelay){ switch(mot) { case 1: PORTB=0b00000001; break; case 2: PORTB=0b00000010; break; case 3: PORTB=0b00000100; break; case 4: PORTB=0b00001000; break; case 5: PORTB=0b00010000; break; case 6: PORTB=0b00100000; break; /// etc ......... default: break; } if(dir==0)FWD_DIRECTION(mot,1,_Vdelay); if(dir==1)REV_DIRECTION(mot,1,_Vdelay); PORTB=0; PORTD=0;}void main() { ADCON1 |= 0x0F; // Configure all ports with analog function as digital CMCON |= 7; // Disable comparators PORTA=0; PORTB=0; PORTD=0; TRISB=0; TRISD=0; UART1_Init(9600); // Initialize UART module at 9600 bps Vdelay_ms(100); // Wait for UART module to stabilize UART1_Write_Text("Start"); UART1_Write(10); UART1_Write(13); while (1) { // Endless loop if (UART1_Data_Ready()) { // If data is received, uart_rd = UART1_Read(); // read the received data, /// UART1_Write(uart_rd); // and send data via UART switch(uart_rd) { case 'A': motor(1,0,100); break; case 'B': motor(1,1,100); break; case 'C': motor(2,0,100); break; case 'D': motor(2,1,100); break; case 'E': motor(3,0,100); break; case 'F': motor(3,1,100); break; case 'G': motor(4,0,100); break; case 'H': motor(4,1,100); break; case 'I': motor(5,0,100); break; case 'J': motor(5,1,100); break; case 'K': motor(6,0,100); break; case 'L': motor(6,1,100); break; default: break; //.................. } } } } Link spre comentariu
Vizitator viorel2010 Postat Noiembrie 13, 2010 Partajează Postat Noiembrie 13, 2010 nu mai este valabil sa rezolvat . am gasit ce era de vina 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