RX4045 RTC von Epson macht Probleme

Gast #3740554
Lesenswert?
• ▲
▼
Hallo,
versuche mich gerade an der RTC 4045 von Epson.
Es funktioniert leider nicht viel. Habe Versucht das Control Register 
auszulesen. Zur Hardware: Habe sie nach dem Datenblatt aufgebaut. Wenn 
ich jetzt den Code ausführen lasse, kommen nur 0xFF zurück. Ein paar 
Fakten:

Die RTC 4045 ist CE High aktiv, das Signal kommt auch am Chip an.
Die CLK Frequenz darf maximal 1MHz betragen, hier wird ein ATMega644 mit 
einem externen 12 MHz Quarz benutzt. Teiler der SPI: 32
Der Chip 4045 richtet sich beim High schalten der CE-Line an der SCK 
Line aus, siehe auch Datenblatt.

Datenblatt: http://www.promelec.ru/pdf/RX4045SAA.pdf

Leider habe ich zurzeit keinen Logic-analyser zur Hand. Hat jemand 
Erfahrung mit dem Chip und einen Lösungsansatz? Was habe ich übersehen?
1
// SPI-Init:
2
  DDRB |= (1<<PORTB4)|(1<<PORTB5)|(1<<PORTB7);  
3
  DDRB &= ~(1<<PORTB6);
4
  
5
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPI2X);         
6

7
   
8
   _delay_ms(3000);
9
   
10
  uart_init();
11

12
  
13
  sei();
14

15
  // Echtzeituhr:
16
  rx4045_init();
...
1
void rx4045_init(void)
2
{
3
  // Echtzeituhr Chanelselect:
4
  RX4045_CS_PORT &= ~(1 << RX4045_CS_PIN);
5
  RX4045_CS_DDR |= (1 << RX4045_CS_PIN);
6
  
7
  while(1)
8
  {
9
    uint8_t a = rx4045_single_read(0x0F);  
10
    _delay_ms(1);
11
  }      
12
}
13

14
uint8_t rx4045_single_read(uint8_t Adress)
15
{
16
  uint8_t Commando;
17
  uint8_t Antwort;
18
  
19
  _delay_ms(10);
20
  // Chipselect:
21
  RX4045_CS_PORT |= (1 << RX4045_CS_PIN);
22
  _delay_ms(10);
23
  
24
  Commando = ((Adress & 0x0F) << 4) | (0x04 & 0x0F); // Ersten vier Bits von der Adresse, dann den Befehl anhängen
25
  
26
  uart_putc(Commando);
27
      
28
   SPDR = Commando;
29
   while(!(SPSR & (1<<SPIF)));  
30
  Antwort = SPDR;  
31
  
32
  RX4045_CS_PORT &= ~(1 << RX4045_CS_PIN);  
33
  uart_putc(Antwort);
34
  _delay_ms(500);    
35
}
Gast #3740595
Lesenswert?
• ▲
▼
Also sendet er nur ein Byte und hört dann auf, aber ich hole mir doch 
die "Antwort" aus dem SPDR Register.
Beim RFM12 z.B. funktioniert das doch so:
1
unsigned short rf12_trans(unsigned short wert)
2
{
3
    CONVERTW val;
4
  
5
  // SPI Anpassen:
6
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //|(1<<SPI2X); 
7
  SPSR &= ~(1 << SPI2X);
8

9
  val.w = wert;
10
  cbi(RF_PORT, CS);
11
  SPDR = val.b[1];
12

13
  while(!(SPSR & (1<<SPIF)));
14

15
  val.b[1]=SPDR;
16
  SPDR = val.b[0];
17

18
  while(!(SPSR & (1<<SPIF)));
19

20
  val.b[0]=SPDR;
21
  sbi(RF_PORT, CS);  
22

23
  return val.w;
24
}
Gast #3740612
Lesenswert?
• ▲
▼
Okay hab ich übersehen. Wenn ich eine Null hinterherschiebe, verhält 
sich der Chip genauso, es kommt nur 0xFF zurück, statt 0x10 wie für das 
F-Register im default angegeben:
1
uint8_t rx4045_single_read(uint8_t Adress)
2
{
3
  uint8_t Commando;
4
  uint8_t Antwort;
5
  
6
  _delay_ms(10);
7
  // Chipselect:
8
  RX4045_CS_PORT |= (1 << RX4045_CS_PIN);
9
  _delay_ms(10);
10
  
11
  Commando = ((Adress & 0x0F) << 4) | (0x0C & 0x0F); // Ersten vier Bits von der Adresse, dann den Befehl anhängen
12
  
13
  uart_putc(Commando);
14
      
15
   SPDR = Commando;
16
   while(!(SPSR & (1<<SPIF)));  
17
  
18
  SPDR = 0;
19
  while(!(SPSR & (1<<SPIF)));
20
  Antwort = SPDR;
21
  
22
  _delay_us(10);  
23
  
24
  RX4045_CS_PORT &= ~(1 << RX4045_CS_PIN);  
25
  uart_putc(Antwort);
26
  _delay_ms(500);    
27
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.