Probleme mit Code für DS1302

OP #1618407
Lesenswert?

Hallo @all,

ich bin gerade dabei eine Routine für den DS1302 zu schreiben. Leider 
komme ich nicht weiter.

Mein Compiler bringt mir immer folgende Fehler Meldung:

../ds1302.c:253: error: conflicting types for 'RTC_Read'
../ds1302.c:183: error: previous implicit declaration of 'RTC_Read' was 
here


Für diesen Code
1
unsigned char data;
2

3
data = RTC_Read(0x81);
4

5
//Die dazu gehörende Methode
6

7
unsigned char RTC_Read(unsigned char cmd){
8

9
  unsigned char file;
10
  
11
  RTC_CE_High();
12
  RTC_Write_Byte(cmd);
13
  file = RTC_Read_Byte();
14
  RTC_CE_Low();
15

16
  return file;
17
}

Woran liegts? Hat jmd ne Idee? Für Hilfe wäre ich sehr dankbar!

mfg sebastian
OP #1619898
Lesenswert?

... schrieb:
> Du benutzt die Funktion bevor Du sie deklariert hast!


Vielen Dank! Du hattes natürlich recht! Blöder Fehler!

Das Empfangen und Sende klappt jetzt einwandfrei. Jetzt geht es an die 
Auswertung der Zeit.

Ich bekomme vom DS1302 ein Char. Die Bits 0 bis 3 stehen für die 
Einerstelle, die Bits 4 bis 6 für die Zehner. Ich benutze folgenden Code 
um das ganze dann auf einem 160x80 Display darzustellen. Zuerst einmal 
nur die Sekunden!

Der Code funktioniert zwar, aber mich stört das ich 2 verschiedene 
Buffer benutzen muss. Da wenn ich immer den gleichen benutze, ich 2 mal 
das selbe auf dem Display sehe.

Habt ihr Verbesserungsvorschläge oder Tipps für mich?

1
void touch_paintClock(unsigned char xC, unsigned char yC){
2
  
3
  unsigned char data;
4
  unsigned char temp;
5

6
  data = RTC_Read(0x81);
7
  
8
  temp = data;
9
  temp = temp >>4;  //10ner Sekunden  
10

11
  itoa(temp, BufferSec,10);
12
  g_draw_string(xC, yC, BufferSec);
13
  
14
  temp = data;
15
  temp &= ~0xF0;  //1ner Sekunden
16
  
17
  itoa(temp, BufferSec2,10);
18
  g_draw_string(xC, yC + 10, BufferSec2);
19

20

21
}
Gast #1620195
Lesenswert?

Wenn Du 2 Buffer brauchst, dann machst Du irgendwo anders was verkehrt.
Wie sind denn BufferSec/BufferSec2 deklariert?
1
void touch_paintClock(unsigned char xC, unsigned char yC)
2
{
3
  uint8_t data;
4
  char buffer[2];
5

6
  data = RTC_Read(0x81);
7

8
  itoa(data >> 4, buffer, 10);
9
  g_draw_string(xC, yC, buffer);
10

11
  itoa(data & 0x0f, buffer, 10);
12
  g_draw_string(xC, yC + 10, buffer);
13
}
oder
1
void touch_paintClock(unsigned char xC, unsigned char yC)
2
{
3
  uint8_t data;
4
  char buffer[3];
5

6
  data = RTC_Read(0x81);
7

8
  buffer[0] = (data >> 4) + '0';
9
  buffer[1] = (data & 0x0f) + '0';
10
  buffer[2] = '\0';
11
  g_draw_string(xC, yC, buffer);
12
}
oder
1
void touch_paintClock(unsigned char xC, unsigned char yC)
2
{
3
  uint8_t data;
4
  char buffer[3];
5

6
  data = RTC_Read(0x81);
7

8
  itoa(((data >> 4) * 10) + (data & 0x0f), buffer, 10);
9
  g_draw_string(xC, yC, buffer);
10
}
oder
1
void touch_paintClock(unsigned char xC, unsigned char yC)
2
{
3
  uint8_t seconds, minutes;
4
  char buffer[6];
5

6
  seconds = RTC_Read(0x81);
7
  minutes = RTC_Read(0x83);
8

9
  sprintf(buffer, "%01d%01d:%01d%01d", minutes >> 4, minutes & 0x0f, seconds >> 4, seconds & 0x0f);
10
  g_draw_string(xC, yC, buffer);
11
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren