Forum: Mikrocontroller und Digitale Elektronik DS3231 AVR GCC


von Stefan S. (sschultewolter)


Lesenswert?

Hallo ich habe ein kleines Problem. Ich habe folgende DS3231 Libary 
gefunden. Ich hatte diese schon einmal genutzt, jedoch alles vom DS1307 
rausgeworfen.
Dort hat die Verbindung wunderbar funktioniert.
Diese finde ich nicht wieder. Habe diese nun erneut geladen und habe das 
Problem, dass ich keine Verbindung aufgebaut bekomme.
https://github.com/akafugu/ds_rtc_lib

Genutzt wird ein Atmega328P. Verbunden habe ich den 1:1. Bereits ein 2. 
Modul getestet, gleicher Fall.
1
/* main.h */
2
#ifndef MAIN_H_
3
#define MAIN_H_
4
5
#define F_CPU 16000000UL
6
7
#include <avr/io.h>
8
9
#include "uart.h"
10
#include "rtc.h"
11
12
#endif /* MAIN_H_ */
13
14
/* main.c */
15
#include "main.h"
16
17
int main(void)
18
{
19
  struct tm* t = NULL;
20
  
21
  uart_init(F_CPU, 9600);
22
23
  printf("\n\ruart_init.........OK");
24
25
  printf("\n\rtwi_init_master...");
26
  twi_init_master();
27
  printf("OK");
28
29
  printf("\n\rrtc_init..........");
30
  rtc_init();
31
  printf("OK");
32
33
  printf("\n\rrtc_get_time....");
34
  t= rtc_get_time();
35
  printf("OK");
36
  
37
  printf("\n\r%02d:%02d:%02d", t->hour, t->min, t->sec);
38
39
  while (1)
40
  {
41
42
  }
43
  return 0;
44
}

Die rtc_init wird nie beendet. Gleiches gilt für die rtc_get_time(), 
wenn ich die init überspringe und ds3231 als aktiv setze.

von Pete K. (pete77)


Lesenswert?

Das #define F_CPU gehört nicht in das H- oder C-File sondern das 
Makefile.

Wahrscheinlich hast Du in der rtc-lib die Adresse des Moduls nicht 
angepasst, der HW-Aufbau passt nicht zu den Datenblättern oder Du 
ignorierst die Compiler-Fehlermeldungen?

Bitte mehr Infos mit Schaltplan, Aufbau und dem kompletten Sourcecode.

von Stefan S. (sschultewolter)


Angehängte Dateien:

Lesenswert?

Werde ich in 1h nachliefern, gerade unterwegs.

: Bearbeitet durch User
von Stefan S. (sschultewolter)


Lesenswert?

Jetzt habe ich den Text von dem oberen Post editiert und bekomme die 
Meldung mit 1h. Muss ich dann noch mal kurz zusammenfassen.


Die Schaltung ist wie oben auf dem Bild evtl. zu erkennen aufgebaut. Im 
Einsatz ist ein Bluetooth Modul (HC-06), welches mir beim UART Debugging 
hilft (funktioniert einwandfrei). Programmieren tue ich den Arduino Pro 
Mini 328P 5V@16MHz über einen Diamex AVR Programmer.

Atmega328P (SDA|PC4|ADC4) - DS3231 (SDA)
Atmega328P (SCL|PC5|ADC5) - DS3231 (SCL)

Atmega328P (TXD|PD1) - HC-05 (RX)
Atmega328P (RXD|PD0) - HC-05 (TX)

Über den I2C Scanner bekomme ich erfolgreich die I2C Adresse 0x68 
angezeigt.

F_CPU werde ich gleich in die makefile integrieren. Beim Vergleich 
zwischen DS3231 DB von Maxim und den Kommentar zum DS3231 Mapping sind 
mir keine Fehler aufgefallen.

Compilerfehler bekomme ich keine.

Sourcecode ist im oberen Beitrag noch mit reingerutscht. Schaltplan habe 
ich für das noch keinen (folgt erst, wenn die Software steht, da die MCU 
und DS3231 dann auf eine PCB sollen. Derzeit ein fertiges China-Modul 
mit einer GoldCap zur Aufrechterhaltung der RTC.

INT/SQW wird derzeit nicht genutzt, soll aber später genutzt werden für 
1024kHz Signal. (0<<RS2 | 1<<RS1)

von Stefan S. (sschultewolter)


Lesenswert?

Konnte den Fehler ein bisschen eingrenzen, geholfen hat es aber dennoch 
nicht
1
uint8_t rtc_read_byte(uint8_t offset)
2
{
3
  twi_begin_transmission(RTC_ADDR);
4
  twi_send_byte(offset);
5
  twi_end_transmission();//<<--
6
7
  twi_request_from(RTC_ADDR, 1);//<<--
8
  return twi_receive();//<<--
9
}
10
11
void rtc_write_byte(uint8_t b, uint8_t offset)
12
{
13
  twi_begin_transmission(RTC_ADDR);
14
  twi_send_byte(offset);
15
  twi_send_byte(b);
16
  twi_end_transmission();//<<--
17
}

Das Problem scheint das schreiben zu sein
twi_writeTo() in twi-lowlevel.c.

Ich komme einfach nicht auf den I2C vom DS3231 so wie ich das sehe. 
Einen Hardwaredefekt oder falsche Verkablung kann ich ausschließen!

Habe den Beispielssketch von
http://github.com/JChristensen/DS3232RTC
einmal mit der Arduino IDE kompiliert. Dieser liest problemlos die Zeit 
aus.

Die I2C_Adresse ist dort auch identisch hinterlegt wie bei mir

//DS3232 I2C Address
#define RTC_ADDR 0x68


Im Netz waren ansonsten keinerlei andere Libarys zu diesem Thema zu 
finden. Github ebenfalls durchsucht. Dort war nur die ich jetzt 
verwende, der Rest ist alles für den Arduino zugeschnitten und das 
wollte ich vermeiden.

von Mehrle (Gast)


Lesenswert?


von Stefan S. (sschultewolter)


Lesenswert?

Hallo,

das ist lediglich auch nur eine Arduino Libary. Die habe ich zum Test 
der Module genutzt. Hilft nicht weiter.

von Stefan S. (sschultewolter)


Lesenswert?

Hat keiner einen Anhaltspunkt, was genau hier falsch sein kann?

von Pete K. (pete77)


Lesenswert?

Versuch doch mal die I2C Library von Peter Fleury.
Ansonsten könnte wohl auch das China-Modul defekt sein. Kannst Du mal 
die Stromaufnahme messen?

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.