Ich habe hier im Forum bereits mehrmals gelesen das es möglich ist - auch wenn der verwendete Mikrocontroller keine Hardware SPI hat - eine SPI über die "normalen" I/O Ports mit einer "Software"-SPI zu realisieren. Ist dies wirklich möglich und was ist dabei zu beachten? Ich kann leider keine Code-Beispiele finden, wo ich mir ein Beispiel für den LPC922 nehmen könnte. Vielen Dank im voraus.
Soft SPI geht auf jedem Mikrocontroller. Es werden dann die SPI Signale mit GPIO-Pins nachgebildet. Ist in der Regel nicht so schnell wie Hardware SPI, aber durchaus brauchbar. Bsp., ein SPI-Senderoutine für 8051 (SDCC) könnte so aussehen:
1 | ...
|
2 | #define LCD_CSB P0_1
|
3 | #define LCD_RS P0_2
|
4 | #define LCD_DATA P0_3
|
5 | #define LCD_SCK P0_4
|
6 | |
7 | // ***********************************************************************
|
8 | // Schreiben eines Zeichens an das LCD-Modul (seriell Soft-SPI Mode)
|
9 | // Übergabe: lcd_byte : Auszugebendes Zeichen/Steuerzeichen
|
10 | // lcd_mode : 0 - Daten
|
11 | // 1 - Steuerzeichen
|
12 | // ***********************************************************************
|
13 | void write_lcd(byte lcd_byte, bit lcd_mode) { |
14 | byte stelle; |
15 | LCD_CSB = 0; // LCD-Modul freigeben |
16 | if (lcd_mode) LCD_RS = 0; // Steuerzeichen |
17 | else LCD_RS = 1; // Daten |
18 | |
19 | // Byte senden seriell senden, MSB zuerst (D7 D6 D5 D4 D3 D2 D1 D0)
|
20 | for ( stelle = 0x80; stelle; stelle >>= 1 ) { |
21 | LCD_DATA = lcd_byte & stelle; |
22 | |
23 | LCD_SCK = 0; // Takt |
24 | LCD_SCK = 1; |
25 | LCD_SCK = 0; |
26 | |
27 | }
|
28 | LCD_CSB = 1; // LCD-Modul sperren |
29 | }
|
Vielen Dank Matthias für die schnelle und gute Antwort und besonders für das Codebeispiel. Ich werde versuchen damit eine Verbindung aufzubauen. Ich wünsche dir noch einen schönen Tag. Viele Grüße Eric
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.