как включить внутренний кварц 32 кгц на due?

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

приобрел Дуньку на плате есть кварц на 32кгц

как его запустить кто нибудь знает?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

kayot пишет:

приобрел Дуньку на плате есть кварц на 32кгц

как его запустить кто нибудь знает?


Вы его на геостационарную орбиту хотите запустить? Или так, по балистической траектории к горизонту? Второй на 12мгц тоже будем запускать?

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

Puhlyaviy пишет:
kayot пишет:

приобрел Дуньку на плате есть кварц на 32кгц

как его запустить кто нибудь знает?

Вы его на геостационарную орбиту хотите запустить? Или так, по балистической траектории к горизонту? Второй на 12мгц тоже будем запускать?

не тупим

RTC нужно инициализировать

вот и вопрос как это сделать?

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

вот нашел лыбу

https://github.com/MarkusLange/Arduino-Due-RTC-Library

проверил работает

кварц запускается в консоль время пишет

единственное нужно батарейку на 3 вольта прикрутить к 52 ножке проца VDDBU (ножку лучше отпаять от платы)  чтоб время не сбрасывалось 

и можно не использовать DS1307

maksmkv
Offline
Зарегистрирован: 07.04.2013

В если подробнее рассказать про бибилотеку  и  ваши часики ???

maksmkv
Offline
Зарегистрирован: 07.04.2013

