RTC DS 1307 Seriale...come collegarlo???

Ciao a tutti...

Partiamo dal fatto che ho un Seduino Mega (uguale ad Arduino mega) ho un piccolo problema, in internet ho acquistato un DS1307 già pronto con oscillatore e un 12f675 che lo trasforma in seriale per info qui:http://www.futuraelettronica.net/pdf_ita/7100-FT674M.pdf

praticamente devo inviare un codice via seriale "*RT" e ricevo come risposta l'ora...

l'ho collegato hai pin 16-17, corrispondenti alla RX e TX della seconda seriale (se non sbaglio), ma non riesco ad inviare e ricevere niente.... :( qualcuno mi potrebbe dare una mano???

al massimo avevo intenzione di dissaldare il pic 12f675 e collegare direttamente in I2C...

Help me, please!!! :'(

Sicuro che stai inviando il comando sulla seriale giusta ?!? Arduino Mega ne ha più di una.
Invece che usare Serial.print prova ad usare Serial1.print o Serial2.print

per accedere a 16 e 17 devi usare Serial2.read, prima però leggi il tuo 12f675 a quanti baud vuole la connessione e impostala in modo corretto, probabilmente sarà il baud-rate errato ... e ricordati che con l'arduino leggi un bit alla volta, quindi se ti manda un'array di dati devi ricostruirlo in lettura.

io ti consiglierei di startare sia la serial che la serial2 e fare un echo sulla serial del tuo pc di quello che ricevi sulla serial2

DA quello che c'è scritto nel pdf va a 9600b, il 16-17 dovrebbe essere serial2, cosa intendi con un bit alla volta??? se devo inviare il comando "*RT" devo inviarlo in 3 volte???

serial2.print("*"); serial2.print("R"); serial2.print("T");

sarebbe giusto così???

per poter inviare e ricevere direttamente dall'usb (via seriale) va bene:

temp = serial2.read(); Serial.print(temp); temp2 = serial.read(); serial2.print(temp2);

perdonatemi, ma sono ancora all'inizi..... ;)

prova col programma che trovi negli esempi a fare l'eco della seriale sul pc quindi apri il serial monitor e prova da lì ad inviare e vedi la risposta

Collegato e riesco a comunicare con il pc seriale perfettamente:

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','C'},
  {'4','5','6','D'},
  {'7','8','9','E'},
  {'A','0','B','F'}
};

byte rowPins[ROWS] = { 42, 43, 44, 45 };
byte colPins[COLS] = { 38, 39, 40, 41 }; 

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int inByte = 0;
int inByte2 = 0;
int sec1 = 0;
int sec2 = 0;
int min1 = 0;
int min2 = 0;
int ore1 = 0;
int ore2 = 0;
char TEST[15];

void setup(){
  lcd.begin(20, 4);
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop(){
  char key = kpd.getKey();
    if (key == 'A') {
      lcd.setCursor(0,2);
      lcd.print(key);
      Serial2.print('*RT', BYTE);
      }
  if (Serial.available() > 0) {
    inByte = Serial.read();
    Serial2.print(inByte, BYTE);
    lcd.clear();
    }
  for (int i = 1; (Serial2.available() > 0) && (i < 10); i++) {
    inByte2 = Serial2.read();
    Serial.print(inByte2, BYTE);
    //lcd.clear();
//    lcd.setCursor(0,0);
    TEST[i] =(inByte2);
    ore1 = TEST[2];
    ore2 = TEST[3];
    min1 = TEST[5];
    min2 = TEST[6];
    sec1 = TEST[8];
    sec2 = TEST[9];
   // lcd.print(TEST[i]);
    delay(10);
    }
      lcd.setCursor(0,0);
      lcd.print(ore1, BYTE);
      lcd.setCursor(1,0);
      lcd.print(ore2, BYTE);
      lcd.setCursor(2,0);
      lcd.print(":");
      lcd.setCursor(3,0);
      lcd.print(min1, BYTE);
      lcd.setCursor(4,0);
      lcd.print(min2, BYTE);
      lcd.setCursor(5,0);
      lcd.print(":");
      lcd.setCursor(6,0);
      lcd.print(sec1, BYTE);
      lcd.setCursor(7,0);
      lcd.print(sec2, BYTE);
      delay(10);
    }

L’unica cosa è che volevo salvare i minuti, secondi e ore per poterle riutilizzare (comparare per una sveglia per esempio o un timer giornaliero…).
funziona quasi tutto, quasi perchè nel display collegato le ore non si visualizzano…ho uno spazio bianco e un quadrato nero al suo posto…

Qualcuno ha qualche idea??? :frowning: