mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehler in Maxim AppNote


Autor: J. K. (rooot)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Wie man an dem Thread sehen kann,
Beitrag "MAX7456 SPI - Ansteuerungsprobleme (AVR)"

beschäftige mich grade mit dem MAX7456
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5516


und hätte den Code des AppNote's verwendet.
http://www.maxim-ic.com/appnotes.cfm/appnote_number/4184

1. Stimmt die Zuordnung nicht.
>CS is the same as is used in the MAX7456 data sheet.
>SDIN is referred to as MOSI (master out slave in).
>SDOUT is referred to as MOSI (master in slave out).
>SCLK is referred to as CK.

beides auf MOSI kurzschließen? :-) hab ich denen schon geschrieben.

2. Problem, nicht so offensichtlich:
siehe: Figure 2. Read operation (anhang) und Code von spiReadReg
unsigned char spiReadReg (const unsigned char regAddr)
{

  unsigned char SPICount;                                       // Counter used to clock out the data
  
  unsigned char SPIData;                  
  
  SPI_CS = 1;                                                   // Make sure we start with active-low CS high
  SPI_CK = 0;                                                   // and CK low
  SPIData = regAddr;                                            // Preload the data to be sent with Address and Data

  SPI_CS = 0;                                                   // Set active-low CS low to start the SPI cycle
  for (SPICount = 0; SPICount < 8; SPICount++)                  // Prepare to clock out the Address and Data
  {
    if (SPIData & 0x80)
      SPI_MOSI = 1;
    else
      SPI_MOSI = 0;
    SPI_CK = 1;
    SPI_CK = 0;
    SPIData <<= 1;
  }                                                             // and loop back to send the next bit
  SPI_MOSI = 0;                                                 // Reset the MOSI data line
  
  SPIData = 0;
  for (SPICount = 0; SPICount < 8; SPICount++)                  // Prepare to clock in the data to be read
  {
    SPIData <<=1;                                               // Rotate the data
    SPI_CK = 1;                                                 // Raise the clock to clock the data out of the MAX7456
    SPIData += SPI_MISO;                                        // Read the data bit
    SPI_CK = 0;                                                 // Drop the clock ready for the next bit
  }                                                             // and loop back
  SPI_CS = 1;                                                   // Raise CS
                      
  return ((unsigned char)SPIData);                              // Finally return the read data
}

Laut Bild werden 8 Bits ausgebeben. Das erste Bit muss aber noch beim 8. 
Takt eingelesen werden. Das letzte wird verworfen.

Der Code macht aber was anders. Er ingnoriert das 1. Bit und wertet das 
letzte (unwichtige) aus.

Sehe ich das richtig?

MFG
J.K

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.