Hallo Leute...
Ich suche zwar schon fleissig einen Fehler, aber da er sich so
systematisch äussert dachte ich mir das ich direkt mal hier danach
frage:
Ursprünglich wollte ich in meinem Projekt ein Standard DS1307 TinyRTC
Modul aus der Bucht benutzen.
Eingebunden habe ich die RTC Lib aus "Kalles Blog"
(http://www.pgollor.de/cms/?page_id=764) sowie die I2C Lib von Peter
Fleury.
Doch es hakelte und wollte nicht so recht, was ich anfangs auf meine
sehr hochfrequente Timer ISR geschoben habe... Doch in einem neuen,
leeren Projekt wo ich nur die rtc und i2c libs eingebunden habe will
der I2C Bus auch nicht so richtig.
Soll heissen das Modul arbeitet (im leeren Projekt) etwa jedes 3. mal -
und im vollen Projekt ca jedes 8. mal einwandfrei.
Ansonsten bleibt mein Controller in der rtc_init() hängen
(SCL bleibt auf High und SDA auf Low).
Verrückt ist nur das wenn ich merke das es nur nach zB. 8 Warmstarts
funktioniert, das es dann immer nach jedem 8. Start klappt.
Und wenn es dann klappt dann kann ich stundenlang mit rtc_read() darauf
zugreifen. Aber wehe die Spannung geht weg oder ich provoziere per ISP
nen Reset, dann darf ich wieder 7x manuell Reset drücken bis die beiden
sich wieder verstehen.
Aufgebaut habe ich momentan einen ATmega8 (8MHz intern) und das RTC
Modul im Breadboard mit 6,8k Pullups am AVR. Geändert habe ich in den
Libs bis auf die Frequenzen (F_CPU und F_SCL von 10kHz - 100kHz )
nichts. Und das verhalten ist an einem anderen TinyRTC Modul exakt das
gleiche.
Weiss jemand wo ich da zuerst schauen könnte / sollte ?
So viel kann ich mit den paar Zeilen und den zwei Adern zur RTC doch
garnicht verkehrt machen ?
Ein Oszi für Busbilder wäre vorhanden, hänge mich gleich mal dran.
Grüße
Mario
1 | #include <stdlib.h>
|
2 | #include <stdio.h>
|
3 | #include <stdint.h>
|
4 | #include <avr/io.h>
|
5 | #include "rtc.h"
|
6 | #include "i2cmaster.h"
|
7 |
|
8 | int main(void)
|
9 | {
|
10 |
|
11 | DDRC = 0x30; // PC0-3 als Eingang, PC4-5 (I2C) als Ausgang
|
12 | PORTC = 0x3F; // Pullups f. Eingänge und I2C AN
|
13 |
|
14 | DDRB = 0xFF; // PB 0-7 als Ausgang
|
15 | PORTB = 0x00; // Alle LEDs aus
|
16 |
|
17 | i2c_init();
|
18 | rtc_init();
|
19 |
|
20 | PORTB |= (1<<PB1); // LED an = RTC Modul ist diesmal einsatzbereit
|
21 |
|
22 | while(1)
|
23 | {
|
24 |
|
25 | } //endwhile
|
26 |
|
27 | } //endmain
|