Forum: Compiler & IDEs PIC32 Kopieren von externer RTCC (MCP7941x) zu interner RTCC


von David H. (davidm)


Angehängte Dateien:

Lesenswert?

Da Microchip beim designen der PIC32 den VBAT Anschluss vergessen hat 
behelfe ich mir
nun mit einer externen RTCC.

Ich möchte nun die Daten von der externen zu internen RTCC kopieren.

Dabei ist allerdings mein Problem das sowohl die externe als auch die 
interne RTCC ein 10/01 Format hat,
jedoch die structure rtccDate die von ALLEN PIC32 funktionen verwendet 
wird anders aufgebaut ist.

Wie lässt sich das in der unten genannten structure abbilden?!

Beispiel:

Date 01-31 (Monatstag) wird aufgeteilt in 10DATE und DATE
Sprich hier werden 10er und 1er voneinander getrennt gespeichert.

versuchen wir mal Tag 31 in dieses 10/1 format zu bringen
Die Zahl 31 wird also als hex angegeben
0x31h -> 0011 0001

nur riegdnwie müssen die das doch wieder zurück in Ihre structure 
wandeln,
den da wird es ja als decimal 31 gespeichert (denke ich)
also
31 -> 0001 1111

Wie kann das sein, die kopieren hier einfach das RTCDATE register?
1
extern __inline__ unsigned long __attribute__((always_inline))  RtccGetDate(void)
2
{
3
  unsigned int  d0, d1;
4
  do
5
  {
6
    d0=RTCDATE;
7
    d1=RTCDATE;
8
  }while(d0!=d1);
9
10
  return d0;
11
}

Ansonsten verwendet Microchip eine structure, hier sind die 10er und 1er 
komischerweise nicht mehr getrennt.
1
typedef union
2
{
3
  struct
4
  {
5
    unsigned char  wday;    // BCD codification for day of the week, 00-06
6
    unsigned char  mday;    // BCD codification for day of the month, 01-31
7
    unsigned char  mon;    // BCD codification for month, 01-12
8
    unsigned char  year;    // BCD codification for years, 00-99
9
  };                // field access
10
  unsigned char    b[4];    // byte access
11
  unsigned short    w[2];    // 16 bits access
12
  unsigned long    l;      // 32 bits access
13
}rtccDate;

von David H. (davidm)


Lesenswert?

Also gut, bin nen stück weiter..


Die jungs verwenden ganz klar wieder das hex format wie direkt im RTCC 
register.

Daher mal meine Simple Frage, wie funktioniert hier eine Umwandlung
von dem Hex wert zu einer decimal Zahl

Beispiel mday:

0x28 = Tag 28  (jedoch ist eine Hex 28 eine decimal 40 und nicht 28)


Ich habe ansich nur damit vor diese Zahl per UART aus zu geben, gibt
es hier fertige Funktionen die aus dieser hex Wert etwas anzeigbares 
machen?

ultoa mit nem anderen radix?


rtccTime tm;
 tm.sec=0x15; tm.min=0x59; tm.hour=0x23;

rtccDate dt;
 dt.wday=05; dt.mday=0x28; dt.mon=0x2; dt.year=0;

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.