Я использовал ds1307 - и через месяц часы стали отствать на 2 часа. ((( Батарейка жива, т.к. при отключении питания и возврате оного - все тикает дальше.

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

maksmkv пишет:

Я использовал ds1307 - и через месяц часы стали отствать на 2 часа. ((( Батарейка жива, т.к. при отключении питания и возврате оного - все тикает дальше.

на счет точности не скажу только сегодня завел

где-то на просторах инета нашел проект часов на UTFT

но они были на 1307 и на меге

я скетч прикрутил к дуньке вроде работает

 //Подключение библиотек
#include <UTFT.h> 
#include <rtc_clock.h>

RTC_clock rtc_clock(XTAL); //подключение внутренних часов от кварца 32кгц


//Подключения шрифта
extern uint8_t BigFont[];

//Подключение дисплея TFT

UTFT myGLCD(CTE32HR,38,39,40,41);


char* daynames[]={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
char* monthsnames[]={"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul","Aug","Sep","Oct","Nov","Dec"};
int hh,mm,ss,dow,dd,mon,yyyy;


//Центральные координаты для рисования стрелочных часов
int clockCenterX=159;
int clockCenterY=240;
int oldsec=0;

void setup(){
  
  //
  myGLCD.InitLCD(0); // вертикальное отображение
  myGLCD.setFont(BigFont);
 
  rtc_clock.init();
  rtc_clock.set_clock(__DATE__, __TIME__);

}

void drawDisplay()
{
  // Очистка дисплея
  myGLCD.clrScr();
  
  //Отображение текущей даты
  myGLCD.setColor(0, 255, 0);   
  myGLCD.printNumI((dd), 70, 55);
  myGLCD.print(( monthsnames[mon-1]), 115, 55);
  myGLCD.printNumI((yyyy), 185, 55);
  //Отображение дня недели
  myGLCD.setColor(0, 255, 0); 
  myGLCD.print((daynames[dow-1]), CENTER, 390);
  
  // Рисуем циферблат
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(0, 0, 0);
  for (int i=0; i<5; i++)
  {
    myGLCD.drawCircle(clockCenterX, clockCenterY, 119-i);
  }
  for (int i=0; i<5; i++)
  {
    myGLCD.drawCircle(clockCenterX, clockCenterY, i);
  }
  
  //Отображаем числа на циферблате
  myGLCD.setColor(192, 192, 255);
  myGLCD.print("3", clockCenterX+92, clockCenterY-8);
  myGLCD.print("6", clockCenterX-8, clockCenterY+89);
  myGLCD.print("9", clockCenterX-109, clockCenterY-8);
  myGLCD.print("12", clockCenterX-16, clockCenterY-109);
  
  //Рисуем метки часов в виде рысочек
  for (int i=0; i<12; i++)
  {
    if ((i % 3)!=0)
      drawMark(i);
  }  
   rtc_clock.get_time(&hh,&mm,&ss);
 
  drawMin(mm);
  drawHour(hh, mm);
  drawSec(ss);
  oldsec=ss;
}

void drawMark(int h)//Отрисовка меток
{
  float x1, y1, x2, y2;
  
  h=h*30;
  h=h+270;
  
  x1=110*cos(h*0.0175);
  y1=110*sin(h*0.0175);
  x2=100*cos(h*0.0175);
  y2=100*sin(h*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x2+clockCenterX, y2+clockCenterY);
}

void drawSec(int s)//отрисовка секундной стрелки
{
  float x1, y1, x2, y2;
  int ps = s-1;
  
  myGLCD.setColor(0, 0, 0);
  if (ps==-1)
    ps=59;
  ps=ps*6;
  ps=ps+270;
  
  x1=95*cos(ps*0.0175);
  y1=95*sin(ps*0.0175);
  x2=5*cos(ps*0.0175);
  y2=5*sin(ps*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x2+clockCenterX, y2+clockCenterY);

  myGLCD.setColor(255, 0, 0);
  s=s*6;
  s=s+270;
  
  x1=95*cos(s*0.0175);
  y1=95*sin(s*0.0175);
  x2=5*cos(s*0.0175);
  y2=5*sin(s*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x2+clockCenterX, y2+clockCenterY);
}

void drawMin(int m)//отрисовка минутной стрелки
{
  float x1, y1, x2, y2, x3, y3, x4, y4;
  int pm = m-1;
  
  myGLCD.setColor(0, 0, 0);
  if (pm==-1)
    pm=59;
  pm=pm*6;
  pm=pm+270;
  
  x1=80*cos(pm*0.0175);
  y1=80*sin(pm*0.0175);
  x2=5*cos(pm*0.0175);
  y2=5*sin(pm*0.0175);
  x3=30*cos((pm+4)*0.0175);
  y3=30*sin((pm+4)*0.0175);
  x4=30*cos((pm-4)*0.0175);
  y4=30*sin((pm-4)*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x3+clockCenterX, y3+clockCenterY);
  myGLCD.drawLine(x3+clockCenterX, y3+clockCenterY, x2+clockCenterX, y2+clockCenterY);
  myGLCD.drawLine(x2+clockCenterX, y2+clockCenterY, x4+clockCenterX, y4+clockCenterY);
  myGLCD.drawLine(x4+clockCenterX, y4+clockCenterY, x1+clockCenterX, y1+clockCenterY);

  myGLCD.setColor(0, 255, 0);
  m=m*6;
  m=m+270;
  
  x1=80*cos(m*0.0175);
  y1=80*sin(m*0.0175);
  x2=5*cos(m*0.0175);
  y2=5*sin(m*0.0175);
  x3=30*cos((m+4)*0.0175);
  y3=30*sin((m+4)*0.0175);
  x4=30*cos((m-4)*0.0175);
  y4=30*sin((m-4)*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x3+clockCenterX, y3+clockCenterY);
  myGLCD.drawLine(x3+clockCenterX, y3+clockCenterY, x2+clockCenterX, y2+clockCenterY);
  myGLCD.drawLine(x2+clockCenterX, y2+clockCenterY, x4+clockCenterX, y4+clockCenterY);
  myGLCD.drawLine(x4+clockCenterX, y4+clockCenterY, x1+clockCenterX, y1+clockCenterY);
}

void drawHour(int h, int m)//отрисовка часовой стрелки
{
  float x1, y1, x2, y2, x3, y3, x4, y4;
  int ph = h;
  
  myGLCD.setColor(0, 0, 0);
  if (m==0)
  {
    ph=((ph-1)*30)+((m+59)/2);
  }
  else
  {
    ph=(ph*30)+((m-1)/2);
  }
  ph=ph+270;
  
  x1=60*cos(ph*0.0175);
  y1=60*sin(ph*0.0175);
  x2=5*cos(ph*0.0175);
  y2=5*sin(ph*0.0175);
  x3=20*cos((ph+5)*0.0175);
  y3=20*sin((ph+5)*0.0175);
  x4=20*cos((ph-5)*0.0175);
  y4=20*sin((ph-5)*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x3+clockCenterX, y3+clockCenterY);
  myGLCD.drawLine(x3+clockCenterX, y3+clockCenterY, x2+clockCenterX, y2+clockCenterY);
  myGLCD.drawLine(x2+clockCenterX, y2+clockCenterY, x4+clockCenterX, y4+clockCenterY);
  myGLCD.drawLine(x4+clockCenterX, y4+clockCenterY, x1+clockCenterX, y1+clockCenterY);

  myGLCD.setColor(255, 255, 0);
  h=(h*30)+(m/2);
  h=h+270;
  
  x1=60*cos(h*0.0175);
  y1=60*sin(h*0.0175);
  x2=5*cos(h*0.0175);
  y2=5*sin(h*0.0175);
  x3=20*cos((h+5)*0.0175);
  y3=20*sin((h+5)*0.0175);
  x4=20*cos((h-5)*0.0175);
  y4=20*sin((h-5)*0.0175);
  
  myGLCD.drawLine(x1+clockCenterX, y1+clockCenterY, x3+clockCenterX, y3+clockCenterY);
  myGLCD.drawLine(x3+clockCenterX, y3+clockCenterY, x2+clockCenterX, y2+clockCenterY);
  myGLCD.drawLine(x2+clockCenterX, y2+clockCenterY, x4+clockCenterX, y4+clockCenterY);
  myGLCD.drawLine(x4+clockCenterX, y4+clockCenterY, x1+clockCenterX, y1+clockCenterY);
}

void loop()//основной цикл работы стрелочных часов
{
  int x, y;
  rtc_clock.get_time(&hh,&mm,&ss);
  rtc_clock.get_date(&dow,&dd,&mon,&yyyy);
  drawDisplay();
  
  while (true)
  {
    if (oldsec!=ss)
    {
      int t1=0; 
      int t2=0;
      int t3=0;
      if(hh>=12){
         t1=(hh-12)*5;
       }
       else
       {
         t1=hh*5;
       }
       t2=mm/12;
       t3=t1+t2;
       int a=mm+1;
       int b=mm+2;
       int c=mm+3;
       int d=t3+1;
       int e=t3+2;
       int f=t3+3;
       int g=t3+4;
       if ((ss==d)||(ss==e)||(ss==f)||(ss==g))
      {
        drawHour(hh, mm);
      }
       if ((ss==a)||(ss==b)||(ss==c))
      {
        drawMin(mm);
      }
      if (ss==0)
      {
        drawMin(mm);
        drawHour(hh, mm);
      }
      drawSec(ss);
      oldsec=ss;
    }
    delay(10);
    rtc_clock.get_time(&hh,&mm,&ss);
    rtc_clock.get_date(&dow,&dd,&mon,&yyyy);
 }
}