Bandi Szasz Postat Mai 28, 2016 Partajează Postat Mai 28, 2016 Am inceput un proiect pentru un controller RGB bluetooth si azi am zis sa testez o comunicatie simpla prin trimiterea unui text de pe telefon la PIC si PIC-ul sa-l returneze ( exemplul simplu din libraria UART din MikroC). Modulul lucrand la 3.3V trebuie sa fac un convertor logic, am ales aceasta schema cu 2N7000 http://www.hobbytronics.co.uk/image/data/tutorial/mosfet_level_converter.jpg , acei 3.3V sunt luati de pe modul lipind un fir pe iesirea regulatorului aflat pe modul. Problema e in felul urmator, PIC-ul poate trimite date si sunt afisate pe telefon dar nu si invers orice as incerca nu primesc inapoi textul trimis. Din moment ce pot primii mesaje de la PIC partea de hardware / legaturi / etc.. sunt corect facute si functionale. Dupa care am facut un divizor rezistiv de la 5V la 3.3V si am folosit de acolo tensiunea pentru convertorul logic dar nici o schimbare. Suspectand convertorul logic am alimentat si PIC-ul la 3.3V facand legatura directa intre PIC si modul fara convertorul logic si am ajuns la aceeasi poveste, PIC-ul poate trimite si mesajul este primit, dar in momentul in care vreau sa trimit un mesaj catre PIC acesta nu face nimica. Din pacate inca nu a ajuns Arduino de la vecinii chinezi prin urmare nu pot testa modulul pe un alt microcontroller sa fiu 100% sigur ca nu prezinta defecte, dar dupa ce am stat aproape toata ziua si tot nu merge suspectez ca posibil sa fie modulul defect. A mai intampinat cineva o problema similara ? Codul folosit void main() { OSCCON = 0x70; // oscilator intern la 8Mhz UART1_Init(9600); UART1_Write_Text("Hello"); // Mesajul este primit si afisat pe telefon while (1) { if (UART1_Data_Ready() == 1) { // daca modulul semnaleaza date noi UART1_Read_Text(output, "OK", 10); // citim pana cand dam de "OK" UART1_Write_Text(output); // trimitem mesajul primit inapoi ca confirmare } }} Orice text trimit care se termina cu OK gen 123OK nu este trimis inapoi, cel mai probabil nu intra in Data_Ready() ... Link spre comentariu
Elison Postat Mai 29, 2016 Partajează Postat Mai 29, 2016 HC06 se poate testa fara microcontroller, legi TX cu RX si transmiti un text pe care trebuie sa-l primesti inapoi daca modulul este bun. Link spre comentariu
Bandi Szasz Postat Mai 29, 2016 Autor Partajează Postat Mai 29, 2016 HC06 se poate testa fara microcontroller, legi TX cu RX si transmiti un text pe care trebuie sa-l primesti inapoi daca modulul este bun. Multumesc de raspuns, am incercat si intradevar asa este. Am trimis un text pe care l-am primit inapoi deci modulul este functional. Se pare ca libraria UART din MikroC nu vrea sa functioneze cu modulul HC-06 cel putin nu functia de Ready(). Link spre comentariu
Elison Postat Mai 29, 2016 Partajează Postat Mai 29, 2016 Libraria este buna si nu are legatura cu HC06.Pune un delay dupa initializare UART, incearca sa intelegi fiecare rutina, de exemplu sa stii cand UART1_Data_Ready() returneaza zero sau unu, eventual testezi asta cu un led pus pe o iesire digitala. Link spre comentariu
Bandi Szasz Postat Mai 29, 2016 Autor Partajează Postat Mai 29, 2016 Am reusit sa rezolv problema, am facut o greseala de incepator. Apeland functia UART1_Init() am zis ca se ocupa libraria de pini TX/RX dar se pare ca nu, pinul RX nu este setat ca pin digital in functia de init. Eu crezand ca se face nu am umblat la registrul ANSELB si pin-ul ramanea ca intrare analogica, dupa ce am setat eu pin-ul ca pin digital problema s-a rezolvat si functioneaza cum trebuie. Sa imi fie invatatura de tinut minte sa initializez eu pinii si sa nu depinda in totalitate de functiile de init(). Multumesc de ajutor. 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