Guten Abend,
nachdem ich schonwieder einige Tage damit verbracht habe aus
Datenblättern und Codebeispielen schlau zu werden, brauch ich dann doch
leider euren Rat.
Ich möchte einen RTC DS1306 an meinen attiny2313 anschließen. Problem
ist die Kommunikation. Das ganze soll über SPI laufen, also über die USI
Schnittstelle des tiny.
Ich habe nun versucht zwei Methoden zu schreiben für das initialisieren
und das Daten senden zum RTC. Allerdings zweifel ich daran ob das so
funktionieren kann. Da ich es momentan noch nicht ausprobieren kann wäre
ich euch sehr dankbar, wenn ihr einen kurzen Blick auf die paar Zeilen
werfen könntet, um mir zu sagen ob das so alles richtig ist.
Gruß Sanja
1 | #include <avr/io.h>
|
2 | #include <inttypes.h>
|
3 | #include <util/delay.h>
|
4 |
|
5 | //#define CE 4
|
6 | #define MOSI 5
|
7 | //#define MISO 6
|
8 | //#define SCLK 7
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | void SPI_init()
|
14 | {
|
15 | DDRB=~(1<<MOSI);
|
16 |
|
17 | }
|
18 |
|
19 | void rtc_sent(uint8_t w_adress, uint8_t data)
|
20 | {
|
21 | //Daten für Adresse ins Senderegister
|
22 | USIDR = w_adress;
|
23 | USISR = (1<<USIOIF); //Zurücksetzen von Counterwert & Flag
|
24 |
|
25 | do
|
26 | {
|
27 | USICR = (1<<USIWM0)|(1<<USICS1)|
|
28 | (1<<USICLK)|(1<<USITC);
|
29 | }
|
30 | while (!(USISR&(1<<USIOIF)));
|
31 |
|
32 | //Daten für RTCdaten ins Senderegister
|
33 | USIDR = data;
|
34 | USISR = (1<<USIOIF); //Zurücksetzen von Counterwert & Flag
|
35 |
|
36 | do
|
37 | {
|
38 | USICR = (1<<USIWM0)|(1<<USICS1)|
|
39 | (1<<USICLK)|(1<<USITC);
|
40 | }
|
41 | while (!(USISR&(1<<USIOIF)));
|
42 | }
|