Forum: Compiler & IDEs SPI über USI Schnittstelle des Tiny84


von Julian D. (maelcum)


Angehängte Dateien:

Lesenswert?

Hallo AVR Experten,

ich habe folgendes Problem:

Ich möchte den DA-Wandler TLV5638 über SPI mit meinem Tiny84 ansprechen.
Ich mache, dass eigentlich auch genauso, wie im datasheet angegeben ist.
Im der Simulation im AVR Studio, sehe ich jedoch, dass mein 4bit counter 
nicht hochzählt, in der Praxis tut es ebenfalls nicht. Ich bekomme also 
nie einen overflow und das USIDR Register wird auch nicht geschoben.
Ich habe mir auch schon die verschiedensten application notes (app 307, 
319) von avr angesehen und meine, dass die das genauso machen, wie ich.
Was habe ich vergessen?
Sieht vielleicht jemand von euch meinen bug?
Wäre super!!!
Vielen Dank im Voraus!

MfG
Julian

von A.K. (Gast)


Lesenswert?

Den Eingang als Ausgang zu definieren ist nicht erfolgversprechend:
1
DDRA = (1<<DDA4) | (1<<DDA5) | (1<<DDA7); /*Pin PA4 USCK, PA5 DO, PA7 DI

von A.K. (Gast)


Lesenswert?

Bin auf deinen falschen Kommentar reingefallen. PA7=CS. Dann stimmts 
dieser Teil.

Bei deinem SPI dürfte der AVR Master sein. Dazu passt dein Code 
allerdings überhaupt nicht, denn bei einem USI als SPI Master wird der 
Takt per Software erzeugt. Nochmal ins Datasheet reinsehen und den 
richtigen Codeschnipsel finden.

von Julian D. (maelcum)


Angehängte Dateien:

Lesenswert?

Entschuldigung, jetzt sollte der Kommentar aber stimmen


A.K. wrote:
> Bei deinem SPI dürfte der AVR Master sein. Dazu passt dein Code
> allerdings überhaupt nicht, denn bei einem USI als SPI Master wird der
> Takt per Software erzeugt. Nochmal ins Datasheet reinsehen und den
> richtigen Codeschnipsel finden.

Ich muss dir leider widersprechen,
wenn ich im USICR USICLK=1 setze aktiviere ich die Software clock und 
über den Befehl USITC=1 wird der Clock port getoggelt.
Da ist doch mein avr ein master. Oder muss man den avr noch anders als 
master definieren?

MfG
Julian

von A.K. (Gast)


Lesenswert?

> wenn ich im USICR USICLK=1 setze aktiviere ich die Software clock
> und über den Befehl USITC=1 wird der Clock port getoggelt.

Kein Widerspruch. Ich sehe bloss nirgends wo du ihn toggelst, ausser ein 
einziges Mal in der Initialisierung des Registers. Dein Missverständnis: 
Der toggelt sich nicht selber (eben "software clock", nicht "hardware 
clock"), da ist pro Bit 2xUSITC fällig. Und genau das steht schön 
beschrieben im Datasheet.

von Julian D. (maelcum)


Angehängte Dateien:

Lesenswert?

Vielen Dank für diese Erkenntnis!#
Stimmt das, dass sich im Avr studio dieses toggeln nicht simulieren 
lässt?
ZUmindest tut bei mir immer noch nicht.
Könntest du vielleicht dir nochmals den code anschauen?
Ich toggle jetzt 2mal pro zyklus.

Danke!

von Julian D. (maelcum)


Lesenswert?

ach was ich noch sagen wollte:

Im Datasheet steht nur, was passiert, wenn ich USITC=1 setze, aber 
nicht, wie und wann ich es setzen muss. Ist auch kein code dabei.

von A.K. (Gast)


Lesenswert?

Seite 125. Ok, ist kein C-Code sondern Assembler-Schnipsel.

von Julian D. (maelcum)


Lesenswert?

Danke für deine Hilfe.

von Julian D. (maelcum)


Lesenswert?

Ich glaub ich steh brutal auf dem schlauch, auch wenn ich usíclk setze 
und toggle, bei mir zählt der 4bit counter nicht hoch.
Muss man den irgendwie noch anders intialisieren?
Seufz.

von Joerg X. (Gast)


Lesenswert?

Im Simulator funktioniert kein USI, kein TWi, kein ADC, kein AD-Comp (in 
der Hilfe unter "Known Issues")
Schau mal hier: 
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
Note: "AVR319" "Using the USI module for SPI communication", mit C-Code 
(kein GCC, ist aber nicht so schlimm)

von A.K. (Gast)


Lesenswert?

Im Preview des Simulators V2 (im aktuellen Studio) könnte USI vielleucht 
funktionieren. Zumindest klingen die Release-Notes so.

von FBI (Gast)


Lesenswert?

... Simulators V2 ...

der kann aber keinen ATtiny84 :(

von A.K. (Gast)


Lesenswert?

Na und? Das USI ist gleich. Üb damit und wende die Erkenntnis beim 84 
an.

von Julian D. (maelcum)


Lesenswert?

Genau, das wars.
Der SPI Master funktioniert.
Nur das Simulieren tut nicht.
Vielen Dank für eure Hilfe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.