www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI-Schnittstelle


Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Hätte mal ne Frage zur SPI-Schnittstelle und zwar hat schonmal jemand 
davon gehört ob man mit dieser Schnittstelle eine asynchrone 
Schnittstelle, zwecks kommunikation mit dem PC, nachbilden kann? Hab' 
ich mal so gehört das das ginge, kann mir jedoch nicht vorstellen wie 
das gehen soll, da man bei der SPI doch aufgrund der synchronen 
Übertragung einen Takt braucht. Das ganze müsste ohne großen 
Hardwareaufwand zu bewerkstelligen sein (falls es überhaupt geht).

Danke schonmal!!!

Gruß,

Ralf

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht nicht. Maxim hat allerdings eine UART im Programm, die kommuniziert 
über SPI mit dem MC.

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR320: Software SPI Master (5 pages, updated 5/02)
The Synchronous Peripheral Interface (SPI) is gaining rapidly in 
popularity, allowing faster communication than I2C. For the smaller AVR 
Microcontrollers, which do not have hardware SPI, this Application Note 
describes a set of low-level routines for software implementation. These 
can be used as the basis for communicating with Atmel's 25xxx family of 
Serial EEPROM memories, as well as a host for other peripheral ICs such 
as display drivers. See Software section to download avr320.asm.

Gefunden in www.atmel.com

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und was hat das bitte mit der asynchronen (Rs232) zu tun? Rein gar 
nichts. Es ging um die Frage, ob man mit der (Hardware)SPI auch eine 
asynchrone Verbindung hinbekommt, zumindest verstehe ich die Frage so. 
Und das geht nicht.

Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja genau, es geht um die nutzung der Hardware SPI als asynchrone 
Schnittstelle. Das Problem ist nur, es darf nichts kosten und nicht zu 
groß sein (wie immer). Hatte auch schon gedacht, dass es nicht geht. 
Aber irgentwelche Tricks gibt's ja immer (außer hier wahrscheinlich). 
Werde also um die Software UART nicht herum kommen.

Danke für die schnellen Antworten!!!

Ralf

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer richtig lesen kann ist klar im Vorteil

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die SPI als direkten UART Ersatz zu benutzen funktioniert mit Sicherheit 
nicht. Es ist jedoch möglich, die Schieberegister der SPI in einem 
Halbduplex für das Datenbyte zu missbrauchen. Ob diese Lösung allerdings 
Vorteile gegenüber einem reinen Software-UART bringt mag dahingestellt 
sein, mal ganz abgesehen von den stark eingeschränkten Möglichkeit in 
Bezug auf einstellbare Baudraten.

Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ mikki: Kannst Du mir das noch etwas genauer erklären. Der Halbduplex 
Betrieb und die einstellbaren Baudraten wären kein Problem (sind fix mit 
9600 Baud vorgegeben). Es geht sich nur um eine Realisierung, die 
möglichst wenig CPU-Leistung kostet und ich habe die SPI noch frei.

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ralf
Die Baudrate 9600 ist zwar realisierbar, aber der CPU-Takt muss dann 
z.B. beim AVR 9600*128 = 1,2288 MHz betragen. Im Sendebetrieb muss das 
Startbit nach wie vor per Software generiert werden. Für die Übertagung 
der 8 Datenbit wird nun das SPI Schieberegister genutzt, indem man das 
zu sendende Byte in das SPI Data-Register schreibt. Vorherige 
Initialiserung der SPI nicht vergessen. Die Stop-Bits müssen dann wieder 
auschliesslich per Software erzeugt werden. Beim Empfänger ist die 
Nutzung noch etwas komplizierter, da hier auch an die Generierung des 
SPI Clocksignals berücksichtigt werden muss. Also in der Summe ein 
erheblicher Aufwand an Code für recht geringe Vorteile.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Quarzfrequenz dürfte dann nur 1,2288 MHz (9600*128) betragen. Dann 
doch lieber volle Power und die Sache per Software erledigt, oder? 
Weitere Probleme tauchen beim Startbit auf, der SPI-Empfang muß nach ca. 
156µs nach Startflanke beginnen, beim Senden muß das Startbit/Stopbit 
auch per Software erzeugt werden. Wird gerade gesendet, geht ein evtl. 
ankommendes Byte den Bach runter. Da ist alles nix, und wenn du noch 
einen Timer frei hast, bleibt auch die CPU-Zeitbelastung in Grenzen. 
26µs Timerinterupt (baud/4), geschickte ISR-Programmierung, dann merkst 
du nicht allzuviel davon. Evtl. ist es ja auch möglich, die vorhandene 
UART zu multiplexen (falls nicht zeitgleicher Betrieb auf 2 Kanälen 
erforderlich ist)

Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar,

bleibe dann wohl bei meiner Software-Lösung, dachte so könnte ich mir 
etwas Leistung sparen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.