Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC18f4550 e modulo bluetooth HC-05

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 16 ott 2015, 18:02

Ciao a tutti sto lavorando con un PIC18F4550, un piccolo modulino bluetooth HC-05 e il mio cellulare android (ho scaricato l'applicazione bluetooth terminal). Come prima cosa vorrei riuscire ad accendere un led se il PIC riceve il carattere '1' e spegnerlo se riceve il carattere '0'. Mi sono munito di tanta pazienza e ho cercato in tutti i modi di farlo funzionare però non ci sono riuscito. Inizialmente ho cercato di capire se il problema stava nel modulino, che magari era rotto, però dopo una prova con arduino ho capito che il problema sta nel mio codice (uso MPLAB X e come compilatore XC8)infatti il PIC non riceve nessun carattere.
Questo è il codice che ho provato ad utilizzare:
Codice: Seleziona tutto
/*
* File:   main.c
* Author: Utente
*
*/

#include <xc.h>
#include <plib/usart.h>
#include <plib/xlcd.h>
#define _XTAL_FREQ 8000000
//Frequenza del quarzo o del oscillatore interno
#pragma config FOSC = INTOSC_HS && WDT = OFF && PBADEN = OFF && MCLRE = OFF && STVREN = OFF && LVP = OFF
//Oscillatore interno HS


void configurazioni(void){
    OSCCON = 0b01110110;
    // Imposto il quarzo interno a 8MHz
    ADCON1 = 0b00001111;
    //Imposto tutti i pin come digitali
    TRISBbits.TRISB7 = 0;
    //Pin di verifica ricezione
    TRISAbits.TRISA0 = 0;
    //Pin di output
    TRISCbits.TRISC6 = 0;
    //Imposto il pin Rx come output
    TRISCbits.TRISC7 = 1;
    //Imposto il pin Tx come input
    OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH & USART_ADDEN_OFF, 51);
    //Imposto la USART
}

void main(void) {
     configurazioni();
     //Impostazioni USART
     char data;
     while(1){
        PORTBbits.RB7 = 1;
        //Accendo il led per il test
        while(DataRdyUSART());
        //Aspetto di ricevere un dato
        PORTBbits.RB7 = 0;
        //Indica che ho ricevuto un dato
        data = ReadUSART();
        //Leggo il dato e lo memorizzo nella variabile data
        if(data == '1'){
            PORTAbits.RA0 = 1;
            WriteUSART("Acceso");
        }
        if(data == '0'){
            PORTAbits.RA0 = 0;
            WriteUSART("Spento");
        }
     }
}

Collegamenti:
Pin Rx del modulo al pin Tx del PIC
Pin Tx del modulo al pin Rx del PIC
Alimentazione del modulo 5V, perché non uso il modulo SMD ma quello con 6 pin

Modulo HC-05: configurato come slave, 9600 baud, 1 bit di stop e nessun bit di parità.
Se qualcuno di voi saprebbe come aiutarmi gliene sarei grato, perché non so più dove sbattere la testa per capire come farlo funzionare. Grazie
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[2] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto Utentegrandegiove » 17 ott 2015, 9:28

Ciao Foto UtenteNick01,

Hai uno strumento per monitorare il traffico sulla linea UART?
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[3] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 17 ott 2015, 10:17

Innanzitutto ti ringrazio per avermi risposto, scusa la mia ignoranza ma cosa intendi per monitorare il traffico sulla uart?
Al massimo posso utilizzare un oscilloscopio
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[4] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteWALTERmwp » 17 ott 2015, 11:09

Ciao Foto UtenteNick01,
Nick01 ha scritto:(...) cosa intendi per monitorare il traffico sulla uart? (...)
Foto Utentegrandegiove si riferisce verosimilmente a un analizzatore seriale.
E' utile per fare una analisi dei segnali, in tal caso sulle linee TX e RX e quindi in entrambi i versi, che vengono scambiati tra i due device.

Aggiungo, sarebbe utile tu riportassi lo schema (usando FidoCadJ) che raffigura, almeno, la sezione di interfaccia tra il micro e il modulo radio oltre a evidenziare le connessioni della/delle alimentazioni, grazie.

Magari lo hai già fatto ma, lasciando perdere lo scambio delle informazioni, verificherei se allo stato attuale piloti correttamente il led.

Poi ne riparliamo ...

Saluti

p.s.
non è una anomalia ma solitamente i commenti nello script, almeno in C, precedono la riga dell'istruzione alla quale fanno riferimento o magari sono posti a lato della stessa, per me è strano leggerli dopo.
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[5] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 17 ott 2015, 18:10

Foto UtenteWALTERmwp ti ringrazio per avermi risposto ecco lo schema:


Il modulo ha 6 pin: WAKEUP per mandarlo in AT mode e configurarlo, e il pin state che normalmente non viene collegato
Ultima modifica di Foto UtenteWALTERmwp il 18 ott 2015, 0:44, modificato 3 volte in totale.
Motivazione: Correzzione dello schema
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[6] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteWALTERmwp » 17 ott 2015, 20:17

Tra i parametri della OpenUSART(...) c'è anche la sua abilitazione (intesa come periferica) ?
Il led, acceso all'inizio, ti si spegne ?
Lo "zero" di riferimento del PIC è collegato a quello del modulino ?
Misura il livello di tensione presente sui TX e RX, in assenza di trasmissione, quanto rilevi ?
Altro ... a dopo ...

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[7] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 18 ott 2015, 9:56

Nella funzione OpenUSART() la periferica, hai ragione, non è abilitata. Il led che dovrebbe verrificare l'avvenuta ricezione non si spegne, quindi il PIC non riceve niente. Il "flag" che la funzione DataRdyUSART() normalmente 0, non passa mai a 1 (0=nessun dato ricevuto; 1=dato ricevuto).
Il modulino inizialmente lo avevo collegato a un alimentatore a 5v e il PIC lo alimentavo dal pickit3, poi li ho utilizzato lo stesso alimentatore.
Utilizzando lo stesso alimentatore tra i pin Tx e GND nel modulino mi ritrovo 3,3v mentre tra Rx e GND 4,8v, nel PIC ho la stessa tensione 3,3v tra Rx e GND e 4,8v tra Tx e GND.
Ultima modifica di Foto UtenteNick01 il 18 ott 2015, 10:25, modificato 1 volta in totale.
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[8] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 18 ott 2015, 10:09

Ho risolto ora funziona! :ok:
Mi sono limitato a togliere questo pezzo di codice:
Codice: Seleziona tutto
PORTBbits.RB7 = 1;
        //Accendo il led per il test
        while(DataRdyUSART());
        //Aspetto di ricevere un dato
        PORTBbits.RB7 = 0;
        //Indica che ho ricevuto un dato

e ad aggiungere un piccolo ritardo alla fine del while infinito.
Grazie per l'aiuto :D
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

1
voti

[9] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteWALTERmwp » 18 ott 2015, 10:39

Ottimo, meglio così.
Però, forse, la soluzione non sta nella rimozione di quelle righe.
Non avevo controllato nel "Mplab C18 C Compiler Libraries" ma andando a vedere, per la funzione "DataRdyUSART()" si legge che restituisce 1 se il dato è disponibile quindi il test lo dovresti invertire, così:
Codice: Seleziona tutto
while(!DataRdyUSART());
Puoi provare ?
Tra l'altro, prima di iniziare il controllo in ricezione, sarebbe meglio "pulire" il buffer di ricezione.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[10] Re: PIC18f4550 e modulo bluetooth HC-05

Messaggioda Foto UtenteNick01 » 18 ott 2015, 11:11

Foto UtenteWALTERmwp ho provato ora e funziona, hai ragione mi ero dimenticato di negare DataRdyUSART()
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti