- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Digital-Poti via SPI und ATMega ansteuern - aber wie? Komplettes Neuland!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo Sauerbruch.

    Danke sehr, dass du dir die Zeit genommen hast, mir so ausführlich und überaus hilfsbereit zu antworten. Weiß ich sehr zu schätzen.

    Sicher hast du recht - ich habe die BASCOM-Hilfe bislang noch nicht genutzt. Mein Problem ist halt mein Schulenglisch in Verbindung mit einer sehr miesen, ländlichen Datenverbindung. Ich muss beinahe jedes 3te Wort nachschlagen, und nicht selten braucht eine Seite bis zu 1min zum Laden. Da geht eine ganze Menge Zeit ins Land, und bislang haben mich nur 2 Dinge davon abgehalten, alles hinzuschmeißen: Mein eiserner Wille mich zu verbessern, und eure Hilfsbereitschaft. Danke dafür.


    Da ich die Bauteile erst in der Praxis testen kann (habe kein geeignetes Testboard zur Verfügung), würde ich gern im Vorfeld einen Fehler vermeiden.
    Ich habe dich nun so verstanden, dass ich beim Anschluss mehrerer Slaves an den Controller nur jeweils einen Controller-Pin parallel an die anderen Slaves legen brauche, nämlich die Pins "Clock" und "Slave Select". Lediglich der Pin "Data out" wird seriell angeschlossen, also in etwa: Controller -> Slave_1 -> Slave_2 -> etc.pp. So gesehen also nur 3 Pin für beliebig viele Endgeräte. Ist das so korrekt?

    Verdammt - ich habe tatsächlich vergessen, das Bauteil zu nennen. Es handelt sich hierbei um MCD 42010, wobei "010" wohl für den K-Ohm Wert stehen dürfte.

    Das mit dem Array habe ich noch nicht so ganz verstanden. Für mich sieht das so aus:
    Ich lege beispielsweise ein Array mit 6 Bytes an, lege die 6 Bytes fest und starte die Übertragung an 3 Slaves, dann wird also nicht das einzelne Byte übertragen, sondern die gesamte Variable mit den darin geschriebenen Bytes? Somit landen dann also die ersten beiden Bytes (Var A (1) und Var A (2) ) im in dem in der Reihenfolge am weitesten vom Controller entfernten Slave, die mittleren beiden im mittleren Slave und die letzten beiden im Controller-ersten Slave?

    In meiner derzeitigen Vorstellung würde das so ausschauen, dass ich eine Zählvariable erzeuge, die per Tastendruck rauf oder runter zählt. Der neue Wert wird dann sofort in das Array geschrieben und sobald der neue Wert nicht mehr mit dem hinein bereits im Array befindlichen Wert überein stimmt, wird eine Übertragung gestartet. Kann man dies so machen?
    leider habe ich diese Woche keine Programmier-Hardware dabei, wodurch ich keinen Code ausprobieren kann. Bei meinem letzten Programm war ich so in der Materie, dass ich den Code unterwegs schreiben und dann daheim nur überspielen brauchte, aber das hier ist für mich komplettes Neuland.

    Danke im Voraus für eure Hilfen und Mühen.


    LG - Maik

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Hey Maik,

    Oh je, wenn sich die Seiten soooo langsam bei Dir aufbauen, werde ich mal versuchen, mich auf 10 nicht allzu lange Sätze zu beschränken

    Da ich die Bauteile erst in der Praxis testen kann (habe kein geeignetes Testboard zur Verfügung), würde ich gern im Vorfeld einen Fehler vermeiden.
    Das geht doch auch ohne spezielle und teure Testboards! Ich entwickle und teste eigentlich alle meine Mikrocontroller-Anwendungen auf einem ganz normalen Labor-Steckboard. Das erspart einem unangenehme Überraschungen, und für etwa 10 Euro bist Du dabei:

    http://www.pollin.de/shop/dt/NDI4OTg...teckboard.html
    http://www.pollin.de/shop/dt/Mjk5ODg...65_teilig.html

    Die Verdrahtung ist genau wie Du es beschrieben hast:
    Der als Clock definierte Anschluss des Controllers geht bei allen 3 Potis auf Pin 2 (SCK), Ss des Controllers geht dementsprechend dreimal auf Pin 1 (CS), nur Dout wird "durchgeschleift", d.h. beim ersten Poti bei Pin 3 rein (SI für "Serial In"), bei Pin 13 wieder raus (SO für "Serial Out") und von dort in´s zweite Poti usw. Im Datenblatt ist auf Seite 20 genau dieser Aufbau skizziert.

    Nun muss man noch wissen, dass man dem MCP42010 immer zwei Bytes senden muss, um eine Einstellung vorzunehmen: Ein sogenanntes Kommandobyte und ein Datenbyte. Das Kommandobyte sagt dem Chip, was man von ihm will (z.B. Poti 1 einstellen, Poti 2 einstellen o.Ä.), und das Datenbyte entspricht dann dem einzustellenden Wert.

    Beim Kommandobyte sind nur die Bits 5, 4, 1 und 0 von Bedeutung. Mit den Bits 5 und 4 wird festgelegt, ob entweder ein neuer Wert eingestellt werden soll (Bit 5 = 0, Bit 4 = 1), oder das Poti "abgeschaltet" werden soll (Shutdown-Modus: Bit 5 = 1, Bit 4 = 0). Mit den Bits 1 und 0 sagst Du dem Controller, welches der beiden Potis denn gemeint ist. Für Poti 1: Bit 1 = 0, Bit 0 = 1, für Poti 2: Bit 1 = 1, Bit 0 = 0, für beide Potis: Bit 1 = 1, Bit 0 = 1.

    Wenn Du also z.B. einen neuen Wert für Poti 1 senden willst, muss das Kommando-Byte &b00010001 sein.
    Da Du ja wahrscheinlich den Shutdown-Modus nicht brauchst, sondern den Potis i.d.R. immer nur aktuelle Werte zuweisen wirst, dürftest Du mit den drei Kommandobytes &b00010001 (neuer Wert für Poti 1), &b00010010 (neuer Wert für Poti 2) und &b00010011 (neuer Wert für Potis 1+2) auskommen.

    Und nach dem Kommandobyte folgt dann gleich das Datenbyte, mit dem die eigentliche Einstellung des ausgewählten Potis erfolgt.

    So, nachdem ich nun das halbe Datenblatt auf deutsch übersetzt habe, noch zwei Beispiele, dass es vollständig klar wird:

    Poti 1 soll auf die Mittelstellung (128ste von 255 Stufen) gebracht werden:

    Code:
    Dim A(2) as Byte
    A(1)=&b00010001
    A(2)=128
    
    Spiout A(1), 2
    Und wenn Du beide Potis auf 90% stellen willst (229ste von 255 Stufen) ginge das so:

    Code:
    Dim A(2) as Byte
    A(1)=&b00010011
    A(2)=229
    
    Spiout A(1), 2
    Und wenn Du drei Chips hintereinanderhängst, musst Du die Prozedur verdreifachen:

    A(1) = Kommandobyte für Chip Nr. 3
    A(2) = Datenbyte für Chip Nr. 3
    A(3) = Kommandobyte für Chip Nr. 2
    A(4) = Datenbyte für Chip Nr. 2
    A(5) = Kommandobyte für Chip Nr. 1
    A(6) = Datenbyte für Chip Nr. 1

    Spiout A(1), 6

    Ich würde das ganze mal auf einem Steckboard aufbauen und mich mit ein bisschen Code & ´nem Ohm-Meter vertraut mit der Materie machen. Und das Datenblatt runterladen & lesen

  3. #3
    Sauerbruch: Wärst du eine Frau und ich nicht verheiratet, ich hätte dir einen Antrag gemacht
    Spaß beiseite - ich bin ehrlich mehr als beiegstert. Auch wenn du dies sicher schon öfter geschrieben hast, so hilfst du mir so dermaßen weiter, das kann ich gar nicht wieder gutmachen.
    So sind nun keine Fragen mehr offen.
    Als ich den Beitrag das erste mal durchlas und beim ersten Beispiel ankam, fragte ich mich, warum da bei "Spiout a(1), " eine 2 hinter stand. Als du dann die Kommandokette für 3 der Controller schriebst, hatte ich das erst gescheckt, dass mit der Ziffer die Anzahl der zu übertragenden Befehlszeilen gemeint ist ^^. Ich Dummchen . Bei mir dauern solche Sachen immer ein wenig länger - offenbar sitzt da ein Knoten zwischen Auge und Gehirn-Synapsen

    Ein Steckboard habe ich, sogar das ganz große. Bislang hatte ich immer Probleme, die Programmieranbindung direkt auf das Board zu bringen, weshalb ich den Controller auf dem Eva-Board programmierte und dann umsetzte.

    Werde deinen Rat aber sauber befolgen und am Wochenende mal ein Testprogramm fertig machen.

    Dank deiner Hilfe kann ich nun auch weitaus mehr anstellen. Statt einfach nur Bass und Lautstärke, wäre auch eine Kanal-Absenkung (Fading) problemlos machbar.


    Dankedankedankedankedanke dir noch einmal recht herzlich. Die Seite speichere ich mir gleich ab ^^.


    LG - Maik

Ähnliche Themen

  1. Wie ein AD5263 Digital Poti per SPI ansprechen ?
    Von Ceos im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 02.03.2009, 11:51
  2. Atmega 162 16 PU 0702H ISP, aber wie ...
    Von Ceos im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 24.01.2008, 10:52
  3. Antworten: 8
    Letzter Beitrag: 17.04.2006, 21:28
  4. SPI...aber wie?
    Von full_metall_bunny im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 28.08.2005, 10:56
  5. SPI...aber wie?
    Von full_metall_bunny im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 25.07.2005, 22:27

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test