Hallo! Ich moechte das Audio-Modul SOMO-14D ansteuern. Dies kommuniert über eine einfache serielle Schnittstelle, sie verlangt nach CLK und DATA. Ich moechte diese gern über die SPI des At2560 ansteuern, jedoch verlangt das Modul als Startkennung, dass CLK für gewisse, kurze Zeit auf high- bzw low liegt. Daher Frage: kann ich bei aktivierter SPI den Pegel von CLK noch beeinflussen?
>Daher Frage: kann ich bei aktivierter SPI den Pegel von CLK noch >beeinflussen? Du kannst wann immer du willst das SPI Modul wieder abschalten und dann CLK als IO Pin benutzen. Danach SPI wieder einschalten. Wo ist das Problem?
holger schrieb: > Wo ist das Problem? Ich find das irgendwie unelegant. Ist denn das der einzige Weg?
>Daher Frage: kann ich bei aktivierter SPI den Pegel von CLK noch >beeinflussen? Kommt drauf an, was Du unter "aktiviert" verstehst. Der Takt legt erst los, wenn es irgendwas zu senden gibt, d.h. etwas in das TX-Datenregister geschrieben, nicht dann wenn /CS aktiv gemacht wurde. Bei den meisten (allen?) SPIs kann die CLK-Phase und Inaktiv-Polarität konfiguriert werden.
>>Du kannst wann immer du willst das SPI Modul wieder >>abschalten und dann CLK als IO Pin benutzen. >>Danach SPI wieder einschalten. >Ich find das irgendwie unelegant. >Ist denn das der einzige Weg? Was ist daran unelegant? Das sind 10 Zeilen Code. Kommen wir halt darauf zurück: >Daher Frage: kann ich bei aktivierter SPI den Pegel von CLK noch >beeinflussen? Du kannst evtl. die SPI Frequenz so weit runter drehen das das mit deinem Timing passt. Dann schreibst du einmal 0x01 ins SPDR und auf CLK kommen 8 Pulse. Möchte dein Modul das? Wenn nein beginne wieder bei Null. SPI Modul abschalten........
Antwort schreiben schrieb: > Bei den meisten (allen?) SPIs kann die CLK-Phase und Inaktiv-Polarität > konfiguriert werden. Danke, das ist es natürlich! Der idle-state laesst sich per Bit im Steuerregister ändern. Mal forschen ob´s klappt...
Wenn ich mir das Datenblatt mit den Timings so ansehe würde ich mir das mit dem SPI Modul sparen. Das ist mit simplem Pin wackeln in 10 Minuten programmiert.
holger schrieb: > Wenn ich mir das Datenblatt mit den Timings so ansehe > würde ich mir das mit dem SPI Modul sparen. > Das ist mit simplem Pin wackeln in 10 Minuten programmiert. > > > > Beitrag melden | Bearbeiten | Löschen | Gerade, weil im Datenblatt ausschließlich Min- und keine Max- Zeiten vorgegeben sind, hielt ich das gerade für einfach (aussehend). Ich habe mich auch schon daran versucht, die Steuerung per Pinwackeln zu realisieren aber ich habe keine (kompakte) Funktion hinbekommen, stattdessen bin ich über gigantische switch-Verzweigungen verzweifelt. Vielleicht ein guter neuer Ansatz: Wie müsste eine Funktion aussehen, die ein uint_8 übergeben bekommt und nach jedem Takt (CLK-Pinwackeln) den DATA-Pin gemäß übergebenem Wert wackelt? Bin gespannt..
//////////////////////////////////////////////////////////////////////// ////// //////////////////////////////////////////////////////////////////////// ////// void SoftSPIWriteSlow(uint8_t data) { uint8_t mask = 0x80; while(mask) { if(data & mask) { SPI_MOSI_HI; } else { SPI_MOSI_LOW; } SPI_SCK_HI; _delay_us(2); SPI_SCK_LOW; _delay_us(2); mask >>= 1; } }
Wow, sieht supi aus! Bin beeindruckt! Kanns heut nicht mehr testen aber werd berichten! Danke & gut N8
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.