www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-SPI zu schnell, was tun?


Autor: Hubert F. (hubsif)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: SeppK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit Software-SPI (nebenbei im Timer-Interrupt)?
Oder ein effizienteres Programm, das eine vernünftige Taktrate
ermöglicht?

...

Autor: Hubert F. (hubsif)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

...

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@hannes lux: ich kenne das problem manchmal liesst man daten ein, die so
schnell kommen dass man mit 1 mhz einfach nicht mehr hinkommt.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

...

Autor: Hartmut Gröger (hardygroeger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hartmut Gröger (hardygroeger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich muß mich korrigieren: Die Formel im Datenblatt stimmt.

MfG HG

Autor: Andreas Häusler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.