ATTINY 85 und MCP41100 digitales Potentiometer

Gast #4206745
Lesenswert?

Hallo,

ich möchte das digitale Potentiometer MCP41100 über den ATTINY85 
ansteuern. Ich hätte das folgendermaßen gemacht(siehe angehängte Datei). 
Allerdings hat mich folgender Forenbeitrag etwas verwirrt: 
Beitrag "SPI am attiny2313 initialisieren"

Kann man wirklich nicht den SCK-PIN des ATTINY mit dem SCK-PIN des MCPs 
verbinden und ist es wirklich nicht möglich den SI des MCPs über den 
MOSI des ATTINY zu steuern?

Danke schon mal in Vorraus!
Angehängte Dateien:
Gast #4206763
Lesenswert?

Hallo Peter

Ich verstehe deine Frage nicht ganz. Natürlich kannst du die beiden SCK 
pins miteinander verbinden. Vielmehr musst Du diese verbinden! Neben dem 
reinen Datensignal benötigt deine Gegenstelle natürlich das Clocksignal, 
um die Daten interpretieren zu können. Im Gegensatz zur 
UART-Schnittstelle, bei welcher beide Teilnehmer vorher auf eine 
geneimsame Taktfrequenz eingerichtet werden müssen, kann der Master hier 
durch das Clock-Signal einen Takt vorgeben.

Ich würde llerdings noch externe PullUp's an den SPI-Leitungen 
verwenden. Ansonsten ist deinme Schaltung okay. Sollte etwas nicht 
klappen, dann liegt es an der Software und nicht an der Beschaltung.
#4206764
Lesenswert?

Peter,

du hast doch als Programmierer jede Freiheit die benötigten Portpins 
frei zu wählen.

Merke ein attiny85 ist kein attiny2313.

Auf das USI-SPI Interface greife ich nie zurück und steuere meine 
"SPI-Geräte" direkt an.

Laut Datenblatt des MCP41100
http://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf
benötigst Du nur 3 Signale #CS, SI und SLK

Dann kann man auch sehr einfach das Timing aus Bild5-1:
"Timing Diagram for Writing Instructions or Data to a Digital 
Potentiometer"
realisieren.
Gast #4207105
Lesenswert?

Danke für den Hinweis, dann kann ich mich ja ans Löten machen.

Hier mein kleines Testprogramm (ich programmiere den ATTINY über einen 
Arduino UNO):

#include <SPI.h>

const int csPin = 1;

void setup()
{
  pinMode(csPin, OUTPUT);
  SPI.begin();
}

void loop()
{
  PotWrite(0, 0);
  delay(1000);
  PotWrite(0,256);
  delay(1000);
}


void PotWrite(int address, int value)
{
  digitalWrite(csPin, LOW);
  SPI.transfer(address);
  SPI.transfer(value);
  digitalWrite(csPin, HIGH);
}
#4207120
Lesenswert?

Dass sich PB5 bei Arduino "1" schimpft glaube ich dir jetzt einfach mal. 
Aber was meinst du mit address (=0)?
Laut DB des DigiPots muss im ersten Byte der Befehl (Wert setzen oder 
Shutdown) und die Auswahl des Potis (beim 41XXX immer Nummer 0) stehen. 
Eine Adresse gibt es da nicht.
Zum setzen des Potis müsste da also 0x11 hin.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren