Frage zu USI

OP #4608647
Lesenswert?

Hallo,

ich habe eine Minianwendung in der ich gern einen AD9833 mit einem 
Tiny84 betreiben möchte. Auf dem Breadboard habe ich alles mit nem 
Mega328 und "echtem" SPI erfolgreich getestet. Nun möchte ich ne 
Leiterplatte mit nem Tiny84 machen und das USI nutzen. Ich sehe im 
Datenblatt aber keine Option die Flankensteuerung (beim Mega CPOL und 
CPHA im SPCR Register) einzustellen? Ich benötige Sampling auf fallender 
Taktflanke.

Kann das USI das überhaupt?

EDIT:
Mit:
1
uint8_t Usi_Data ( uint8_t Data )
2
{
3
  USIDR = Data;
4
  USISR |= (1<<USIOIF);
5
  while(!(USISR & (1<<USIOIF))){
6
      USICR |= (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USICS0) | (1<<USITC);
7
  }// 3-Wire-Mode, External negative Edge, Toggle Clock Pin
8
  return USIDR;
9
}
müsste es eigentlich gehen oder?
OP #4608775
Lesenswert?

Habs gerade mal quick&dirty aufm Breadboard zusammengesteckt: Geht, wie 
oben beschrieben. Ob der Clock-Idle-State high oder low ist legt man 
fest indem man den Clock Pin vor Beginn des Datentransvers den Pin per 
Hand auf High oder Low legt.

Clock-Idle-State = High
Sample fallig Edge
1
void Init_SPI ( void )
2
{
3
  // USI IOs
4
  DDRA |= (1<<PA5) | (1<<PA4) | (1<<PA6) | (1<<PA7);
5
  PORTA |= (1<<PA4); // Clock Idle = High
6
}
7

8
static void SPI_Transmit_Byte ( char Data )
9
{
10
  USIDR = Data;
11
  USISR |= (1<<USIOIF);
12
  while(!(USISR & (1<<USIOIF))){ // Sample on fallig edge
13
    USICR |= (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USICS0) | (1<<USITC);
14
  }
15
}

Nicht wundern über die Funktionsbezeichnung, ich habe per #if eine 
Routine für nen Tiny oder AVR
#4609350
Lesenswert?

Hallo Ingo,

warum nutzt du keine vernünftige Programmiersprache? ;-)
Soll es einfach sein oder nach der reinen Lehre?
Die 'C'-Bären mögen mich zerreissen...
Das Ergebnis zählt!

In BASCOM gibt es die Funktionen SERIN() und SEROUT(); da kannst du das
ganze Gedönse einstellen.
Ich betreibe einen AD9850 und AD9851 seit langer Zeit auf diese Art
und Weise mit einem ATTiny85.
Das wirst du doch wohl mit dem AD9833 auch hin bekommen.
Beim ATTiny84 hast du ja noch viel mehr Pins als du brauchst.
Such mal unter DJ7OO, da gibt es jede Menge Info bzgl. AD... usw.

73
Wilhelm

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