- SF800 Solar Speicher Tutorial         
Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 62

Thema: ASM für SPI .. ist das richtig so?

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2005
    Ort
    Erfurt
    Alter
    59
    Beiträge
    134
    Anzeige

    E-Bike
    Hab mir gerade mal diesen ASS-Code angeschaut,
    sieht sehr vernünftig aus, vielleicht findest Du so scheller die Ursache:

    http://www.mikrocontroller.net/forum/read-4-21765.html


    Wenn Dein Programm dann vernünftig läuft, könntest Du es ja auch veröffentlichen ...viele würden sich darüber freuen, nicht nur meiner einer

    Gruß

    Bernhard


    PS: es ist immer günstiger, wenn der komplette Code veröffentlicht wird, manchmal ist die Ursache für ein Fehlverhalten an einer ganz anderen Stelle zu suchen (Bsp: reti, Stack, Interrupt, Timing-Probleme)

    Auch der Code für den Slave ist hier nicht ganz unbedeutend.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    09.02.2006
    Ort
    Bamberg
    Alter
    40
    Beiträge
    6
    Hi,

    also ich hab vor kurzem auch ne routine in ASM geschrieben zur CAN übertragung. Ich werd aber nicht so ganz schlau aus deinem Thread:

    Wie genau sieht denn deine Schaltung aus, was genau versuchst du zu senden, welchen CAN Controller verwendest du ( 2515 ? ) und hast du die Möglichkeit zur Kontrolle mit dem Oszi oder Logic Analyzer ? Oder woher weißt Du wie oft was übertragen wird ?

    Wie ist dein CAN Controller konfiguriert, welchen Bustreiber hast Du, passt das Bit Timing , ...


    Also für mich hört sich das stark danach an, dass deine gesendete CAN Nachricht nicht von der Gegenseite verstanden wird, kein ACK gesendet wird und somit der CAN-Controller die Nachricht so oft sendet, bis sie verstanden wird (ausser Du arbeitest in OSM ?)

    Oder sendest du die Nachricht schon öfters, sie wird auch verstanden, Du kannst sie auslesen aber beim n-ten mal dann eben nichtmehr ??

    Gib uns doch einfach nochmal ein bisschen mehr Informationen - wie schon gesagt eventuell auch den kompletten relevanten Code - dann kann man dir bestimmt helfen


    Mfg Markus

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    >> Oder sendest du die Nachricht schon öfters, sie wird auch verstanden, Du >> kannst sie auslesen aber beim n-ten mal dann eben nichtmehr ??

    Genau so ist es. Innerhalb der ersten paar Sekunden kommt alles an (nur im OSM).

    Hier mein Thread:
    http://www.mikrocontroller.net/forum...25202.html#new
    Dort hab ich mich schon exakter gefasst.


    Im Moment glaube ich sogar dass ein mcp2515 nicht ganz sauber läuft, denn ich habe beide mal getauscht und es zeigt sich ein anderes Verhalten als vorher. Hab schon neue mcp's bestellt...

    Hat niemand einen funktionierenden Code in ASM? Wenn es dann mal irgendwann funzt, werd ich den Code natürlich veröffentlichen.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2005
    Ort
    Erfurt
    Alter
    59
    Beiträge
    134
    >Hat niemand einen funktionierenden Code in ASM? Wenn es dann mal >irgendwann funzt, werd ich den Code natürlich veröffentlichen.

    Zeig uns doch mal Deinen, damit wir sachlich mitdiskutieren können, sonst orakeln wir doch nur

    Scheint wirklich ein Software-Problem zu sein

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Hallo!

    Ich habe die abgespeckte aktuelle Version im Anhang. Am PC kann ich über HTerm sehen, dass 2 Bytes ankommen: 11001100 und 00110011
    Danach ist Ruhe. Wenn empfangen wird leuchtet auch kurz die Empfangs-LED (PortA, 0) synchron zur Sende-LED.

    Sollte es doch ein SW Problem sein?

    Habs eigentlich gut dokumentiert...
    Angehängte Dateien Angehängte Dateien

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2005
    Ort
    Erfurt
    Alter
    59
    Beiträge
    134
    Mir ist was aufgefallen:

    ; MESSAGE TRANSMISSION (periodic)
    send:
    .
    .
    .
    sbi PortB, 4 ; release /CS
    ; define ID (Std. ID High)
    cbi PortB, 4 ; /CS pull down
    .
    .

    Füge doch mal eine kleine Pause zwischen sbi... und cbi... ein, denn die Impulslänge beträgt nur wenige µs und das kann zu Hardware-Problemen führen

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Stimmt. Ist ne gute Idee. Ich habs mal mit mehreren NOPs versucht. Gebracht hats allerdings nichts. Werds aber drin lassen. Und wieder ein Fehler weniger... Danke!

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2005
    Ort
    Erfurt
    Alter
    59
    Beiträge
    134
    Ich weiß, bei solchen Fehlern kann man leicht verzweifeln und an den

    Rand des Wahnsinns getrieben werden

    Das Hauptproblem ist bei Dir, dass Du es gleich mit 2 µC zu tun hast, also gleich mit 2 Fehlerquellen.

    Versuche doch mal den Fehler etwas einzugrenzen.


    Leider habe ich mich noch nie tiefgreifend mit SPI beschäftigt,

    wenn Du mir/uns mal ganz kurz den Grundmechanismus der SPI-

    Übertragung erklären könntest, dann finden wir vielleicht den Fehler

    schneller?


    Bernhard

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2005
    Ort
    Erfurt
    Alter
    59
    Beiträge
    134

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Hi Bernhard

    Bin aber auch Neuling mit SPI. Das angefügte Blatt aus dem Datasheet des mcp veranschaulicht das ganz gut.
    Grundsätzlich wird der Slave immer mit auf Low-gehaltener /SS Leitung aktiviert. Danach legt man irgendein Byte in das Register SPDR:
    out SPDR, temp
    Sobald das Register gefüllt ist, gibt der AVR automatisch das Byte raus, mit gleichzeitiger Taktschaltung am SCK-Pin. Sobald das letzte der 8 Bit raus ist, hört auch der Takt wieder auf zu schlagen. SPDR ist nun wieder frei. Dabei wird auch das SPIF-Flag gesetzt. Wenn man es also nach dem Beschreiben von SPDR zyklisch abfragt, weis man wann SPDR wieder frei ist:
    wait_spi:
    sbis SPSR,SPIF ; Transmission complete?
    rjmp wait_spi

    Damit man wieder etwas in SPDR schreiben kann muss das Bit vorher wieder von Hand gelöscht werden. Das geht z.B. durch Auslesen des SPDR:
    in temp2, SPDR ; release SPIF by reading Register

    Der SPI ist ein Ringpuffer. Bei rausgehen eines Bytes kommt eins "von draussen" gleichzeitig rein. Es ist ein Kreis. Meist hat das reinkommende aber keine Bedeutung (z.B. wenn man nur was senden will).
    Will man was von "draussen" holen, muss man irgendetwas senden um danach das empfangene Byte nur noch zu lesen.

    Das ist das grobe Geschehen.Wenn noch Fragen, oder mehr Details. Bitte, ich bin hier!

    viele Grüße
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken spi2.jpg   spi.jpg  

Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen