-         

Ergebnis 1 bis 9 von 9

Thema: M32 SPI BUS

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101

    M32 SPI BUS

    Anzeige

    Hallo

    wo schließe ich ein gerät das an den SPI bus soll an?
    (habe ein M32-modul)

    ISP?

    danke

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    am modul habe ich:

    SCK- SPI Clock
    SDO - SPI data output
    SDI - SPI data input
    CS - SPI enable.

    gefunden an der M32 habe ich:

    Pin | Direction, Master SPI | Direction, Slave SPI

    MOSI | User Defined | Input
    MISO | Input | User Defined
    SCK | User Defined | Input
    SS | User Defined | Input

    SCK ist klar aber der rest?

    kann mir jemand helfen?

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    SCK ist klar aber der rest?
    MODUL ==> M32
    ==============
    SCK- SPI Clock ==> SCK
    SDO - SPI data output ==> MISO
    SDI - SPI data input ==> MOSI
    CS - SPI enable. ==> MEM_CS2 *

    Zu *) Wenn kein EEPROM auf IC5-Position sitzt.

    Gruß Dirk

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    ok danke, nein habe ich kein eeprom also die beiden auch verbinden?

    und den rest s.o. verdrahten.

    und dann mit den bus befehlen aus der beschreibung daten auslesen.

    müssen sonst noch drähte verbunden werden oder irgendwas beachtet?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    müssen sonst noch drähte verbunden werden oder irgendwas beachtet?
    Nee, hardwaremäßig war es das.

    Softwaremäßig kannst du die Routinen der M32-Lib (RP6ControlLib) im Abschnitt "Hardware SPI Interface" so unverändert nutzen.
    Für dein Modul must du noch Lese-/Schreibroutinen schreiben, die zum Modul passen.
    Wie die aussehen, kannst du z.B. für das SPI-EEPROM im Abschnitt "External 32KB SPI EEPROM" ansehen. So ähnlich werden die Routinen für dein Modul auch aussehen. Guck da mal in die Anleitung des Moduls! Überall, wo es um CS geht, müßtest du MEM_CS durch MEM_CS2 ersetzen.

    Gruß Dirk

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    So habe nun alles zusammengebaut und fogendes steht in der anleitung von meinem modul:
    Spi command:

    Command | function
    0xa0 | return current humidity reading (8bit signed number) in %RH
    0xb0 | return current temperature reading (8bit signed number) in °C
    0xc0 | return system status, returns 0xaf when system is idle


    Recieved command | return value | descriptions

    0xb0 | 0xee | the current temperature reading has gone beyond the measuring range
    0xb0 | 0xf5 | the current temperature is -11°c
    0xb0 | 0x10 | the current temperature is 16°c
    0xa0 | 0x32 | the current humdity is 50%RH
    0xc0 | 0xaf | system is in idle

    Note:
    1. The sck frequency of spi interface shall be in range from 3khz to 2mhz.
    2. /cs is low level only when spi interface communication is in process and shall be in high level in any other situations.
    3. The interval of two successive commands shall be greater than 0.2s.


    selber habe ich nun das hier probiert in der controllib.c
    Code:
    // External Temperatur/Feuchtmodul-Modul:
    
    int SPI_temp_readByte(void)
    {
    	uint8_t data;
    	PORTB &= ~MEM_CS2;
    	writeSPI(0xb0);
    	mSleep(200);
    	data = readSPI();
    	PORTB |= MEM_CS2;
    	return data;
    }
    im programm:
    Code:
    data = SPI_temp_readByte();
    und diese fehlermeldung kommt dann.(wird trotzdem ohne schwere fehler compiliert).

    warning: implicit declaration of function 'SPI_temp_readByte'[/code]

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hast du die Funktion SPI_temp_readByte in der Headerdatei deklariert?

    Ich würde die ControlLib auch eher nicht verändern, sondern die Funktionen ins Hauptprogramm nehmen. Ist aber Geschmackssache.

    Gruß Dirk

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    habe das mit der headerdatei auch geklärt aber die werte die dort raus kommen sind quatsch und passen auch nicht zu den ausgaben die s.o. stehen.
    das ergebnis muss ja mit writeIntegerLengthLCD(data,HEX,3) ausgegeben werden oder?
    genau so bei der luftfeuchte, stark schwankende werte und nix passendes.

    ausserdem habe ich gerade gefunden das der SCK der m32 mit 8mhz (cpu/2) läuft, das modul darf aber nicht mehr als 2mhz haben wie ändere ich das?

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    ausserdem habe ich gerade gefunden das der SCK der m32 mit 8mhz (cpu/2) läuft, das modul darf aber nicht mehr als 2mhz haben wie ändere ich das?
    Der SPI-Bustakt wird am Ende der RP6ControlLib.c eingestellt.

    Wenn du dort SPR0 auf 1 setzt (1<<SPR0), dann wird die Quarzfrequenz durch 8 geteilt (16 / 8 = 2 MHz SPI-Bus-Takt).

    Gruß Dirk

Berechtigungen

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