Forum: Mikrocontroller und Digitale Elektronik CLK des SPI beim AVR beeinflussen


von Stephan R (Gast)


Lesenswert?

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?

von holger (Gast)


Lesenswert?

>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?

von Stephan R (Gast)


Lesenswert?

holger schrieb:
> Wo ist das Problem?

Ich find das irgendwie unelegant.
Ist denn das der einzige Weg?

von Antwort schreiben (Gast)


Lesenswert?

>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.

von holger (Gast)


Lesenswert?

>>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........

von Stephan R (Gast)


Lesenswert?

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...

von holger (Gast)


Lesenswert?

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.

von Stephan R (Gast)


Lesenswert?

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..

von holger (Gast)


Lesenswert?

//////////////////////////////////////////////////////////////////////// 
//////
//////////////////////////////////////////////////////////////////////// 
//////
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;
  }
}

von Stephan R (Gast)


Lesenswert?

Wow, sieht supi aus! Bin beeindruckt!
Kanns heut nicht mehr testen aber werd berichten!
Danke & gut N8

von Lästermaul (Gast)


Lesenswert?

Du bist ja nur faul, oder war das zu schwer?

von Stephan R (Gast)


Lesenswert?

Die Loesung von Holger ist faul. Genial faul.

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.