Ik probeer al een paar uur een digitale potmeter (de mcp4251 dual channel 10K) aan te sturen.
Voor zover ik het begrijp uit de datasheet (pagina 47) kan dit door 8 en 16 bit commando's, met de 16 bit zou je gewoon de waarde moeten kunnen doorgeven. Maar bij mij werkt het niet, ik communiceer met een microcontroller (een 18f4520) werkend op 20mhz (maar de SPI werkt op een lagere frequentie).
Ik heb ook een led aangesloten, die knipper netjes om de seconde (tussen de momenten dat de data word verzonden) dus de code loopt wel. De mcp4251 geeft echter altijd een voltage van 1,814 op beide wipers (De A pinnen zijn op 5 volt aangesloten, de B op de GND). De microcontroller is aangesloten op de mcp4251 zoals in de code aangegeven, alleen weet ik niet wat ik met de SHDN pin moet, als ik die op de GND aansluit geeft hij op beide pinnen wipers 0V, anders die 1,814V.
De code is geschreven in mikroc, het is de bedoeling dat de onderstaande code de eerste wiper halverwege insteld (totale bereik is 257). De code is gebaseerd op het voorbeeld van mikroc voor de spi module.
Het commando dat word verstuurd is dus:
0000 0000
1000 0000
wat naar mijn idee zou moeten werken, dit is namelijk hoe volgens een ander forum de commando's moeten worden opgebouwd:
Basically you are going to be sending bytes down the SPI bus t your chip. You can send either 8 bit commands or 16 bit commands. In either case the 4 most significant bits of the command are an address. The table on page 48 of the datsheet lets you know that an address 0x00 (hex 0) is wiper 0, and 0x01 is wiper 1. The next 2 bits determine the command, and if required the next 10 bits are data. Does that make sense?
Voor zover ik het begrijp uit de datasheet (pagina 47) kan dit door 8 en 16 bit commando's, met de 16 bit zou je gewoon de waarde moeten kunnen doorgeven. Maar bij mij werkt het niet, ik communiceer met een microcontroller (een 18f4520) werkend op 20mhz (maar de SPI werkt op een lagere frequentie).
Ik heb ook een led aangesloten, die knipper netjes om de seconde (tussen de momenten dat de data word verzonden) dus de code loopt wel. De mcp4251 geeft echter altijd een voltage van 1,814 op beide wipers (De A pinnen zijn op 5 volt aangesloten, de B op de GND). De microcontroller is aangesloten op de mcp4251 zoals in de code aangegeven, alleen weet ik niet wat ik met de SHDN pin moet, als ik die op de GND aansluit geeft hij op beide pinnen wipers 0V, anders die 1,814V.
De code is geschreven in mikroc, het is de bedoeling dat de onderstaande code de eerste wiper halverwege insteld (totale bereik is 257). De code is gebaseerd op het voorbeeld van mikroc voor de spi module.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| // spi module connections sbit Chip_Select at RC0_bit; sbit SoftSpi_CLK at RC3_bit; sbit SoftSpi_SDI at RC4_bit; sbit SoftSpi_SDO at RC5_bit; sbit Chip_Select_Direction at TRISC0_bit; sbit SoftSpi_CLK_Direction at TRISC3_bit; sbit SoftSpi_SDI_Direction at TRISC4_bit; sbit SoftSpi_SDO_Direction at TRISC5_bit; // End spi module connections unsigned int value; void InitMain() { TRISB = 0b00000000; // all pins on PORTB are Output pins TRISC = 0b00000000; // all pins on PORTC are Output pins CMCON = 7; // all pins digital Chip_Select = 1; // Deselect Chip_Select_Direction = 0; // Set CS# pin as Output Soft_SPI_Init(); // Initialize Soft_SPI } void Output() { Chip_Select = 0; // Select chip delay_us(5); Soft_SPI_Write(0x00); // Send high byte via Soft SPI Soft_SPI_Write(0x80); // Send low byte via Soft SPI delay_us(5); Chip_Select = 1; // Deselect chip delay_us(5); } void main() { InitMain(); // Perform main initialization while (1) { // Endless loop Output(); // Send value to chip Delay_ms(1000); // Slow down key repeat pace PORTB = ~PORTB; // to check if the code is running } } |
Het commando dat word verstuurd is dus:
0000 0000
1000 0000
wat naar mijn idee zou moeten werken, dit is namelijk hoe volgens een ander forum de commando's moeten worden opgebouwd:
Basically you are going to be sending bytes down the SPI bus t your chip. You can send either 8 bit commands or 16 bit commands. In either case the 4 most significant bits of the command are an address. The table on page 48 of the datsheet lets you know that an address 0x00 (hex 0) is wiper 0, and 0x01 is wiper 1. The next 2 bits determine the command, and if required the next 10 bits are data. Does that make sense?