Realtimclock

Mein zweites Selbstbauprojekt.

DS1307 Shield für Arduino

 

Anschluss siehe Bild, ganz einfach.
Pin 1 und 2 an den Quarz, Pin 3 Batterie +

Pin 4 Masse PIN 5 und 6 an Arduino wie im Bild. PIN 7 Clock out, hier nicht beschaltet. Pin 8 +5V ohne die geht es nicht.

Das Programm benutzt schon mein 3 Draht LCD Display.  Also bitte dem Libaryeintrag ändern. Oder ganz rausnehmen. Die Befehle sind dann von lcd.print auf serialprint zu ändern für eine Ausgabe auf den Seriallen Monitor. Weiterhin kann man auf <10 abfragen und dann bei den Zahlen eine Vorlaufnull erzeugen. Beispiele gibt es im Netz genug.

//Arduino 1.0+ Only
//Arduino 1.0+ Only

#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include <LiquidCrystal595.h>
LiquidCrystal595 lcd(7,8,9);     // datapin, latchpin, clockpin
byte zero = 0x00; //workaround for issue #527


void setup(){
  Wire.begin();
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.clear();
// setDateTime(); //MUST CONFIGURE IN FUNCTION
}

void loop(){
  printDate();
  delay(1000);
}

/*void setDateTime(){

  byte second =      45; //0-59
  byte minute =      34; //0-59
  byte hour =       12; //0-23
  byte weekDay =     1; //1-7
  byte monthDay =    3; //1-31
  byte month =       3; //1-12
  byte year  =       13; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator

  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));

  Wire.write(zero); //start

  Wire.endTransmission();

}*/

byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  lcd.setCursor(0,1);
  lcd.print(month);
  lcd.print("/");
  lcd.print(monthDay);
  lcd.print("/");
  lcd.print(year);
  lcd.setCursor(0,2);
  lcd.print(" ");
  lcd.print(hour);
  lcd.print(":");
  lcd.print(minute);
  lcd.print(":");
  lcd.println(second);

}

Schaltplan :

DS1307 RTC an Arduino

 

Funkübertragung mit Arduino

Da ich beim bau meines Hauses einfach nicht genug Kabel verlegt habe, kam dieses Transmitter - Receiver Paar bei meiner Wettererfassung zum Einsatz.


receiverbsk

transmitterbsk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mein erster Test, einfach mit einem Arduino von TxD ein paar Buchstaben senden und mit Putty empfangen, ließ mich erschaueren. Außer Störungen nur ein paar brauchbare Daten. Ich habe mir nicht lange Gedanken über ein Übertragungsprotokollgemacht, da wurde ich mit Google schon fündig.

Hier die passende Libary. Hier wird alles geregelt.  Ich übertrage damit die Messdaten meiner Wettersensoren.

 

 

 

Auspacken einschalten geht

Ja so einfach ist es.

Laden Sie bei Arduino die Software für Ihren PC runter und speichern Sie ihn in einem Verzeichnis.

Hier gibt es die Software   http://www.arduino.cc/

Entpacken Sie die Software im Verzeichnis.

Schließen Sie den Arduino über ein USB Kabel an.

Der Rest geht automatisch.


 

Falls nicht dann geht es so !

Login Form