Hardware SPI

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hardware SPI

      Hallo,

      ich experimentiere gerade mit Hardware SPI

      Bei dem Atemega 168 ist:

      B.3 Mosi
      B.4 Miso
      B.5 SCK

      Das Spcr Register definiere ich folgendermaßen

      Quellcode

      1. 'SPCR (SPI Controlregister) (Kommunikation z.B. mit Datenflash)
      2. ' |--------0 = Interrupt aus,/ 1 = Interrupt an
      3. ' ||-------1 = SPI enable
      4. ' |||------0 = MSB first / 1 = LSB first
      5. ' ||||-----1 = SPI Master / 0 = SPI Slave
      6. ' |||||----0 = SCK ist 0 wenn Idle Mode
      7. ' ||||||---0 = L/H Flanke
      8. ' |||||||--0 = '00=/4 01=/16 10=/64 11=/128
      9. ' ||||||||-1 = AVRClock /16 (Fusebit 7 = 0)
      10. Spcr = &B01010000

      Wenn ich nach der Definition des Spcr Registers den PortB.1 oder den PortB.2 ansprechen will geht das nicht. PortB.0 geht.
      Vor der Defintion des Spcr Registers kann ich B.1 und B.2 ansprechen

      Es scheint also so, dass die Spcr Definition auch B.1 und B.2 betrifft.
      Weiß da etwas näheres drüber. Ich finde im Datenblatt leider nichts
      Komisch:Dauernd hängt sich mein Rechner auf, meine Wäsche macht das nie
    • Hallo Michael,
      über SPI kommuniziere ich mit einem RFM12 Modul. Das habe ich schon öfter gemacht und funktioniert auch.
      Jetzt ist mir nur aufgefallen dass ich B1 und B2 nicht als Ausgänge benutzen kann, wenn ich die SPI Funktion
      über die Hardware Funktion des Controllers mache.

      Die Bascom SPI Befehle benutzen nicht die Hardware SPI Funktion des Controllers. Ist das richtig?

      Ich kannte die Bascom SPI Möglichkeit bisher noch nicht. Ich beschäftige mich zu wenig mit der Bascom Hilfe
      und lese viel im Datenblatt des Controllers. Werde aber mal ein wenig mit der Bascom Funktion spielen.
      Komisch:Dauernd hängt sich mein Rechner auf, meine Wäsche macht das nie
    • Climber schrieb:

      Jetzt ist mir nur aufgefallen dass ich B1 und B2 nicht als Ausgänge benutzen kann, wenn ich die SPI Funktion
      über die Hardware Funktion des Controllers mache.
      Das ist jetzt schwierig, dir da die korrekte Antwort zu geben, dazu müsstest du dein Programm posten.

      Climber schrieb:

      Die Bascom SPI Befehle benutzen nicht die Hardware SPI Funktion des Controllers. Ist das richtig?
      das kann ohne Programm leider nicht mit einem Satz beantwortet werden.

      Climber schrieb:

      Ich beschäftige mich zu wenig mit der Bascom Hilfe
      Die Bascom Hilfe ist besser als viele erwarten bzw. von anderen Hilfen (z.B. Windows) kennen.

      Prinzipiell können die freien (nicht-SPI) Ports auch frei verwendet werden, PortB.2 (SS bei Atmega168) ist mit Bedingungen auch frei.
    • Hallo Michael,
      mir geht es aktuell nur darum mein Verständnis bezüglich SPI zu verbessern Ich habe schon ein paar RFM12 Module im Einsatz
      und es gab immer ein paar kleine Probleme die immer etwas Mühe bereiteten.
      Ich habe mir gerade mal Deinen Beispielcode der RFM12 Module angeschaut. Dort wird die SPI Kommunikation komplett von Hand gemacht.
      Du benutzt da auch keinen Bascom High Level Befehl. Darf ich fragen warum.

      Wenn ich mich richtig erinnere habe ich das auch schon mal bei einem Projekt gemacht. Das hat dann aber nur funktioniert als der Controller
      mit 8 MHZ lief. Als ich aus stromspargründen auf 1 MHZ umgeschaltet habe lief das damals nicht mehr. So bin ich auf die Hardware SPI gekommen.
      Ich experimentiere jetzt einfach mal ein wenig , das Ziel ist einfach eine Basis zu haben welche ich verstehe und welche ich dann immer wieder gebrauchen kann. Den fertigen Code stelle ich dann bei meinem Projekt Klingelverstärker ein.
      Geht bei mir leider alles etwas länger, da mein "Bascom Bastel Zeitkonto" doch sehr bescheiden ist.
      Komisch:Dauernd hängt sich mein Rechner auf, meine Wäsche macht das nie
    • Climber schrieb:

      Du benutzt da auch keinen Bascom High Level Befehl. Darf ich fragen warum.
      Die Ansteuerung des RFM12 war aus einem alten Projekt von Holli, ich hab es damals in mein Projekt übernommen und erweitert.
      Zwischendurch habe ich andere Projekte, die darauf aufbauen mit Hardware-SPI realisiert.
      Hier die Initialisierung des SPI:

      BASCOM-Quellcode: SPI Hardware-Init RFM12

      1. Sub Activate_rfm12
      2. Call Deactivate_all_spi_units
      3. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1 , Spiin = 0
      4. Spiinit
      5. Spcr.0 = 1
      6. Spcr.1 = 1
      7. Spsr.spi2x = 0
      8. Reset Rfm12_ce
      9. End Sub
      Die beiden unteren Bits des SPCR bestimmen die Taktfrequenz, hier habe ich es händisch auf /128 eingestellt, da Config diese Lösung nicht bietet und weil der RFM12 sehr langsam bei SPI ist (max 2MHz)

      Climber schrieb:

      Das hat dann aber nur funktioniert als der Controller
      mit 8 MHZ lief. Als ich aus stromspargründen auf 1 MHZ umgeschaltet habe lief das damals nicht mehr.
      SPI ist ein sehr gutmütiges Protokoll, welches sehr langsam immernoch funktioniert, weil es seinen Takt selber mitbringt.
      Ich kann mir deshalb dein Problem nicht als SPI-Problem einordnen, da ist sicher was anderes schief gelaufen.

      P.S.: Bei der SPI-Initialisierung in Hardware unbedingt den SPI-Hardware-SS-Pin vorher auf Ausgang setzen.
    • Michael schrieb:

      Die Ansteuerung des RFM12 war aus einem alten Projekt von Holli,
      Nein, ist nicht nicht von mir. Ist im Original von Elektor, siehe Anhang. Und es ist richtig, diese Software macht alles mit Bitbanging, so wie es auch der meiste C-Code gemacht hat.

      Die Ansteuerung von mir basiert eigentlich nur auf den SPI-Befehlen, außer bei denen wo es nicht anders ging. Aber ich hatte da auch alle möglichen Versionen von Senden und Empfangen programmiert die mit den RFM möglich waren. Es waren insgesamt so ca. ein Dutzend Versionen die möglich sind.
      Dateien
      • Elektor RFM12.bas

        (4,54 kB, 49 mal heruntergeladen, zuletzt: )