PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Bascom und SPI



quadratfluss
26.06.2006, 10:16
Hallo zusammen,

ich arbeite mit einem AtMega8l und mit der Bascom Software zur
Programmierung. Ich möchte nun über das implementierte SPI Protokoll
die Register von dem Agilent Chip auslesen. Mit dem vorhandene Befehl
spimove() und manupulationen des SPCR Registers sollte das
funktionieren. Ich bekomme auch ein akzeptabeles Signal am
Mikrocontroller heraus. Nur zum Einlesen der Informationen über den
MISO gibt der Controller kein Taktsignal heraus und ich kann die
Informationen auch nicht weiterverarbeiten. Vielleicht hat jemand eine
Idee oder ein Seite mit ausführlichen Informationen über die SPI
Befehle bei BASCOM

PicNick
26.06.2006, 10:53
Schau dir mal das NOSS = 1/0 an und im Datasheet die Paragraphen über den SS-Pin. Der Pin kann dir ev. in die Suppe spucken.

quadratfluss
27.06.2006, 10:35
Erstmal danke für die Antwort,

die Eintellungen für den SS-Pin habe ich entsprechent dem Datenblatt vorgenommen und der Oszilloskop bestätigt es. Der Agilent Chip reagiert auch, der Mikrocontroller kann die Daten aber nicht verwenden.
Was meinst Du mit NOSS, habe dieses Register nicht gefunden.

Viele Grüße
Nils

PicNick
27.06.2006, 11:08
NOSS ist ein parameter vom Bascom "CONFIG SPI"

Aufpassen auch mit polarity und phase, aber das ist beim Senden und Empfangen eigentlich gleich

quadratfluss
27.06.2006, 13:38
Ich verwende bei BASCOM den Software SPI und da gibt es diese Option nicht. Außerdem wenn ich es richtig verstanden habe, kann man damit nur den Takt komplett ausschalten. Der Sensor braucht aber einen Takt.

PicNick
27.06.2006, 13:48
Ah so, andere Baustelle.

An dem Pin für "CLOCK" tut sich bei SPIIN nix ?
SPIINIT hast du verwendet ?

Kannst du dein "CONFIG SPI=SOFT ...." und dein SPIIN() mal herzeigen ?

Du sagst, Senden geht tadellos ?

quadratfluss
27.06.2006, 14:05
Ja das Senden funktioniert tadellos. Ich habe es auch schon mit spiin und spiout probiert. Wobei spiin kein ergebnis liefert.

mfg
Nils

PicNick
27.06.2006, 14:51
Wird dich nicht interessieren, aber der SPIMOVE sieht eigentlich koscher aus. Er bewegt die richtigen Pins (datenübernahme mit der fallenden Flanke) und sollte auch eine Clock ausgeben.



SPIMOVE:
LDI r16,0x08
L_0x0136: (Loop)
LSL r24 Sende/Empfangs Datenbyte
BRCC L_0x013E
SBI PORTC,PC3 Daten Out pin 1
RJMP L_0x0142
L_0x013E:
CBI PORTC,PC3 Daten Out pin 0
NOP
L_0x0142:
SBI PORTC,PC2 CLock High

SUBI r16,0x80
L_0x0146:
SUBI r16,0xE0
BRLO L_0x0146
CBI PORTC,PC2 CLock Low
SUBI r16,0x80
L_0x014E:
SUBI r16,0xE0
BRLO L_0x014E
SBIC PINC,PINC1 Lesen DIN
INC r24
DEC r16 zählen 8 Bit
BRNE L_0x0136 Loop
RET fertig (r24 = Input)


Da muß es was mit den Pins haben, SPIINIT setzt sie richtig .

Vielleicht ist das ganze auch zu schnell für das Gerät ?

Kunki
28.06.2006, 19:43
Hallo quadratfluss,

ich hatte so ein ähnliches Problem. Es hat sich gezeigt, dass man besser das Hardware- Spi nehmen sollte (meine Meinung). Mit dem kannst man Master oder auch Slave werden. Soweit ich weiss, ist das Software- SPI immer nur Slave in Bascom.
Am besten ist, wenn du das SPCR Register selbst beschreibst (Spcr= 86). Im Dateblatt von Atmega is das noch mal genauer beschrieben. Dann müsste es mit dem Senden und Empfangen klappen. Du musst nur aufpassen, dass der SS Pin auch beim Senden (Master) "High" ist.
Ich hoffe ich hab Dir ein wenig geholfen:).
Alex