Hallo miteinander, ich hätte da mal eine Verständnisfrage zu einem SPI-DAC vom Type "MCP 4812-E/P" im Datenblatt steht: erst CS auf Low, dann erst das High-Byte und das Low-Byte senden, CS wieder auf High, danach LDAC auf Low und wieder auf High. Die Frage ist, gilt diese Abfolge für jeden Kanal einzeln, oder darf man irgendwie erst beide Kanäle senden/bestücken und dann erst mit LDAC übernehmen? Nähere Infos währen hilfreich. Besten Dank für die Hilfe MFG Modellbahner71
Hallo, es gibt nur ein 16Bit Empfangsregister und Bit15 entscheidet, ob mit LDAC DACA oder DACB gesetzt wird. Wie willst Du da also beide Kanäle drin unterbringen? Im Empfangsregister stehen eben die zuletzt geschickten Daten drin, egal, wie oft Du da was reinschreibst. Gruß aus Berlin Michael
Hans-J. A. schrieb: > Die Frage ist, gilt diese Abfolge für jeden Kanal einzeln, > oder darf man irgendwie erst beide Kanäle senden/bestücken > und dann erst mit LDAC übernehmen? Hallo, LDAC ist gerade dafür gedacht, um die Werte von A und B gleichzeitig zu OUT gingen. Wird das nicht benötigt, kann LDAC auf Null bleiben. Dann wird neue Wert immer nach CS=1 erneuert. Du kannst also Wert für A übertragen, dann Impuls auf LDAC geben, so wird A neu und B wiederholt alten Wert, d.h. ohne sich zu ändern. Du kannst ebenso nur B ändern... Ich habe bischer LDAC ummer auf GND geschaltet, da ich A und B unahängig nutze. Z.B.so:
1 | #define MCP4921_KANA 0
|
2 | #define MCP4921_KANB 0x8000
|
3 | #define MCP4921_SHDN 0x1000
|
4 | #define PORT_CS0 PORTC
|
5 | #define CS0 PC0
|
6 | |
7 | static unsigned int form_puffer_a = MCP4811_KANA | MCP4811_SHDN | 0x0400; |
8 | static unsigned int form_puffer_b = MCP4811_KANB | MCP4811_SHDN | 0x0400; |
9 | |
10 | /*** Kanal A ***/
|
11 | // Wert für A berechnen und in form_puffer_a speichern
|
12 | form_puffer_a = (unsigned int)(tonform[phase_index_a] + 2048) | MCP4811_KANA | MCP4811_SHDN; |
13 | |
14 | |
15 | PORT_CS0 &= ~(1<<CS0); |
16 | SPDR = (unsigned char)(form_puffer_a >> 8); |
17 | while(!(SPSR & (1<<SPIF))); |
18 | SPDR = (unsigned char)form_puffer_a; |
19 | while(!(SPSR & (1<<SPIF))); |
20 | PORT_CS0 |= (1<<CS0); |
21 | |
22 | /*** Kanal B ***/
|
23 | // Wert für B berechnen und in form_puffer_b speichern
|
24 | form_puffer_b = (unsigned int)(tonform[phase_index_b] + 2048) | MCP4811_KANB | MCP4811_SHDN; |
25 | |
26 | PORT_CS0 &= ~(1<<CS0); |
27 | SPDR = (unsigned char)(form_puffer_b >> 8); |
28 | while(!(SPSR & (1<<SPIF))); |
29 | SPDR = (unsigned char)form_puffer_b; |
30 | while(!(SPSR & (1<<SPIF))); |
31 | PORT_CS0 |= (1<<CS0); |
:
Bearbeitet durch User
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.