Problema porta seriale atmega 328p

Ciao a tutti oggi ho deciso di creare un piccolo progetto con l'utilizzo del micro controllore Atmega38p.
Io prima di iniziare a far tutto ho testato il mio rn-42 dispositivo bluetooth su un Arduino con la comunicazione sulla porta seriale 0 e 1.

Oggi pero mi sono dedicato a costruirlo io e ho integrato al mio atmega328p il dispostovo rn-42 collegamenti perfetti ma non riesco a farlo comunicare io invio dei dati tramite telefono lui dovrebbe inviarmeli al Arduino e poi lavorarli ma pero tutto ciò non avviene perché sul Arduino funziona e sul atmega328p non funziona?

vi posto il link dello schema: "in più a questo schema io ho il ponticello sulla porta UART del rn-42.

Graie a tutti buona giornata

Hai messo in comune il GND dell'ATmega328 con quello del RN-42.
Nello schema indichi il GND di Arduino e non quello del micro stand-alone.

daddi:
io invio dei dati tramite telefono lui dovrebbe inviarmeli al Arduino e poi lavorarli

Siccome mi pare di capire che usi 2 seriali, la seconda seriale software come l'hai inizializzata?

I GND sono in comune.

e La seriale e solo una perché sul tx e rx del atmega e collegato rn-42.

Non uso Arduino, sul Arduino lo solo testata.
Apro il baundrate a 9600 e sul Hardware del rn-42 l'ho settato a 9600.

Perché sul Arduino va ma sul atmega no?

Io invio solo un numero int di tipo 0 1 dal telefono con un terminale collegato e poi l'rn-42 lo riceve e lo rinvia al atmega tutto qui.

Nessuno sa come mai succede questa cosa?

Premetto che non conosco rn-42, ma per analogia con altre apparecchiature, per capire dov'e' il problema faccio un ponte tra rx e tx.
Nel momento che invi un carattere dal telfono al dispositivo, dovresti ritrovartelo pari pari in ricezione, ammesso che il telefono preveda la possibilità di monitorare la ricezione.

Se tutto funziona, allora il problema si sposta su Arduino.

Renzo

Grazie mille per la risposta ok.
Adesso faccio le prove da te dette ma secondo me il problema e sul atmega328, ma non so perché sul Arduino funziona e sul atmega collegato sui pin 0e1 non funziona, anche sul Arduino il collegamento è sui pin 0 e 1 ma qui funziona.

Non uso il software serial per aggiunta di una porta seriale dato che il caricamento del software lo faccio sul arduino e successivamente, scollego l'atmega 328 e la collego sullo zoccolo da me creato.

e corretto?

ho fatto la prova e con il ponte tra rx e tx inviando qualsiasi dato mi ritorna indietro quindi il problema qual'è?

Ho visto molte volte problemi con i moduli bluetooth (in generale) funzionati a 3.3v collegati alla seriale di Arduino e ... spesso non vanno.

Mi meraviglia molto che a te andasse ... era probabilmente un puro caso ... il tuo Arduino ha qualche tolleranza in più ... ma se fai una ricerca sul forum ... se ne è parlato decine di volte !

L'unica soluzione è sempre e solo stata ... la SoftwareSerial (... normalmente, per ragioni di compatibilità con tutti i modelli, sui pin 10 e 11) ... :roll_eyes:

Guglielmo

Grazie mille per la risposta ma posso fare un software serial sulla porta 0 e 1 del atmega ho devo per forza cambiare porta?

No, devi cambiare pins ... con l'ATmega328P non hai limitazioni, ma se vuoi fare una cosa più generica, come descritto QUI ...

  • Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  • Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

... per questo ti dicevo che i più "gettonati" sono il 10 e 11 :wink:

Guglielmo

ma non so perché sul Arduino funziona e sul atmega collegato sui pin 0e1 non funziona, anche sul Arduino il collegamento è sui pin 0 e 1 ma qui funziona

dato che la piedinatura del 328 e' diversa da quella che poi diventa la piedinatura di arduino, non e' che c'e' un errore di montaggio sullo standalone ?

nulla non funziona nemmeno con il software serial sui pin 10 e 11

i piedini del 328 sono il 2 rx e il 3 tx vero?

I pin 10 e 11 corrispondono ai pin fisici PB2 e PB3, quindi 16 e 17 del chip.

Il sito di pighixxxx è momentaneamente down, ti allego la scheda in pdf ...

Guglielmo

daddi:
i piedini del 328 sono il 2 rx e il 3 tx vero?

Sì giusto

daddi:
Non uso Arduino, sul Arduino lo solo testata.
Apro il baundrate a 9600 e sul Hardware del rn-42 l'ho settato a 9600.

Ma apri il serial monitor sul PC o la seriale su Arduino?
Perché se collegi il bluetooth ai pin 0 e 1 su Arduino e apri il serial monitor hai collegato direttamente il bluetooth al PC senza passare da Arduino, quindi non stai verificando se esso funziona.
Devi usare una seriale software e fare ponte tra le 2 seriali.

Ci puoi postare lo sketch che stai usando?

vi passo il software

Adesso ho provato con il software serial sui pin 10 e 11 ma non funziona:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()  
{
  // 
  Serial.begin(9600);
  Serial.println("Ciao");

  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}
void loop() 
{
if (mySerial.available())
    mySerial.write("OK");
    Serial.write(mySerial.read());
}

Cosi funziona fino al void setup sul mio terminale del telefono in connessione vedo fino a Hello, world? ma poi non entra in serial.available, o non invia i dati non si capisce.

da comunicazione nel senso Arduino Tx a Rx bluetooth funziona perfettamente ma viceersa non funziona.

Come mai? non riesco a venirne a capo

Guarda ... questo è il programma, ultra collaudato, che uso normalmente per fare i test con i moduli bluetooth ...
... prova a vedere se ti funziona ... se non va hai problemi HW.

#include <SoftwareSerial.h>

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  //
  btSerial.begin(9600);      // Initialize Bluetooth SoftwareSerial port for selected data speed
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Tutto quello che scrivi sulla Seriale viene trasmesso dal bluetooth e tutto quello che ricevi dal bluetooth viene trasmesso sulla seriale ..

Guglielmo

Edit :
Naturalmente TX bluetooth ---> RX SoftwareSerial, RX bluetooth <--- TX SoftwareSerial :wink:

daddi, nel tuo sketch devi mettere le parentesi graffe all'IF all'interno del loop, perché il secondo comando viene sempre eseguito, non è sotto l'IF.
L'indentazione è errata.