SPI über USI am aTTiny2313, problem

Gast #1910301
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren