-         

Ergebnis 1 bis 4 von 4

Thema: SPI an der C-Control, ist es so richtig?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.09.2005
    Ort
    Dachau
    Alter
    33
    Beiträge
    210

    SPI an der C-Control, ist es so richtig?

    Anzeige

    läuft das programm so?
    ich hab keine SPI komponente da um es zu testen!

    Code:
    '//////////////////////////////////////
    '
    '  Basic++ 
    '  Controller: 	C-Control I Unit M2.0
    '              	Station2
    '  Beschreibung:    Ansteuerung einer SPI-Komponente
    '  Datum:           30.11.07
    '
    '//////////////////////////////////////
     
    OPTION CC2.0  
    
    
    DEFINE SLCK AS BIT      'später durch PORT ersetzten
    DEFINE SDI  AS BIT      'später durch PORT ersetzten
    DEFINE SDO AS BIT       'später durch PORT ersetzten
    DEFINE CS1 AS BIT       'später durch PORT ersetzten
    
    DEFINE data as byte
    
    #main
    init_spi()                                          'SPI INITIALISIERN
    spi(12)                                             'Byte 12 an Bus senden
    data = spi(0)                                       'Byte am Bus lesen
    print data                                          'gelesenes byte ausgeben
    END 
    
    SUB init_spi()                                      'SPI Initialisieren
       CS1 = ON                                         'SPI Slave 1 dekativieren
       'CSn = OFF                                       'ggf. weitere Slaves deaktiveren
       SLCK = ON                                        'Clock Initialisieren
       pause 1
    END SUB
    
    FUNCTION spi(spiodata as byte [3])                'R/W auf SPI
       DEFINE spicount as byte
       DEFINE spiidata as byte [4]
       DEFINE spiibit as bit [32]
       DEFINE spiobit  as bit [24]                    'letztes Bit aus spiodata [BYTE3]
       FOR spicount = 0 to 8
          nop(200)
          SLCK=0 				'Abfallende Flanke des Clocks
          nop(100)
          SDO = spiobit	                              'SDO Bit Setzen 
          spiodata = spiodata shl 1                   'Daten vorbereiten    
          nop(200)
          spiidata = spiidata shl 1                   'Daten vorbereiten
          SLCK=1 				'Steigende Flanke des Clocks
          nop(100)
          spiibit = SDI                               'Daten Einlesen
       NEXT
       RETURN spiidata   
    END SUB
    
    SUB nop(nop_time as byte)                         'Prozessorwartezeit
       DEFINE nop_timecounter AS Byte
       FOR nop_timecounter = 1 to nop_time)
       NEXT
    END SUB
    [/code]
    http://amiwerewolf.am.funpic.de
    Lieber ne Schwester im Puff als nen Bruder mit nem Opel!

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.09.2004
    Ort
    Schwabenland
    Beiträge
    156
    Habe leider gerade keine SPI Komponente zur Hand und habe mich eigentlich noch nie mit SPI beschäftigt. Sieht aber recht einfach aus.
    In der Function SPI würde ich aber die Bytes nicht festnageln und besser define ref at verwenden.
    Code:
    FUNCTION spi(spiodata as byte)                'R/W auf SPI
       DEFINE spicount as byte
       DEFINE spiidata as byte
       DEFINE spiibit ref spiidata at bit[8]
       DEFINE spiobit ref spiodata at bit[8]                    'letztes Bit aus spiodata
       FOR spicount = 0 to 8
          nop(200)
          SLCK=0             'Abfallende Flanke des Clocks
          nop(100)
          SDO = spiobit                                 'SDO Bit Setzen
          spiodata = spiodata shl 1                   'Daten vorbereiten   
          nop(200)
          spiidata = spiidata shl 1                   'Daten vorbereiten
          SLCK=1             'Steigende Flanke des Clocks
          nop(100)
          spiibit = SDI                               'Daten Einlesen
       NEXT
       RETURN spiidata   
    END SUB

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.09.2005
    Ort
    Dachau
    Alter
    33
    Beiträge
    210
    ich habs angefangen fest zu setzten weil ich um ein FAT16 dateisytem aufzuauben viele variablen brauchen werde, evtl. eine c-control alein dazu benutzen weil sie damit ausgelastet ist!
    http://amiwerewolf.am.funpic.de
    Lieber ne Schwester im Puff als nen Bruder mit nem Opel!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    14.03.2008
    Beiträge
    8
    hallo, ich habe deinen code für ccontrol an spi gelesen. ich kenne mich mit dem protokoll nicht aus, benötige es aber zur nutzung eines sprachbausteins. wie ich den design guide (http://www.techs-store.com/support/m...d1700_eman.pdf . hier seite 39) verstehe, muss ich für "play" einen command-und ein data-byte eingeben, also 0x40 und 0x00. könntest du mir freundlicherweise helfen, wie ich deinen code verändern muss um dies zu erreichen?

    ich hab mal angefangen mit: DEFINE ScK port[7] 'später durch PORT ersetzten
    DEFINE SDo port[6] 'später durch PORT ersetzten
    DEFINE ss port[8] 'später durch PORT ersetzten
    DEFINE data as byte
    DEFINE spicount as byte
    DEFINE spiobit as bit [16]'letztes Bit aus spiodata [BYTE2]

    #main
    init_spi() 'SPI INITIALISIERN
    spi(40h) 'Byte 12 an Bus senden
    ss=1 'gelesenes byte ausgeben
    END

    SUB init_spi() 'SPI Initialisieren
    ss = ON 'SPI Slave 1 dekativieren
    'ss = OFF 'ggf. weitere Slaves deaktiveren
    SCK = ON 'Clock Initialisieren
    pause 1
    END SUB

    FUNCTION spi(spiodata as byte [2])
    FOR spicount = 0 to 8
    nop(200)
    SCK=0 'Abfallende Flanke des Clocks
    nop(100)
    SDO = spiobit 'SDO Bit Setzen
    spiodata = spiodata shl 1 'Daten vorbereiten
    nop(200)
    SCK=1 'Steigende Flanke des Clocks
    nop(100)
    NEXT
    END SUB

    SUB nop(nop_time as byte) 'Prozessorwartezeit
    DEFINE nop_timecounter AS Byte
    FOR nop_timecounter = 1 to nop_time
    NEXT
    END SUB

    was muss ich ändern?

Berechtigungen

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