Forum: Mikrocontroller und Digitale Elektronik STM32F103 Blue Pill Board: Verwendung der RTC mit 32khz


von Christian J. (Gast)


Lesenswert?

Hallo,

bei diesen kleinen Boards ist etwas strubbelig mit der RTC in den 
Beispielen der StdPeriphLibs.

Der unten stehende Code ist von mir ergänzt worden um die Möglichkeit 
den EXTERNEN Quarz zu verwenden statt den internen RC Oszillator. Nur 
klappt es eben nicht. Vor allem verstehe ich nicht wieso die den 
Prescaler auf 40000 setzen.

Lasse ich die Befehle weg, die den internen RC betreffen startet der 32 
Bit Counter nicht und er hängt ewig in der WaitForSycro Schleife fest.

Hat da jemand funktionierenden Code?

Gruss,
Christian

1
void Init_RTC()
2
{
3
      /* Enable PWR and BKP clocks */
4
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
5
6
      /* Allow access to BKP Domain */
7
      PWR_BackupAccessCmd(ENABLE);
8
9
      /* Enable the LSI OSC */
10
      RCC_LSICmd(ENABLE);
11
      RCC_LSEConfig(RCC_LSE_ON);
12
13
      /* Wait till LSI is ready */
14
//      while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) {}
15
      while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} // TEST!!!
16
17
      /* Select the RTC Clock Source EXTERNAL 32Khz */
18
//      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
19
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // TEST!!!
20
21
      /* Enable RTC Clock */
22
      RCC_RTCCLKCmd(ENABLE);
23
24
      /* Wait for RTC registers synchronization */
25
      RTC_WaitForSynchro();
26
27
      /* Wait until last write operation on RTC registers has finished */
28
      RTC_WaitForLastTask();
29
30
      /* Enable the RTC Second */
31
      RTC_ITConfig(RTC_IT_SEC, ENABLE);
32
33
      /* Wait until last write operation on RTC registers has finished */
34
      RTC_WaitForLastTask();
35
36
      /* Set RTC prescaler: set RTC period to 1sec */
37
      RTC_SetPrescaler(40000);
38
39
      /* Wait until last write operation on RTC registers has finished */
40
      RTC_WaitForLastTask();
41
42
      NVIC_InitTypeDef NVIC_InitStructure;
43
44
      /* Enable the RTC Interrupt - 1 x 1s */
45
      NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
46
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;
47
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
48
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
49
      NVIC_Init(&NVIC_InitStructure);
50
51
}

von Erdowahn (Gast)


Lesenswert?

Christian J. schrieb:
> Vor allem verstehe ich nicht wieso die den
> Prescaler auf 40000 setzen.

Verstehe ich auch nicht, denn in einem funktionierenden Code steht da 
bei mir:
1
  /* Set RTC prescaler: set RTC period to 1sec */
2
  RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */

von Christian J. (Gast)


Lesenswert?

Und wie sieht der ganze funktionierende Code aus?

Mit 32768 läuft sie zu schnell und wird wahrscheinlich auch von der RC 
angetrieben, denn von der LSE kriege ich sie nicht zum rennen :-(

von Christian J. (Gast)


Lesenswert?

Grundsätzlioch bin ich nach diesern schönen Anleitung vorgegangen.

http://embedded-lab.com/blog/stm32s-internal-rtc/

Nur leider rennt der Weckker einfach nicht los, sobald ich auf LSE 
schalte.
Das Board in der Doku ist genau das gleiche wie ich es habe. Sein Code 
ist sehr umständlich, das Gleiche geht viel einfacher mit 4 Zeilen, wenn 
man mit der Funktion struct tm *localtime(const time_t *timer) aus der 
time.h Lib arbeitet, die aus der Epoch Time direkt einen struct füllt, 
der das römische Datum hat.
1
struct tm {
2
   int tm_sec;         /* seconds,  range 0 to 59          */
3
   int tm_min;         /* minutes, range 0 to 59           */
4
   int tm_hour;        /* hours, range 0 to 23             */
5
   int tm_mday;        /* day of the month, range 1 to 31  */
6
   int tm_mon;         /* month, range 0 to 11             */
7
   int tm_year;        /* The number of years since 1900   */
8
   int tm_wday;        /* day of the week, range 0 to 6    */
9
   int tm_yday;        /* day in the year, range 0 to 365  */
10
   int tm_isdst;       /* daylight saving time             */  
11
};

von Erdowahn (Gast)


Lesenswert?

Christian J. schrieb:
> Und wie sieht der ganze funktionierende Code aus?

Tja, Du mußtest leider ein bisserl warten, war auf Arbeit.
1
void NVIC_Configuration(void) {
2
  NVIC_InitTypeDef NVIC_InitStructure;
3
#ifdef  VECT_TAB_RAM  
4
  /* Set the Vector Table base location at 0x20000000 */ 
5
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
6
#else  /* VECT_TAB_FLASH  */
7
  /* Set the Vector Table base location at 0x08000000 */ 
8
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
9
#endif
10
11
  /* Configure one bit for preemption priority */
12
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
13
14
//...
15
16
  /* Enable the RTC Interrupt */
17
  NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
18
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
19
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
20
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
21
  NVIC_Init(&NVIC_InitStructure);
22
}
23
24
void init_RTC(void) {
25
  volatile uint16_t i;
26
27
  /* Enable PWR and BKP clocks */
28
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
29
30
  /* LSI clock stabilization time */
31
  for(i=0;i<5000;i++) { ; }
32
33
  if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) {
34
    /* Backup data register value is not correct or not yet programmed (when
35
  the first time the program is executed) */
36
37
    /* Allow access to BKP Domain */
38
    PWR_BackupAccessCmd(ENABLE);
39
  
40
    /* Reset Backup Domain */
41
    BKP_DeInit();
42
  
43
    /* Enable LSE */
44
    RCC_LSEConfig(RCC_LSE_ON);
45
46
    /* Wait till LSE is ready */
47
    while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { ; }
48
  
49
    /* Select LSE as RTC Clock Source */
50
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
51
  
52
    /* Enable RTC Clock */
53
    RCC_RTCCLKCmd(ENABLE);
54
  
55
    /* Wait for RTC registers synchronization */
56
    RTC_WaitForSynchro();
57
  
58
    /* Wait until last write operation on RTC registers has finished */
59
    RTC_WaitForLastTask();
60
61
    /* Set RTC prescaler: set RTC period to 1sec */
62
    RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
63
  
64
    /* Wait until last write operation on RTC registers has finished */
65
    RTC_WaitForLastTask();
66
67
    /* Adjust time */
68
    Time_Adjust();
69
  
70
    /* Allow access to BKP Domain (Time_Adjust disables the access) */
71
    PWR_BackupAccessCmd(ENABLE);
72
  
73
    BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
74
75
    /* Lock access to BKP Domain */
76
    PWR_BackupAccessCmd(DISABLE);
77
78
  } else {
79
80
    /* Wait for RTC registers synchronization */
81
    RTC_WaitForSynchro();
82
83
  }
84
85
  /* Enable the RTC Second */
86
  RTC_ITConfig(RTC_IT_SEC, ENABLE);
87
  /* Wait until last write operation on RTC registers has finished */
88
  RTC_WaitForLastTask();
89
90
#ifdef RTCClockOutput_Enable
91
  /* Enable PWR and BKP clocks */
92
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
93
94
  /* Allow access to BKP Domain */
95
  PWR_BackupAccessCmd(ENABLE);
96
97
  /* Disable the Tamper Pin */
98
  BKP_TamperPinCmd(DISABLE); /* To output RTCCLK/64 on Tamper pin, the tamper
99
                                 functionality must be disabled */
100
101
  /* Enable RTC Clock Output on Tamper Pin */
102
  BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);
103
#endif
104
105
  /* Clear reset flags */
106
  RCC_ClearFlag();
107
}

Ich hoffe, ich habe nichts vergessen.

von Christian J. (Gast)


Lesenswert?

Hi,

das sieht ja fast aus wie meines, sogar die Kommentare sind identisch. 
Nur halt, dass da noch eine Zahl im BKUP RAM abgespeichert wird, um 
Doppel Inits zu vermeiden. Und das läuft auch?

 /* Wait for RTC registers synchronization */
    RTC_WaitForSynchro();

Hier ist bei mir nämlich Schluss, da hängt er sich endlos auf. Dass 
diese blauen Boards nicht ok sind glaube ich eigentlich nicht. Der 
kleine schwarze Kasten ist ein 32khz Oszillator oder Quartz. Das hätte 
natürlich Auswirkungen, wennn das ein Oszillator ist, da man dann die 
Verstärker Mimik nicht aktivieren darf, sondern das als external Clock 
betrachten muss. Die 40.000 kommen daher, dass die RC intern mit 40khz 
angegeben wird, bzw. zwischen 30 - 60 khz.

