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
geht nicht. Maxim hat allerdings eine UART im Programm, die kommuniziert über SPI mit dem MC.
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
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.
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
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.
@ 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.
@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.
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)
Alles klar, bleibe dann wohl bei meiner Software-Lösung, dachte so könnte ich mir etwas Leistung sparen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.