-         
Ergebnis 1 bis 4 von 4

Thema: Nur bestimmte Array-Daten senden - möglich?

  1. #1

    Nur bestimmte Array-Daten senden - möglich?

    Anzeige

    Hallo BASCOM-Freunde,

    Ich möchte mehrere Digitalpoti per SPI ansteuern. Soweit so gut, habe ich das auch mittlerweile schon gut im Griff.
    Das Problem ist jedoch der Datensatz.
    Ich kann immer nur Daten aus einem Array ab einer bestimmten vordefinierten Stelle senden, aber keine expliziten.

    Als Beispiel:

    SPIOUT Var1(2) , 2

    Damit werden 2 Bytes aus dem Array der Variable Var gesendet, und zwar die 2te und die 3te.
    Soweit so gut.
    Nun möchte ich aber gern, z.B. nur die 1te, die 2te, noch mal die 1te und 2te, dann die 5te und 6te senden.
    Ist so etwas möglich?

    Bei der Kaskadierung der Poti's müssen leider immer zusammenhängende Datenblöcke gesendet werden, da sonst der CS-Ausgang wieder auf Low zieht und die Übertragung beendet wird. Alle weiteren Poti gehen quasi "leer" aus und bekommen vom vorangegangenen Poti nur Nullen.


    Meine Frage daher:
    Ist es möglich, nur bestimmte Array-Zeilen zu senden oder bin ich fest daran gebunden, dass ich immer nur ab einem bestimmten Punkt alle nachfolgenden Daten senden muss?


    Liebe Grüße

    Maik
    Geändert von stardust19322 (13.12.2017 um 18:02 Uhr)

  2. #2
    Hallo,

    ich glaube, ich habe eine Lösung gefunden. Fiel mir beim Schreiben einer Email ein.

    Vielleicht ist es ja möglich, für alle Poti's das gesamte Array zu senden, ohne einzelne Teile aus einem großen Array rauszupicken, und zwar indem ich die Daten im Array selbst verändere.
    Als Ausgangsbasis liegt ja Folgendes zu Grunde:

    Code:
    Do
    
    Poti(1) = &B00010011    'Kommandobyte für Poti1
    Poti(2) = Variable1         'Stellwert für Poti1
    Poti(3) = &B00010011    'Kommandobyte für Poti2
    Poti(4) = Variable2         'Stellwert für Poti2
    usw.ff
    
    SPIOUT Poti(1) , 4
    
    Loop

    Meine Gedanken gehen nun in die Richtung, dass ich das Array im Grunde so belasse, nur neue Variablen und eine kleine Wahrheitstabelle hinzufüge, in etwa so:

    Code:
    Do
    
    Poti(1) = Kommando1
    Poti(2) = Variable1
    Poti(3) = Kommando2
    Poti(4) = Variable2
    usw.ff
    
    If Ereignis1 = 1 then Kommando1 = &B00010011 Else Kommando2 = &B00010000
    If Ereignis2 = 1 then Kommando2 = &B00010011 Else Kommando2 = &B00010000
    
    SPIOUT Poti(1), 4
    
    Loop
    Was denkt ihr? Würde das so funktionieren?


    LG - Maik

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    934
    Hallo Maik,

    Du hast uns leider nicht verraten welches Digitalpoti Du benutzt,
    wenn es aber eines mit DataIn und DataOut ist, dann wird die CS Leitung auf Low gelegt,
    dann schiebst Du generell "ALLE" Daten, für ALLE Potis hintereinander aus und dann wird das CS wieder auf High gelegt.
    Bei der steigenden Flanke an CS werden dann die Daten von allen Potis übernommen.
    Hier musst Du die Reihenfolge in deinem Array entsprechend berücksichtigen.
    Das erste Byte ist dann für das letzte Poti, da dieses ja als erstes ausgeschoben wird und dann immer weitergereicht wird,
    bis es am letzten Poti angekommen ist.
    Zum Verändern eines Potis brauchst Du dann nur das entsprechende Byte in deinem Array ändern, beim nächsten
    Ausschiebevorgang wird es dann entsprechend übernommen.

    Somit ist deine Idee soweit richtig. Wie das in Bascom aber aussieht weis ich nicht, pin Pascaller

    Siro
    Geändert von Siro (15.12.2017 um 07:34 Uhr)

  4. #4
    Hallo Siro,

    deine Annahme war richtig. Die Poti haben einen Data-In und einen Data-Out. Es geht dabei speziell um die MCP42010.
    Wie das Senden der Daten via SPI erfolgt, ist mir mittlerweile, nachdem ich das Datenblatt bestimmt 6mal gewälzt habe, nun auch geläufig ^^. Mein Englisch ist halt gerade so ausreichend für das Nötigste...
    Ein Testprogramm für 2 dieser Poti habe ich eben noch geschrieben - ging sogar verdammt zügig, da ich nicht jedes Mal ein neues Array erstellen musste.
    Mittlerweile werde ich mit den Arrays auch richtig warm. Habe bis Dato halt immer ohne geschrieben ^^.

    Morgen probiere ich das Programm einmal aus.
    Bin mir im Moment nur nicht ganz sicher, ob die Command-Variablen in der Debounce-Subroutine richtig sind. Werde ich morgen aber sehen. Wenn nicht, dann wandern die halt ins Hauptprogramm ^^.

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $hwstack = 40
    $swstack = 32
    $framesize = 60
    
    Config Portb = Output
    Config Portd = Input
    Portd = 255
    
    Config Spi = Soft , Dout = Portb.1 , Ss = Portb.2 , Clock = Portb.3
    Spiinit
    
    Dim A As Byte , Command1 As Byte , Command2 As Byte , Senddata(4) As Byte , Data1 As Byte , Data2 As Byte
    Dim M1 As Bit
    
    M1 = 0
    
    Declare Sub Links
    Declare Sub Rechts
    Declare Sub Pushbutton
    Declare Sub Powerbutton
    
    '                 ********************************
    '                    ****   Main Program   ****
    '                 ********************************
    
    Do
    
    
    '  ---------------------------
    '  SPI-Dataoutput for MCP42010
    '  ---------------------------
    
       Senddata(1) = Command1
       Senddata(2) = Data1
       Senddata(3) = Command2
       Senddata(4) = Data2
    
     Spiinit
    
       Spiout Senddata(1) , 4
    
    
    '  ----------------
    '  Querying Encoder
    '  ----------------
    
     A = Encoder(pind.2 , Pind.3 , Links , Rechts , 0)
    
    
    '  --------------------
    '  Querying Pushbuttons
    '  --------------------
    
     Debounce Pind.4 , 0 , Encoderbutton , Sub
     Debounce Pind.5 , 0 , Powerbutton , Sub
    
    Loop
    
    
    Links:
    
       If M1 = 0 Then Incr Data1
       If M1 = 1 Then Incr Data2
       If Data1 = 255 Then Data1 = 254
       If Data2 = 255 Then Data2 = 254
    
    Return
    
    
    Rechts:
    
       If M1 = 0 Then Decr Data1
       If M1 = 1 Then Decr Data2
       If Data1 = -1 Then Data1 = 0
       If Data2 = -1 Then Data2 = 0
    
    Return
    
    
    Encoderbutton:
    
       Toggle M1
       If M1 = 0 Then
       Command1 = &B00010011
       Command2 = &B00010000
       Elseif M1 = 1 Then
       Command1 = &B00010000
       Command2 = &B00010011
       End If
    
    Return
    
    
    Powerbutton:
    nop
    Return
    
    
    End

    MFG - Maik

Ähnliche Themen

  1. Array aus Bits möglich?
    Von damfino im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 03.11.2015, 12:02
  2. Senden von Daten von RP5 zum PC
    Von Bigboy im Forum Robby CCRP5
    Antworten: 32
    Letzter Beitrag: 15.06.2007, 14:35
  3. Daten an PC senden
    Von martin66119 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 18.03.2007, 13:20
  4. Daten in Array schreiben
    Von infosystems im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 20.10.2006, 08:57
  5. Daten an Avr senden
    Von MAxK im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 01.01.2005, 14:45

Berechtigungen

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