Nicht vergessen darf man, dass die RTC Mimik erst durch den RC Clock 
getrieben wird, völlig unabhängig von dem Rest ist. Vielleicht muss man 
ja doch erst RC aktivieren und danach umschalten auf LSE? Bei den alten 
LPC21xxx ARM TDMI war das so.

Im Netz gibts dazu so gut wie nichts, die RTC scheint wenig beliebt zu 
sein.

PS: Sehe grad, dass ich keinen reset der BKP Domain habe und das 
Reference Manual das ausdrücklich fordert.

The RTCCLK clock source can be either the HSE/128, LSE or LSI clocks. 
This is selected by programming the RTCSEL[1:0] bits in the Backup 
domain control register (RCC_BDCR). This selection cannot be modified 
without resetting the Backup domain.

Insgesamt finde ich diese RTC einen echten Krampf, Gatter sparen um 
jeden Preis :-(

Gruss,
Christian

von Erdowahn (Gast)


Angehängte Dateien:

Lesenswert?

Den Code habe ich seinerzeit von Martin Thomas stm32_chan_fat-Projekt 
geklaut.
Die entsprechenden Dateien habe ich mal angehängt.

Gruß und viel Erfolg.

von Christian J. (Gast)


Lesenswert?

Was soll ich sagen ? DAS SCHEISS DING GÄÄÄÄÄHT :-)

das war es: BKP_DeInit(); Ohne das geht es nicht. Und jetzt nicht mehr 
anfassen, alles so stehen lassen und freuen :-)

von Oje (Gast)


Lesenswert?

Auch wenn gleich einer den Knüppel rausholt: Bluepill RTC mit CubeMX 
generierten Code (HAL) geht auf Anhieb.

von Christian J. (Gast)


Lesenswert?

Komm ich nicht mit klar. Selbst bei der Clock Config ist alles 
ausgegraut und ich weiss nicht wie ich das umstellen soll. Diese ganze 
Klickerei hat mit Programmieren eher nichts mehr zu tun.

Sagt mir wenig... ich nutze keine HAL. Das Bewährte funktioniert ja..
1
/* RTC init function */
2
void MX_RTC_Init(void)
3
{
4
  RTC_TimeTypeDef sTime;
5
  RTC_DateTypeDef DateToUpdate;
6
7
    /**Initialize RTC and set the Time and Date 
8
    */
9
  hrtc.Instance = RTC;
10
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
11
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
12
  HAL_RTC_Init(&hrtc);
13
14
  sTime.Hours = 0x1;
15
  sTime.Minutes = 0x0;
16
  sTime.Seconds = 0x0;
17
18
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);
19
20
  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
21
  DateToUpdate.Month = RTC_MONTH_JANUARY;
22
  DateToUpdate.Date = 0x1;
23
  DateToUpdate.Year = 0x0;
24
25
  HAL_RTC_SetDate(&hrtc, &DateToUpdate, FORMAT_BCD);
26
27
}

von pegel (Gast)


Lesenswert?

Ich habe mit meinen Board und HAL auch so einige Probleme.

Die LSE Startzeit habe ich schon von 5000 auf 10000 ms hoch gesetzt.
Reicht aber nicht wenn das Board längere Zeit ohne Strom war.
Bleibt dann auch im LSE Ready oder im oben genannten RTC_WaitForSynchro 
hängen.

Dann muss ich nach ein paar Minuten Betrieb noch einmal Reset drücken 
und alles läuft. Getestet gegen Funkuhr ergab sich auch nach 4 Stunden 
dann keine Abweichung. Falsche C werden es dann nicht sein, oder?

Wenn ich nur max ein paar Minuten den Strom kappe, läuft alles wieder 
sauber an. Ein einfaches Reset setzt die Uhrzeit minus der Reset Zeit 
fort.

Das Board muss wohl genug kosmische Strahlung sammeln um starten zu 
können ;)

Bei einem anderen China Board mit LCD und Uhrenquarz ist alles i.O.

von Christian J. (Gast)


Lesenswert?

Meins tut es noch, habe auch nix mehr dran angefasst und die Gnauigkeit 
ist echt super, seit 2 Wochen keine s Abweichung. Ganz ohne Trimmen.

Toi, toi....

von pegel (Gast)


Lesenswert?

Na dann lass mal nicht den Strom ausfallen :)

Trotz dem ist die F103 RTC im Gegensatz zu anderen STM32 nur eine 
abgespeckte Version. Nicht mal automatische Schaltjahre bzw. 
Monatskorrektur.

von Christian J. (Gast)


Lesenswert?

Wofür? Ich schreib da die Unix Epoch Time rein und alles anderen 
erledigt localtime() für mich. Wirklich alles :-) In time.h ist ja alles 
drin:
zb:

struct tm
{
  int  tm_sec;
  int  tm_min;
  int  tm_hour;
  int  tm_mday;
  int  tm_mon;
  int  tm_year;
  int  tm_wday;
  int  tm_yday;
  int  tm_isdst;
#ifdef __TM_GMTOFF
  long  __TM_GMTOFF;
#endif
#ifdef __TM_ZONE
  const char *__TM_ZONE;
#endif
};


1
oid RTC_IRQHandler(void)
2
{
3
   #define MEZ +1
4
5
   struct tm *ptr;      // Zeiger auf Zeit Strktur
6
   time_t value;        // 32 Bit Unixzeit
7
8
  if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
9
  {
10
        /* Unixzeit aus RTC lesen */
11
        RTC_WaitForSynchro();
12
        value = (time_t)RTC_GetCounter();
13
14
        /* UTC +1h dazu addieren */
15
        value = value + (MEZ * 3600);
16
17
        /* In Normalzeit UTC hh:mm:ss umwandeln */
18
        ptr = localtime(&value);
19
20
        /* Prüfe auf Sommerzeit */
21
        if (IsSummertime(ptr))
22
        {
23
            /* Zeit nochmal umrechnen SZ = +1H */
24
            value = value + 3600;
25
            /* In Normalzeit UTC hh:mm:ss umwandeln */
26
            ptr = localtime(&value);
27
            ptr->tm_isdst = true;
28
        }
29
30
        /* In eigene Struktur kopieren */
31
        memcpy((void*)&mytime,ptr,sizeof(struct tm));  // mytime <- localtime Buffer
32
33
        /* Jahr richtig schreiben */
34
        mytime.tm_year += 1900;
35
36
        /* Berechne Sonnenzeiten  */
37
        CalcSonnenAufgang((struct tm*)&mytime, (SunTimes_t*)&SunTimes);
38
39
        // Sonne untergegangen ?
40
        f_SunDown = (( ConvZeit2Float((struct tm*)&mytime) > SunTimes.Down.fpoint) ||
41
                     (ConvZeit2Float((struct tm*)&mytime) > SunTimes.Rise.fpoint));
42
43
        /* Zeitflags setzen, Minute, Stunde */
44
        f_sekunde = true;
45
        if (mytime.tm_sec == 0)
46
            f_minute = true;
47
        if (mytime.tm_min == 0)
48
            f_stunde = true;
49
50
        /* Clear Interrupt pending bit */
51
        RTC_ClearITPendingBit(RTC_FLAG_SEC);
52
  }
53
}

von pegel (Gast)


Lesenswert?

Wau. Der IRQHandler hat gut zu tun.
Aber es ist wie immer: viele Wege führen nach ...

von Christian J. (Gast)


Lesenswert?

Der IRQ wird alle 1s aufgerufen .... hier führt nur ein Weg nach Rom: 
Wenn ich nur einen 32 Bit Zaehler habe muss alles andere per Software 
laufen und dafür gibt es fertige Libs. Der RTC Int ist bei mir 
niedrigste Prio, alles andere bügelt drüber.

von Jan A. (fathi69)


Angehängte Dateien:

Lesenswert?

Ich weiss, dass das Thema hier schon etwas älter ist, aber vielleicht 
hilft es noch jemanden etwas. Auch ich hatte grosse Probleme mit der RTC 
auf einem STm32F103 Blue Pill Board. Folgendes Verhalten war zu 
beobachten:

- 12V Netzteil, nichts weiter angeschlossen -> RTC läuft nicht an
- selbes Netzteil mit Uart-Adapter am Rechner, oder STLink am Board, 
oder USB -> alles Ok
- selbes Netzteil mit LC-Filter (verschiedene Werte, egal ob vor oder 
nach Schaltwandler auf Platine) -> RTC läuft nach ca. 4 Sekunden 
ungefähr halb so schnell an.
- selbes Netzteil, nichts angeschlossen, professionell Finger an Plus 
oder Minus (egal ob 12v oder 3,3v) -> alles Ok (was macht so ein 
Finger?)
- selbes Netzteil, Finger in die Mitte vom Schaltregler -> Prozessor 
platzt auf (riecht genau wie ein atmel)
- Labornetzteil (analog), nichts weiter angeschlossen -> alles Ok

