PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M32 SPI BUS



copcom-weber
28.10.2010, 12:26
Hallo

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

ISP?

danke

copcom-weber
28.10.2010, 13:15
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?

Dirk
29.10.2010, 19:52
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

copcom-weber
29.10.2010, 21:23
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?

Dirk
30.10.2010, 11:10
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

copcom-weber
03.11.2010, 10:39
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


// 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:
data = SPI_temp_readByte();
und diese fehlermeldung kommt dann.(wird trotzdem ohne schwere fehler compiliert).

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

Dirk
03.11.2010, 21:08
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

copcom-weber
04.11.2010, 11:23
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?

Dirk
04.11.2010, 17:55
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