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
Den Eingang als Ausgang zu definieren ist nicht erfolgversprechend:
1 | DDRA = (1<<DDA4) | (1<<DDA5) | (1<<DDA7); /*Pin PA4 USCK, PA5 DO, PA7 DI |
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.
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
> 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.
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!
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.
Seite 125. Ok, ist kein C-Code sondern Assembler-Schnipsel.
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.
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)
Im Preview des Simulators V2 (im aktuellen Studio) könnte USI vielleucht funktionieren. Zumindest klingen die Release-Notes so.
Na und? Das USI ist gleich. Üb damit und wende die Erkenntnis beim 84 an.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.