Hallo
ich nutzte derzeit noch aus der Arduino Zeit einen Arduino Uno (ohne auf
die Software zurückzugreifen) sowie ein paar Attiny85(DIP). Ich
programmiere dieses mit einem ISP Adapter in Atmel Studio.
Nun würde ich gerne mal ein paar andere MCUs von Atmel ausprobieren. Das
sind vorallem die Atmegas. Jedoch sind auch ab und zu die ATtiny nicht
uninteressant.
Ich möchte in nächster Zeit eine kleine Uhr für mich basteln. Habe da
auch bereits mit dem Attiny85 ein kleines Programm geschrieben.
Für den Atmega328P (Uno) habe ich damals eine sehr gute Libary für den
DS1307 gefunden. Die Libary soll aber auch mit den DS3231 funktionieren.
Die DS3231 scheinen doch einiges genauer zu sein.
Beim Attiny85 hatte ich das Problem, dass ich die RTC nicht auslesen
kann. Habe daraufhin mit einem 32kHz Quarz gearbeitet und am Timer die
Pulse gezählt. Genauigkeit war ganz in Ordnung. Geht besser, aber für
einen Test okay.
Nur ist das doofe wenn die Spannung kurz weg ist, läuft die Uhr nicht
weiter und gespeichert wird diese auch nicht. Hatte mir überlegt, die
Zeit immer im Eeprom abzulegen, aber dann hab ich auch nur die Zeit wenn
die Spannung einbricht. Für die Zeit wo keine Spannung anliegt, läuft
die Uhr nicht weiter.
So nun zu meiner Frage,
gibt es eine Software I2C Lösung, die keinen I2C Slave/Master als MCU
braucht?
Bislang hab ich diese DS3231 Lib genutzt
https://github.com/akafugu/ds_rtc_lib
Diese enthält alles für die Hardware I2C Lösung (twi.h/c,
twi-lowlevel.h/c)
Die Prototypen für den Hardware I2C sind...
1 | void twi_init_master(void);
|
2 | void twi_init_slave(uint8_t);
|
3 | void twi_begin_transmission(uint8_t);
|
4 | uint8_t twi_end_transmission(void);
|
5 | uint8_t twi_request_from(uint8_t, uint8_t);
|
6 | void twi_send_byte(uint8_t);
|
7 | void twi_send(uint8_t*, uint8_t);
|
8 | void twi_send_char(char*);
|
9 | uint8_t twi_available(void);
|
10 | uint8_t twi_receive(void);
|
11 | void twi_set_on_receive( void (*)(int) );
|
12 | void twi_set_on_request( void (*)(void) );
|
Bislang habe ich im Netz noch keine passende Lösung gefunden, die diese
Funktionen als Softwarelösung unterstützt.
Das einzige was ich gefunden habe ist
i2c_soft_master.c
Autor: Artur Funk |
Last Change 16.11.2007
1 | void i2c_master_init(void);
|
2 | void i2c_master_clk_toggle(void);
|
3 | void i2c_master_start(void);
|
4 | void i2c_master_stop(void);
|
5 |
|
6 | unsigned char i2c_try_scl(unsigned char start_trials);
|
7 | unsigned char i2c_master_write(unsigned char b);
|
8 | unsigned char i2c_master_read(unsigned char a);
|
Die Prototypen sind leider nicht kompatibel.
Schöne wäre es wenn ich später mit einem einfachen #ifdef abfragen kann,
ob es TWI Master Register gibt. Wenn ja, soll die twi.c/h +
twi-lowlevel.c/h geladen werden. Andernfalls twi_soft.c/h +
twi_soft_lowlevel.c/h(Beispiel)
Google habe ich bereits bemüht. Aber das richtige war da noch nicht bei.
Beitrag "I2C / TWI als reine Softwarelösung?"
Beitrag "Software I2C MSP430"
http://extremeelectronics.co.in/avr-tutorials/software-i2c-library-for-avr-mcus/
Beitrag "I2C-Master [ohne TWI (Softwarelösung) für die ATMEGAs"
Das waren auch schon mehr oder weniger die einzigen Sachen, die
Ansatzweise in die Richtung gingen.
Danke schon mal
Chris