INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wecker-Projekt mit UNO - Adressierung RTC (Tiny RTC Modul)
09.11.2013, 12:08
Beitrag #1
Wecker-Projekt mit UNO - Adressierung RTC (Tiny RTC Modul)
Hallo zusammen,

wie in der Überschrift schon genannt, habe ich mir ein "kleines" Projekt für den Einstieg in die Welt der µC vorgenommen.
Mein (vorläufiges) Endziel ist ein Wecker, ähnlich wie diese Philipps Licht-wecker. Also ein Wecker, der eine gewisse Zeit vor der Weckzeit einen LED-Streifen (oder sonstige LEDs) einschaltet und in einem Zeitraum von einigen Minuten (geplant ist bis zu 30 min.) langsam hochdimmt.

Mein derzeitiger Aufbau besteht aus dem UNO, einem 16x2 Display (HD477* kompatibel) und eben dem RTC. (DCF77 fehlt noch mangels Wissen wie das Signal am besten auszuwerten ist)
Derzzeit bin ich noch recht am Anfang und kämpfe gerade mit der Adressierung des RTC-Moduls. Ich habe ein Tiny RTC V1.1 von Amazon (Marketplace). Die Dokumentation von DFRobot (hier klicken) finde ich aber etwas mager - ich komme damit nicht recht weiter - kennt hier jemand eine bessere Dokumentation?
Ich habe mir die DS1307 und OneWire Bibliotheken runtergeladen und arbeite da zur Zeit mit dem Beispiel-Sketch "DS1307.ino"
In diesem Sketch wird nirgens eine I²C Adresse des RTC angegeben... Das verwirrt mich etwas. Außerdem bereiten mir die ersten Zeilen im Setup ziemliches Kopfzerbrechen:
Code:
//DS1307.h

#include <Wire.h>
#include <DS1307.h>

int rtc[7];
byte rr[7];
int ledPin =  13;
void setup()
{
  DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd      //Um diese beiden Zeilen geht es <<<<<<<<<<
  PORTC |=_BV(3);  // VCC PINC3
Für mich ist das eine bitweise Oderverknüpfung in einer logischen Oder-Verknüpfung deren Ergebnis einfach wieder verworfen wird (zumindest wird es nicht zugewiesen). Ich habe schon die .h-Dateien durchsucht nach einer funktion namens BV oder _BV - konnte aber nichts finden... Was ist das?? Smile

Später sollte dann noch ein DCF77 Modul und ein Temperatur-Sensor hinzukommen - beim DCF77 habe ich derzeit aber recht dunkle Aussichten :/
Wenn ich das Projekt fertigstellen kann, werde ich es aber auch mal richtig vorstellen um anderen solche Probleme zu ersparen Smile

Der Vollständigkeit halber ist hier noch mein aktueller Code:
Code:
/*
  The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 7
* LCD D5 pin to digital pin 6
* LCD D6 pin to digital pin 5
* LCD D7 pin to digital pin 4
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

*/

// include the library code:
#include <LiquidCrystal.h>
//#include <Time.h>
#include <Wire.h>
#include <DS1307.h>

int rtc[7];  //RTC-Ausgabe-Feld
byte rr[7];  //RTC-Eingabe-Feld (zum Zeiteinstellen über Serial)

short prev;  // Variable für die zeitlichen Aktualisierungsabstände

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);



void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  
  Serial.begin(9600);
  
  // RTC-Einstellungen
  DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd
  PORTC |=_BV(3);  // VCC PINC3
  RTC.get(rtc,true);
  RTC.SetOutput(DS1307_SQW1HZ);  //Alternative: SQ4KHZ, SQ8KHZ, SQ32KHZ, LOW, HIGH  // 1 Hz Signal geplant für den Interrupt
  
  setPWM(9, 50);  // Dummy-Einstellung des ersten PWM-Kanals
  setPWM(10, 200);  // Dummy-Einstellung des zweiten PWM-Kanals
  lcdDrawPWM(50, 200);  // PWM-Werte auf dem Display anzeigen/aktualisieren
  lcdDrawTemp(22.4);    // Dummy-Wert Temperatursensor anzeigen
  
  attachInterrupt(0, lcdDrawTime, HIGH);  //Interrupt zur Uhr-Aktualisierung über SQ-Pin des RTC mit 1 Hz
}

void loop() {
  delay(100);
}

void lcdDrawTime() {
  byte timeH;  byte timeM;  byte timeS;
  RTC.get(rtc, true);
  
  lcd.setCursor(0, 0);
  timeH = BCD2DEC(rtc[2]);
  timeM = BCD2DEC(rtc[1]);
  timeS = BCD2DEC(rtc[0]);
  
  if (timeH < 10) lcd.print(" ");
  lcd.print(timeH);
  lcd.print(":");
  if (timeM < 10) lcd.print("0");
  lcd.print(timeM);
  lcd.print(":");
  if (timeS < 10) lcd.print("0");
  lcd.print(timeS);
}

void lcdDrawPWM(int pwm1, int pwm2) {
  lcd.setCursor(0,1);
  if (pwm1 < 100) lcd.print(" ");
  if (pwm1 < 10 ) lcd.print(" ");
  lcd.print((byte) (pwm1 / 2.55));
  lcd.print("%|");
  if (pwm2 < 100) lcd.print(" ");
  if (pwm2 < 10 ) lcd.print(" ");
  lcd.print((byte) (pwm2 / 2.55));
  lcd.print("%");
}

  
void lcdDrawTemp(float temp) {
  byte celsius[8] = {
    B01000,
    B10100,
    B01000,
    B00011,
    B00100,
    B00100,
    B00100,
    B00011 };
  lcd.createChar(0, celsius);
  lcd.setCursor(11, 1);
  lcd.print(temp);
  lcd.setCursor(15,1);
  lcd.write(byte(0));
}

void setPWM(int pin, byte tastgrad) {
  //Setzt den ausgewählten Pin auf einen PWM-Wert (0...255)
  if (pin == 3 || pin == 5 || pin == 6 || pin == 9 || pin == 10 || pin == 11) {
    analogWrite(pin, tastgrad);
  }
}

// BCD zu Dec Umwandlung, da der RTC die Werte im BCD-Code ausgibt
char BCD2DEC(char var){
  if (var>9){
     var=(var>>4)*10+(var&0x0f);
  }
  return var;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Roboter (Projekt) Beginner linux248 1 375 30.11.2016 12:06
Letzter Beitrag: Thie
  Arduino Projekt (Einkauf/Beratung) pekinese 2 237 21.11.2016 13:44
Letzter Beitrag: pekinese
Rainbow WB2812B Projekt CrazyHawk 18 1.505 22.07.2016 17:45
Letzter Beitrag: CrazyHawk
  Cam Slider Projekt, die ersten Schritte T8T 3 1.160 30.04.2016 16:26
Letzter Beitrag: SkobyMobil
  Projekt: Türsensor _Aviciii_ 9 2.447 05.04.2016 18:50
Letzter Beitrag: hotsystems
  Erstes Projekt Claus_M 8 1.980 08.01.2016 07:36
Letzter Beitrag: Claus_M
  NwT-Projekt Kursstufe1 Jonas Halbgewachs 6 2.308 26.10.2015 10:47
Letzter Beitrag: Binatone
  [Projekt] Reifeschrank Klimasteuerung sleipneer 116 17.845 18.10.2015 20:21
Letzter Beitrag: sleipneer
  Anfänger mit großem Bau Projekt (Useless Box 3.0) Wambo 7 4.167 02.10.2015 16:36
Letzter Beitrag: Klaus(i)
  Ardunio Anfänger mit vielen Fragen zu einem Design Projekt (mit Bildern) farbexot 0 1.547 01.08.2015 13:03
Letzter Beitrag: farbexot

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste