Forum: Mikrocontroller und Digitale Elektronik AVR-SPI-Master mit 16 Bit möglich?


von Thomas (Gast)


Lesenswert?

Hey Leute, hätte eine Frage: Ich möchte einen Chip (AS1107) ansteuern 
und muss ihm dafür 16 Bit über SPI schicken. Ist das mit einem AVR 
möglich?
(Bin auf diesem Gebiet noch Anfänger)

von Klaus F. (kfalser)


Lesenswert?

Ja, ohne weiteres.
Das CS-Signal ist unter der Kontrolle des AVR.
Nachdem man das 1. Byte geschickt hat, wird ein weiters geschickt, ohne 
CS nach oben zu ziehen.
Erst danach wird CS wieder auf 1 gesetzt.

von ... (Gast)


Lesenswert?

Klaus Falser schrieb:
> Nachdem man das 1. Byte geschickt hat, wird ein weiters geschickt, ohne
> CS nach oben zu ziehen.
> Erst danach wird CS wieder auf 1 gesetzt.

Dann darfst du aber nicht das CS-Signal der SPI-Einheit nehmen, sondern 
musst einen anderen Pin als CS-Signal missbrauchen, den du dann zu Fuß 
bedienen musst.

Denn wie du richtig bemerkst:

Klaus Falser schrieb:
> Das CS-Signal ist unter der Kontrolle des AVR.

Und der setzt das CS-Signal der SPI-Einheit nach jedem Byte wieder auf 
High.

von Matthias L. (Gast)


Lesenswert?

>Und der setzt das CS-Signal der SPI-Einheit nach jedem Byte wieder auf
>High.

Falls ihr das SS [slave select] Signal meint:

Wenn der AVR im Master-SPI-Modus läuft, setzt er das \SS-Signal nicht 
von allein. Es ist nur entscheidend, dass dieses Pin ein Ausgang ist, 
sonst schlaltet der Master zwischendrin mal auf SPI-Slave um.

von ... (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> Falls ihr das SS [slave select] Signal meint:

Ja, gut, ob SS oder CS, gemeint ist das gleiche. Atmel nennt es SS, 
andere auch mal gerne CS.

Matthias Lipinsky schrieb:
> Wenn der AVR im Master-SPI-Modus läuft, setzt er das \SS-Signal nicht
> von allein.

Aus dem Datenblatt vom ATmega8:

"After each data packet, the Master will synchronize the Slave by 
pulling
high the Slave Select, SS, line."

von Hannes L. (hannes)


Lesenswert?

> Ja, gut, ob SS oder CS, gemeint ist das gleiche. Atmel nennt es SS,
> andere auch mal gerne CS.

Das ist Quatsch!

SS ist Slave-Select. Es schaltet die SPI-Einheit zwangsweise in den 
Slave-Mode, um Multimaster-Kommunikation zu ermöglichen. Es ist 
keinesfalls ein Signal zur Datenübernahme (wie z.B. Strobe) und auch 
kein Chip-Select zur Auswahl eines Busteilnehmers.

...

von Klaus F. (kfalser)


Lesenswert?

... schrieb:
> Aus dem Datenblatt vom ATmega8:
>
> "After each data packet, the Master will synchronize the Slave by
> pulling
> high the Slave Select, SS, line."

Hast Du schon einmal das SPI Interface verwendet? Ich schon.
Also :
SS und CS sind 2 verschiedene Sachen.
- SS ist ein Pin der AVR SPI Einheit und dient dazu, den AVR als Slave 
zu selektieren.
Wenn man den AVR nur als Master verwendet, dann sollte man SS als 
Ausgang konfigurieren, damit die SPI Einheit sich nicht 
fälschlicherweise auf Slave umkonfiguriert. Damit wird der SS Pin zu 
einem beliebigen Ausgang, der natürlich als CS für den anzusprechenden 
SPI-Slave verwendet werden kann.
Aber das Löschen und Setzen des als CS-Signal verwendeten Pins muss der 
AVR per Software machen.
Ein 16 Bit transfer schaut deshalb so aus :
- AVR zieht CS nach unten und wartet ein paar µs, so wie es im 
Datenblatt des Slave angegeben ist.
- Der AVR startet den SPI 8 Bit Transfer und wartet bis er abgeschlossen 
ist.
- Der AVR started den 2. SPI 8-Bit Transfer und wartet wiederum bis zum 
Ende.
- Der AVR wartet noch ein paar µs laut Datenblatt und zieht CS wieder 
nach oben.

von Thomas (Gast)


Lesenswert?

OK, ich glaube, das bekomme ich hin.

Vielen Dank für die raschen Antworten!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.