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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.