und noch ein paar andere Tests (verschiedene Netzteile usw).
Die Lösung, zumindest für das RTC-Problem bei mir, stand dann hier:

http://stefanfrings.de/stm32/index.html

Die Pins (bei mir) PC14 und PC15 entfernen (gehen zm Quarzoszillator) 
und alles funktioniert.
Ich habe kein Oszi und könnte wahrscheinlich damit auch nicht richtig 
umgehen. Kontrolliert habe ich es, indem ich die LED an PC13 per 
Interrupt (1sek) habe blinken lassen. Über die jetzt erzeugte 
Genauigkeit kann ich noch nichts sagen, denn jetzt ist erstmal der i2c 
dran, der ist ja auch ganz komisch, aber das ist ein anderes Thema.


Gruß
Jan

von Stefan F. (Gast)


Lesenswert?

> Die Lösung, zumindest für das RTC-Problem bei mir, stand dann hier

Eigentlich wurde die Lösung hier im Forum vor wenigen Tagen diskutiert 
und daraufhin habe ich meine Homepage aktualisiert.

von Jan A. (fathi69)


Lesenswert?

Die habe ich dann leider nicht gefunden, aber trotzdem vielen Dank für 
die Informationen!

Gruß
Jan

von Stefan F. (Gast)


Lesenswert?

Wie genau läuft die Uhr bei deinem Bluepill Board eigentlich? Würdest du 
sie empfehlen, oder ist sie inakzeptabel schlecht?

von Jan A. (fathi69)


Lesenswert?

Das kann ich (noch) nicht sagen, ich setze die Uhr mit dem ESP über ntp. 
Ist mein erster Versuch mit einem STM32. Ich werde mal messen, wird aber 
einen Augenblick dauern. Erwarten tue ich allerdings nach dem Anfang 
nicht so viel.

Gruß
Jan

von Boah Eyy (Gast)


Lesenswert?

Stefan U. schrieb:
> Wie genau läuft die Uhr bei deinem Bluepill Board eigentlich? Würdest du
> sie *empfehlen*

Sorry aber das ist eine "dumme" Frage, denn die Genauigkeit der
Uhr (auch allgemein) hängt nicht von der Uhr-Hardware ab (das
ist, primitiv betrachtet, nur ein Zählbaustein) sondern vom Quarz
und davon wie genau der Quarz durch die Umgebungs-Beschaltung
getrimmt ist. Und darin unterscheidet sich die Schaltung in keiner
Weise von den meisten anderen üblichen Uhr-Schaltungen.

Daher hättest du deine Frage auf jeden Uhren-Baustein mit externem
Quarz oder eingebauten Uhren auf jedem anderen Mikrocontroller
Board mit externem Quarz beziehen können.

Was soll also an einer Uhren-Hardware mehr oder weniger
"empfehlenswert" sein?

von Jan A. (fathi69)


Lesenswert?

Ich glaube aber genau das gesamte Umfeld der Uhr war gemeint.

Gruß
jan

von Boah Eyy (Gast)


Lesenswert?

Jan A. schrieb:
> Ich glaube aber genau das gesamte Umfeld der Uhr war gemeint.

Boah Eyy schrieb:
> Und darin unterscheidet sich die Schaltung in keiner
> Weise von den meisten anderen üblichen Uhr-Schaltungen.

von Jan A. (fathi69)


Lesenswert?

In diesem konkreten Fall aber doch, denn wenn ich die Pins von der 
Bluepill am Uhrenquarz dran lasse (unbeschaltet), passieren die oben 
beschriebenen Effekte. Ohne läuft sie zwar scheinbar, aber wie genau 
haben ich eben auch noch nicht geprüft.

Gruß
Jan

von Boah Eyy (Gast)


Lesenswert?

Jan A. schrieb:
> denn wenn ich die Pins von der
> Bluepill am Uhrenquarz dran lasse (unbeschaltet), passieren die oben
> beschriebenen Effekte.

Das weiss unser Stefan Us aber schon längst und begründet
nicht die "dumme" Frage.

von Stefan F. (Gast)


Lesenswert?

Mir ist schon klar, daß die Genauigkeit vom Quarz und der Beschaltung 
abhängt. Die ist aber durch das konkrete BluePill Board bereits 
vorgegeben. Die Pins, die zum Quarz führen, sind entfernt, also kann das 
sonst nichts weiter dran hängen.

> Daher hättest du deine Frage auf jeden Uhren-Baustein ... beziehen können.

Nein, mich interessier jetzt gerad diese BluePill Board.

> In diesem konkreten Fall aber doch, denn wenn ich die Pins von der
> Bluepill am Uhrenquarz dran lasse

Ja aber die sind jetzt ab, und genau diese Variante interessiert mich.

Ich habe den Jan A gefragt, weil er genau die Konfiguration vorliegen 
hat, die mich interessiert. BluePill Board, Pins entfernt, auf 
Lochraster, mit externem Spannungsregler.

Wenn ich einen Kunden im Backschop frage, wie ihm der Apfelkuchen 
schmeckt, den er gerade verspeist, dann sagt der auch nicht "kommt drauf 
an, woher die Äpfel kommen, in welchem Laden du den Kuchen gekauft hast 
und was du vorher im Mund hattest."

Also: keine blöde Frage.

von Stefan F. (Gast)


Lesenswert?

Also Jan, die Frage war ernst gemeint. Ich würde mich wirklich freuen, 
wenn du die Uhr mal ein Wochenende ohne NTP Anbindung laufen lässt und 
danach schaust, wie viel (oder wenig) sie falsch gelaufen ist.

von Boah Eyy (Gast)


Lesenswert?

Stefan U. schrieb:
> Ja aber die sind jetzt ab, und genau diese Variante interessiert mich.

Warum testest du nicht eines deiner eigenen Boards (sind sie dir
zu teuer daraum herumzumachen, oder schaffst du das nicht? Zwei
linke Hände?)?

Warum fragst du jemand hier im Forum ob die Boards "empfehlenswert"
sind wo du doch vermutlich seine Fachkompetenz überhaupt nicht
kennst? Darf man dann annehmen dass du jede Empfehlung hier dann
als relevant für deine Entscheidung nimmst etwas nach diesen
Kriterien zu verwenden?

von Stefan F. (Gast)


Lesenswert?

> Warum testest du nicht eines deiner eigenen Boards
> ... oder schaffst du das nicht?

Auf Faulheit.

Na klar schaffe ich das selber. Werde ich auch tun, es sei denn, jemand 
beantwortet meine Frage schneller.

> Warum fragst du jemand hier im Forum ob die Boards "empfehlenswert"
> sind wo du doch vermutlich seine Fachkompetenz überhaupt nicht
> kennst?

Weil ich mich für Jans Meinung interessiere. In diesem Fall ist mir die 
Fachkompetenz nicht wichtig.

Du bist heute echt ein Meckerfritze. Was hat man Dir angetan?
Wenn du die Frage blöd findest, dann halte dich doch einfach heraus. 
Niemand hat Dich aufgefordert, unsere Kommunikation störend zu 
unterbrechen.

von Boah Eyy (Gast)


Lesenswert?

Stefan U. schrieb:
> Niemand hat Dich aufgefordert, unsere Kommunikation störend zu
> unterbrechen.

Deine dumme Frage provoziert einfach kolossal. Und du bestätigst
es auch noch durch deine Faulheit.

Wenn du nicht gestört werden willst dann kommuniziere mit deinem
Gesprächspartner per PN. Das ist möglich, scheinst du aber noch
nicht zu wissen.

Hier ist jedenfalls öffentlich.

Stefan U. schrieb:
> In diesem Fall ist mir die Fachkompetenz nicht wichtig.

Das zeichnet dich aus .... für die Zukunft.

von Jan A. (fathi69)


Lesenswert?

Stefan U. schrieb:
> Also Jan, die Frage war ernst gemeint. Ich würde mich wirklich freuen,

Werde ich tun, aber geht erst ab Montag, also bitte etwas Geduld.

Boah Eyy schrieb:
> Stefan U. schrieb:
>> In diesem Fall ist mir die Fachkompetenz nicht wichtig.
>
> Das zeichnet dich aus .... für die Zukunft.

Na ja, ich mache das nur als Hobby und kann mich mit den meisten Leuten 
die hier schreiben nicht messen (sieht man ja auch auf meinem Bild 
oben), aber ich bin zuversichtlich, dass ich eine Uhr stellen und wieder 
ablesen kann (+-1 Sekunde) ;). Das Ergebnis ist dann auch nur auf den 
Einzelfall anwendbar, aber wenn mehrere Ergebnisse irgendwo beschrieben 
werden, ergibt das für die Suchenden immerhin eine Tendenz.

Gruß
Jan

von Boah Eyy (Gast)


Lesenswert?

Jan A. schrieb:
> Das Ergebnis ist dann auch nur auf den Einzelfall anwendbar

Yes, sehr scharfsinnig erkannt.

Den (Un-)Nutzen für sich selbst scheint unser Stefan
aber selbst noch nicht zu erkennen.

Doch kaum messen hundert Leute an ihren Bluepills herum und
tun die Messergebnisse kund, schon weiss man viel mehr und
kann Rückschlüsse auf sein eigenes BluePill ziehen.

von Stefan F. (Gast)


Lesenswert?

> Werde ich tun, aber geht erst ab Montag, also bitte etwas Geduld.

Vielen Dank. Lass Dir Zeit. Ich brauche mein einziges Board gerade für 
andere Experimente und warte sehnsüchtig auf das ZehnerPack aus China.

von Stefan F. (Gast)


Lesenswert?

> Das Ergebnis ist dann auch nur auf den Einzelfall anwendbar

Das reicht mir erst mal. Noch baue ich nichts ernsthaftes mit den 
Dingern, ich bin da noch in der Evaluierungsphase.

von Stefan F. (Gast)


Lesenswert?

Ich habe inzwischen einen kurzen Test bezüglich der Genauigkeit der RTC 
gemacht. Mein Nucleo64 Board läuft 4 Sekunden pro Tag zu schnell. Das 
hat mich ein bisschen enttäuscht. Aber immerhin kann man den Oszillator 
kalibrieren.

von Chris J. (Gast)


Lesenswert?

Stefan U. schrieb:

> Ich habe inzwischen einen kurzen Test bezüglich der Genauigkeit der RTC
> gemacht. Mein Nucleo64 Board läuft 4 Sekunden pro Tag zu schnell. Das
> hat mich ein bisschen enttäuscht. Aber immerhin kann man den Oszillator
> kalibrieren.

Also bei meinen Blue Pills habe ich das auch gemacht und die laufen 
erstaunlich genau mit der LSE. Mit LSI sind die nur Schätzeisen, die 
taugt nur für grobe Takte. Man kann die RTC aber nur statisch 
kalibrieren über das BKP_RTCCR Register. Und bei Tempschwankungen zieht 
die trotzdem weg bzw müsste dyn. kalibriert werden. Die zieht mit K = 
–0.040 ppm/°C weg.

http://www.st.com/content/ccc/resource/technical/document/application_note/ff/c1/4f/86/4e/29/42/d1/CD00167326.pdf/files/CD00167326.pdf/jcr:content/translations/en.CD00167326.pdf

von Stefan F. (Gast)


Lesenswert?

Ich wiederhole jetzt meinen Genauigkeits-Test mit einem Bluepill Board 
auf einem Steckbrett. Angeschlossen ist nur ein USB Kabel zum Laptop 
zwecks Stromversorgung, sowie ein USB-UART Kabel für Debug Meldungen.

Zunächst lief mein 32kHz Oszillator mit unregelmäßiger Geschwindigkeit, 
man konnte es mit bloßem Auge an der LED sehen, die im Sekundentakt 
blinken sollte. Jetzt habe ich den Stift von PC14 entfernt, der 
Oszillator läuft nun richtig.

In ein paar Tagen melde ich mich mit dem Testergebnis.

von Stefan F. (Gast)


Lesenswert?

Die Uhr meines Bluepill Boardes hat nach 2 Stunden bereits 2 Sekunden 
Abweichung. Ich habe jetzt zusätzlich noch den Pin PC15 entfernt. Mal 
sehen, ob sie dann besser läuft.

von Chris J. (Gast)


Angehängte Dateien:

Lesenswert?

Stefan U. schrieb:
> Ich habe jetzt zusätzlich noch den Pin PC15 entfernt. Mal
> sehen, ob sie dann besser läuft.

Ich schrieb hier mal, dass ich damit die größte Glaubenskrise hatte als 
die Uhr halb so schnell lief wenn ich sie an Wände hielt. Erst als ich 
beide Pins komplett entfernt hatte, also auch das was auf der Platine 
war lief sie richtig. Allerdings kriege ich die Zeit immer vom Master 
und das ist ein F407, den ich in wochenlanger Kleinarbeit kalibriert 
habe... nach Gefühl, mal mehr mal weniger Takte addiert oder 
subtrahiert.

