- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 13

Thema: Probleme mit SPI-Schnittstelle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2008
    Beiträge
    7
    Hallo,

    dass der Code ein wenig durcheinander ist, liegt nicht daran, dass es wild zusammenkopiert ist, sondern daran, dass ich das eine Menge rumprobiert habe und dabei die Ordnung habe schleifen lassen.

    Ich habe das Ganze einmal aufgeräumt, siehe unten.

    Das CS funktioniert sicher. erst ist der Pin HIGH, dann setze ich ihn auf LOW und dann wieder auf HIGH. Das habe ich mir mit dem Oszi angeschaut.
    Ich habe einfach mal den SPI-Kram auskommentiert, ein delay zwischen Sensor-aktivieren und Sensor-deaktivieren eingefügt, CS am Oszi angeschaut und das springt eben wie gewünscht HIGH - LOW - HIGH.

    Bei der Clock sehe ich aber leider nichts.

    Ich habe das Gefühl, dass ich vor lauter Bäumen den Wald nicht mehr sehe.
    SPI - Init:
    Code:
    #define SPI_PIN                PINB
    #define SPI_DDR               DDRB
    #define SPI_PORT             PORTB
    
    #define SPI_MISO        PB3    
    #define SPI_MOSI        PB2    
    #define SPI_Clock        PB1
    #define SPI_SS           PB0
    
    SPI_DDR &=~(1<<SPI_MISO);         // miso auf input
    SPI_DDR |= (1<<SPI_Clock);          // clock auf output
    SPI_DDR |= (1<<SPI_MOSI);          // mosi auf output
    SPI_DDR |= (1<<SPI_SS);             // ss auf output
    PORTE |= (1<<PE2);                   // Sensor deaktivieren
    
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPI2X)|(1<<SPR0)|(1<<SPR1)|(1<<CPOL)|(1<<CPHA);    
                                                                    // SPI Enable
                                                                    // Master Select
                                                                    // f_clkio/64
                                                                    // Leading Edge -> Falling
                                                                    // Trailing Edge -> Rising
    Code aus der main:
    Code:
    PORTE &= ~(1<<PE2);                // Sensor aktivieren, CS -> LOW
    _delay_us(10);                          // wait
    SPDR= 0x10;
    while(!(SPSR & (1<<SPIF)));            
    data= (SPDR<<8) & 0x3FFF;        // 8 Bit auslesen
                                    
                                        
    SPDR= 0x01;                            
    while(!(SPSR & (1<<SPIF)));            
    data+= SPDR;                           // Weitere 8 Bit auslesen
    _delay_us(10);                          // wait
    PORTE |= (1<<PE2);                   // Sensor deaktivieren

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    Was ist das für ein µC?

    MfG Hannes

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2008
    Beiträge
    7
    Hallo,

    das ist ein AT90CAN128. Der Sensor ist ein Temperatursensor ADT 7301.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    SPI2X befindet sich im Register SPSR (DORD wäre noch im SPCR Register).

    Versuche es einmal zu ändern.

    MfG Hannes

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2008
    Beiträge
    7
    Hallo,

    das mit dem SPI2X ist mir voll durchgegangen. Ich habe es jetzt mal rausgenommen und lasse das Ganze einfach auf f_clkio/64 laufen nur mit SPR1 gesetzt.

    Leider bringt das noch nicht den erwünschten Erfolg. Auch die Einstellung DORD bringt erst einmal scheinbar keine sichtbare Änderung.

    Ich habe so langsam das Gefühl, dass es irgendwie an dem Sensor liegt oder eben am Zusammenspiel. Wenn ich den Sensor abnehme und das Programm laufen lasse, habe ich in "data" immer eine "Null" stehen. Wenn ich ihn anschließe, scheinen Daten empfangen zu werden, allerdings nur Müll wie es scheint.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    Laut Datenblatt muss das 3te Bit eine 1 sein (Shutdown Bit). Die restlichen 15Bit müssen 0 sein. Bei einem 8Bit Register (wie bei deinem µC) musst du einmal 0x20 senden und dann 0x00.

    MfG Hannes

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.03.2008
    Beiträge
    7
    Hallo,

    das dient ja nur zum schlafen legen. Ich will den Sensor ja nicht schlafen legen. Ich sende jetzt einfach 0x00. Da nur das 3. Bit wichtig ist, sollen die anderen ja null sein. Das 3. Bit ist dann eben auch null, also der Sensor wird nicht schlafen gelegt.

    Ich bin irgendwie soweit, dass ich immer die gleichen Daten empfange, wobei ich allerdings das Gefühl habe, dass der Datenmüll weniger vom Sensor kommt, als mehr durch meine Speicherung und Verarbeitung der Daten.


    Code:
    uint16_t data= 0;
    unsigned char str[8];
    
    /* Daten auslesen */
    
    PORTE &= ~(1<<PE2);                // Sensor aktivieren, CS -> LOW 
    _delay_us(10);                          // wait 
    SPDR= 0x00; 
    while(!(SPSR & (1<<SPIF)));             
    data= (SPDR<<8) & 0x3FFF;        // 8 Bit auslesen                                  
    SPDR= 0x00;                             
    while(!(SPSR & (1<<SPIF)));             
    data+= SPDR;                           // Weitere 8 Bit auslesen 
    _delay_us(10);                          // wait 
    PORTE |= (1<<PE2);                   // Sensor deaktivieren
    
     
    // Daten umrechnen, Formeln aus Datenblatt
    if ((0x2000 & temp_data) == 0x2000)    
    {                                      
        data = (int)(data - 16384)/32;  
    }
    else
    {
        data = (int)(data/32);         
    }
    
    utoa(data,(char*)str,10);
    send(str);

Ähnliche Themen

  1. Probleme mit Asuro IR Schnittstelle
    Von The_Pit im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 09.07.2011, 10:05
  2. probleme mit der RS232 Schnittstelle
    Von FJK im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 01.05.2011, 15:36
  3. SPI- Schnittstelle
    Von spa4fe im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 09.01.2009, 13:29
  4. Probleme mit 4..20mA Schnittstelle
    Von SteffenJ im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 01.08.2007, 16:46
  5. Probleme mit V24 Schnittstelle am PDA
    Von albireo im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 31.07.2006, 23:25

Berechtigungen

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

Labornetzteil AliExpress