Estoy tratando de controlar un potenciómetro digital MCP4131 desde mi Raspberry Pi usando esta biblioteca .
Usando los pines GPIO, estoy "emulando" una interfaz SPI. Llevo el pin ChipSelect a bajo, escribo mi byte y luego lo vuelvo a subir.
Cuando conecto mi medidor en el limpiaparabrisas, obtengo un voltaje constante. No está cambiando. ¿Hay algún problema con mi código en POT.cs
?
class Program {
static void Main(string[] args) {
GPIOMem cs = new GPIOMem(GPIOPins.GPIO_17);
GPIOMem clock = new GPIOMem(GPIOPins.GPIO_23);
GPIOMem sdisdo = new GPIOMem(GPIOPins.GPIO_22);
var pot = new POT(clock, sdisdo, cs);
while (true) {
for (uint level = 0; level <= 127; level++) {
pot.SetValue(level);
Thread.Sleep(100);
}
for (uint level = 127; level >= 0; level--) {
pot.SetValue(level);
Thread.Sleep(100);
}
}
}
}
Pot.cs
public class POT {
private GPIO clockpin;
private GPIO mosipin;
private GPIO cspin;
public POT(GPIO SPICLK, GPIO SPIMOSI, GPIO SPICS) {
clockpin = SPICLK;
mosipin = SPIMOSI;
cspin = SPICS;
}
public void SetValue(uint value) {
Console.WriteLine("here");
cspin.Write(true);
clockpin.Write(false); // #start clock low
cspin.Write(false); // #bring CS low
BitArray b = new BitArray(BitConverter.GetBytes(value));
Console.WriteLine(value);
for (int i = 8; i > 0; i--) {
mosipin.Write(b[i]);
clockpin.Write(true); //cycle the clock
clockpin.Write(false); //yucle the clock
}
cspin.Write(true);
}
}
Tenga en cuenta : los 3 pines GPIO funcionan como deberían.
El MCP4131 utiliza una molesta implementación SPI "multiplexada".
Para escribir en el MCP4131, no puede escribir solo 8 bits. Necesitas escribir 16 bits. Se describen en la hoja de datos.
Querrá usar la dirección 0 (limpiador volátil #0) y el comando 0, siendo los datos su valor precedido por ceros. En otras palabras, registre ocho bits cero antes de su valor y estará bien.
Desearía que Microchip no pusiera todos sus potenciómetros digitales SPI en una hoja de datos. Hace que la hoja de datos sea más difícil de leer.
Además, verifique dos veces el voltaje entre P0A y P0B (los extremos de la resistencia). Si no tiene voltaje allí, cambiar el grifo del potenciómetro no cambiará el voltaje del limpiaparabrisas.
chris stratton
microterio
DoxyLover
Juan U.
chris kooken
cloclpin.write
líneas?microterio
clockpin.Write
. Comience con un sueño de 1 µs más o menos, y si eso funciona, intente moverse hacia el mínimo teórico de 50 ns.chris kooken
chris kooken
marcajes
connor lobo
usuario25675