Grad geschaut: F407 hat aktuell 2s Abweichung nach ca 6 Wochen....

Die einfachste Kiste ist die, den Quarz mit einem 10pf Drehko zu ziehen, 
der in den Kreis eingebracht wird. Den Takt auf einen Pin bringen und 
dann solange drehen bis ein Freq-zähler genau die 32768 anzeigt. Dann 
spart man sich den ganzen Softwarekram.

von Holm T. (Gast)


Lesenswert?

Pins ab hin oder her...überall im Netz ist zu lesen das es eine Blöde 
Idee ist die LED an PC13 zu nutzen, weil der Ausgang genau einer von 
denen ist, die nicht mit hohem Strömen belastet werden sollten..und 
direkt an der RTC Stromversorgung innerhalb des Chips hängt. Also klemmt 
bitte die LED wo anders an.

Gruß,

Holm

von Stefan F. (Gast)


Lesenswert?

Da hat jemand das Datenblatt nicht richtig gelesen und nun wird dieser 
Unfug überall zittiert. Die drei Pins PC13, PC14 und PC15 dürfen 
zusammen 3mA sinken aber keinen Gleichstrom sourcen. Diese Bedingung 
wird bei dem Bluepill Board eingehalten.

Mein Test auf dem Bluepill Board läuft jetzt seit etwa 12 Stunden und 
zeigt eine Sekunde Abweichung. Damit ist es bereits genauer, als das 
Nucleo-64 Board von STM, bei dem diese LED nicht vorhanden ist.

Die Pins müssen ab, weil sie vor allem zusammen mit dem Steckbrett eine 
zusätzliche Kapazitive Belastung darstellen. Außerdem sind sie 
empfänglich für Radiowellen. Dieser RTC Oszillator arbeitet nur mit sehr 
wenig Energie, da machen diese Details viel aus.

von Chris J. (Gast)


Lesenswert?

Holm T. schrieb:

> Pins ab hin oder her...überall im Netz ist zu lesen das es eine Blöde
> Idee ist die LED an PC13 zu nutzen, weil der Ausgang genau einer von
> denen ist, die nicht mit hohem Strömen belastet werden sollten..und
> direkt an der RTC Stromversorgung innerhalb des Chips hängt.

Die RTC  hängt bei mir an einer Backup Batterie und die LED ist eine 
blaue, die schon hell leuchtet mit 0,5 mA. Ich benutze die auch als 
Indikator und habe nie Probleme damit gehabt. Die Pins PC14 und PC15 
müssen aber unbestückt bleiben, defintiv. Es reicht deine Hand denen zu 
nähern und die Uhr läuft nur noch halb so schnell.

Den Code kennt hoffentlich auch jeder.....
1
/* JTAG Interface abschalten, SWD einschalten (PB3, PB4 freimachen) */
2
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
3
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

von Stefan F. (Gast)


Lesenswert?

Mein Genauigkeits Test mit dem Bluepill Board ist beendet. Nach 23 
Stunden hatte die Uhr 1 Sekunde Abweichung. Ich bin zufrieden.

von Stefan F. (Gast)


Lesenswert?

> Den Code kennt hoffentlich auch jeder.....
> JTAG Interface abschalten

Was hat das mit der RTC zu tun?

von Holm T. (Gast)


Angehängte Dateien:

Lesenswert?

Chris J. schrieb:
> Holm T. schrieb:
>
>> Pins ab hin oder her...überall im Netz ist zu lesen das es eine Blöde
>> Idee ist die LED an PC13 zu nutzen, weil der Ausgang genau einer von
>> denen ist, die nicht mit hohem Strömen belastet werden sollten..und
>> direkt an der RTC Stromversorgung innerhalb des Chips hängt.
>
> Die RTC  hängt bei mir an einer Backup Batterie und die LED ist eine
> blaue, die schon hell leuchtet mit 0,5 mA. Ich benutze die auch als
> Indikator und habe nie Probleme damit gehabt. Die Pins PC14 und PC15
> müssen aber unbestückt bleiben, defintiv. Es reicht deine Hand denen zu
> nähern und die Uhr läuft nur noch halb so schnell.
>
[..]

Hmm..."schließ keine LED an PC13 an" "..mach ich doch nicht denn meine 
LED ist blau"

Mach doch was Du willst...

Gruß,

Holm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.