Sari la conținut
ELFORUM - Forumul electronistilor

18f4550 uart


Vizitator viorel2010

Postări Recomandate

Vizitator viorel2010

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
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări