-         

Ergebnis 1 bis 3 von 3

Thema: SPI Verbindung zwischen Atmega644 & atmega8 läuft nicht stabil

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332

    SPI Verbindung zwischen Atmega644 & atmega8 läuft nicht stabil

    Anzeige

    Hallo Zusammen,

    ich habe derzeit immer noch Ärger mit meiner SPI Verbindung zwischen einem Atmega644 (20MHz) und einem Atmega8 (16Mhz).

    Selbst wenn ich die Taktrate des Bus auf f/128 setze, habe ich zeitweise Aussetzer.

    Ich verwende hier die folgende Routine (http://www.roboternetz.de/community/...l=1#post575383)
    Ich habe diese Routinen teilweise optimiert, kann aber den Fehler immer noch nicht eingrenzen.

    Klar ist, das das Programm am Slave

    Code:
               //Slave transmitter ============================================================================
    
                if(m_buffer_adr != NULL)                                // Buffer set up ?
                {
                    if(m_NumberOfBytesToSend > 0)                        // do we have to send bytes still
                    {
                        SPDR = *m_buffer_adr;                            // send the data byte
                        m_buffer_adr++;                                    // get the next byte of the buffer
                        m_NumberOfBytesToSend--;                        // dec. counter of byte to send
                    }
                    else
                    {
                        m_buffer_adr=NULL;                                // Clear Buffer Pointer
                        SPDR=0x0;                                        // No more values in the buffer
                    }
                }
                else
                {
                    m_buffer_adr=NULL;                                    // Clear Buffer Pointer
                    SPDR=0x0;                                            // No more values in the buffer
                }
    in den Bereich
    Code:
    m_buffer_adr=NULL;                                // Clear Buffer Pointer
    SPDR=0x0;
    kommt. Obwohl Daten zu übertragen sind. In der Anzeige ändert sich der Anzeigewert dann auf 0.

    Hier könnte sein, das
    a) mir ein Zeichen am Master unterwegs verloren geht
    b) der Slave ein Kommando nicht mitbekommt und somit
    den Adresspointer nicht setzt/falsch setzt.

    Hat jemand noch eine Idee, wie ich der Sache näher komme.

    Info zur Hardware.

    - Bis jetzt habe ich nur die SPI Verbindung auf meiner Steuerplatine in Betrieb genommen.
    Hierbei sind die Leitung auf der Platine ca. 2-3 cm. lang.
    Die Leitungen verlaufen aber noch zu zwei Stecker (ca. nochmals 3cm)

    - Ich habe keine Pull-Ups oder Serienwiderstände in die MISO/MOSI/CLK eingebaut.

    - Ich habe Software-Pullups mal eingeschaltet und mal nicht zu Testzwecken
    (ohne Erfolg)

    Ein Logikanalyser zeigt mir meist korrekte Werte an, da hier aber sehr viele Protokolle laufen,
    ist es schwer den Wert zu treffen. Es scheinen aber Bit verloren zu gehen oder die Übertragung
    nicht mehr Synchron zu laufen.

    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Zitat Zitat von Ritchie Beitrag anzeigen
    Hat jemand noch eine Idee, wie ich der Sache näher komme.
    In dem du Mal den relevanten Quelltext zeigst anstelle von einem kleinen Snippet in dem sich das Problem auswirkt? Deine Fehlerbeschreibung deutet für mich viel eher auf einen Fehler im Anwendungscode (Pointer falsch initialisiert etc.) hin als auf einen SPI-Fehler.

    Der zweite else-Zweig ist übrigens reichlich unnötig. Wenn dein Pointer null ist, musst du ihn nicht nochmal nullen.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hallo Markus,

    Du hattest recht. Es war ein Applikationsfehler.
    Der Master hat zu viele Daten für einen bestimmten Parameter angefordert, hierdurch war die Übertragung nicht mehr syncron.
    Zudem hatte/habe ich einen Hardwarefehler. Ein Temperaturwert spinnt wirklich. Vermutlich hat der Pullup eine kalte Lötstelle.
    Danke für die Hilfe. Manchmal sieht man den Wald eben und nicht den Baum.


    Gruss R.
    Geändert von Ritchie (09.04.2013 um 22:24 Uhr)
    Kaum macht man es richtig, schon funktioniert's ...

Ähnliche Themen

  1. ATMega8 mit L293 läuft nicht
    Von juli94 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 27
    Letzter Beitrag: 18.08.2009, 20:17
  2. Fehler bei Verbindung zwischen PC u. ATmega8 via LPT
    Von Foooob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 15.05.2008, 01:01
  3. rcall läuft auf Atmega8 nicht
    Von Dolfo im Forum Assembler-Programmierung
    Antworten: 7
    Letzter Beitrag: 01.12.2007, 17:25
  4. ATmega8 läuft nicht ???
    Von Gucky im Forum AVR Hardwarethemen
    Antworten: 14
    Letzter Beitrag: 14.07.2007, 19:55
  5. Diplomarbeit: Verbindung zwischen PDA und B&R SPS!
    Von doolitle15 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 12.11.2005, 21:17

Berechtigungen

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