Hallo miteinander! Ich habe folgendes Problem: Ich möchte mit einem AVR mega128 über SPI ein Device ansprechen, welches laut Datenblatt allerdings nur eine Maximalgeschwindigkeit von 40KHz unterstützt. Der uC allerdings läuft mit 16MHz und hat meines Erachtens einen Prescaler von höchstens 128, was immer noch 125KHz SPI Clock bedeuten würde. Also was tun jetzt? Kann man die USART verwenden? Selbst implementieren? Wie ist das mit zeitkritischen Problemen? Vielen Dank! hubert.
Hmmm....Du bist dir schon im Klaren darüber, dass man den mega128 auch mit anderen Takten laufen lassen kann??? (siehe Fuse-Bits, anderer Quarz)
Wenn der Systemtakt so hoch sein muss, habe ich nur eine Idee: schiebe die Daten mit dem SPI-Takt in ein Schieberegister (z. B. 74HC595) und takte langsam die Daten zu deinem Device. MW
Wie wäre es mit Software-SPI (nebenbei im Timer-Interrupt)? Oder ein effizienteres Programm, das eine vernünftige Taktrate ermöglicht? ...
Danke! @SeppK: Bin ich mir im Klaren. Er soll aber so schnell laufen... @HanneS: Das mit Software-SPI klingt gut. Sind da fertige Bibliotheken verfügbar (am besten in C)? Danke! hubert.
> Das mit Software-SPI klingt gut. Sind da fertige Bibliotheken > verfügbar (am besten in C)? Hmmmm... Ist es denn so schlimm, in einem Timer-Interrupt, der sicherlich noch andere Aufgaben nebenher erledigen kann, einen Taktimpuls an einem Pin zu erzeugen und den zugehörigen Logikpegel an einen anderen Pin zu legen und einen Logikpegel von einem anderen Pin einlesen? Braucht man dazu eine fertige Bibliothek? ...
@hannes lux: ich kenne das problem manchmal liesst man daten ein, die so schnell kommen dass man mit 1 mhz einfach nicht mehr hinkommt.
> ich kenne das problem manchmal liesst man daten ein, die so > schnell kommen dass man mit 1 mhz einfach nicht mehr hinkommt. Das mag bei größeren Projekten schon mal der Fall sein, aber auch da kann man durch geschickte Interrupt-Programmierung die Rechenleistung optimal nutzen. Um Missverständnisse zu vermeiden: Ich rede von Assembler und habe mit dem Mega128 noch nicht gearbeitet. ...
Hi Der m128 besitzt ein XDIV register, evtl. könntest du für die Zeit der Übertragung die Taktfrquenz verringern. Nach meiner Rechnung könnte man 41,67 kHz erreichen. Meinesachtens stimmt aber die Formel im Datenblatt nicht. Ich würde mal mit Fclk/(128-XDIV) rechnen. MfG HG
Hi Ich muß mich korrigieren: Die Formel im Datenblatt stimmt. MfG HG
Hi > Ich kenne das problem manchmal liesst man daten ein, die so > schnell kommen dass man mit 1 mhz einfach nicht mehr hinkommt. SPI ist ein synchroner Bus, das verpasst Du gar nichts, wenn Du über den Clock nichts einliest. Das kannste mit 1Hz oder mit 1MHz einlesen, ist egal. Im Anhang findest Du den C-Source für die Ansteuerung eines SPI FRAM's von Ramtron. Bitte häng mich nicht daran auf. Der Code habe ich mal für einen raschen Test geschrieben und ist nicht überarbeitet. (Geschrieben für einen H8S-2378 Renesas Controller) Vielleicht kannst Du ja was davon brauchen. Musst übrigens in Deiner Applikation aufpassen, das Du den richtigen SPI Mode verwendest. (Steht im Datenblatt) Mein Code verwendet Mode 3. Gruss Andy
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.