www.mikrocontroller.net

Forum: Compiler & IDEs DA-Wandler MAX5354 über SPI


Autor: Stefan Tschiggerl (stefan90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich bin gerade dabei mit einem Mega8 den MAX5354 (DA-Wandler) über SPI 
(habe noch keine Erfahrungen mit dem Bus) anzusteuern. Doch das 
funktioniert nicht so wie es sollte.

Hier erstmal der Code:
#include <stdlib.h>
#include <avr/io.h>

#define MOSI   PB3
#define SCK  PB5
#define MISO   PB4
#define SS  PB2

void SPI_Master_TransmitInit(void)
{
  /* Set MOSI, SS and SCK output, all others input */
  DDRB |= (1<<MOSI) | (1<<SCK) | (1<<SS);
  DDRB &= ~(1<<MISO);
  PORTB |= (1<<SS);
  /* Enable SPI, Master, f = FCPU/16 */
  SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
}

void SPI_MasterTransmit(unsigned long daten, unsigned long daten1)
{
  PORTB &= ~(1<<SS);
  SPDR = daten;
  while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
  SPDR = daten1;
  while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
  PORTB |=(1<<SS);
}

int main (void)
{  
  SPI_Master_TransmitInit();
  SPI_MasterTransmit(00010000, 00001000);

  return 0;
}

Der binär Code von SPI_Transmit sollte (wenn ich das laut Datenblatt 
richtig verstehe) heißen, dass am Ausgang 1/2*Vref anliegen sollten, bei 
5V wären das dann 2.5V. Doch es liegen immer (egal was für einen Wert 
ich da übergebe) ca. 1.0-1.2 V an.

Woran liegt das?
Hardwaremäßig sollte alles passen.

Ich wäre für Hilfen sehr dankbar.

Gruß Stefan

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>SPI_MasterTransmit(00010000, 00001000);

Ich bezweifle, dass der GCC (binäre) Zahlen in diesem Format unterstützt 
- vor allem ohne markierendes Präfix.
Du meinst damit vermutlich:
SPI_MasterTransmit(0x10, 0x08);


>void SPI_MasterTransmit(unsigned long daten, unsigned long daten1)

Die SPI-Daten können eh nur 8bit breit sein - unsigned char reicht 
völlig.

Autor: Stefan Tschiggerl (stefan90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort!

Jetzt seh ich den dummen Fehler auch!

entweder schreib ich
SPI_MasterTransmit(0b00010000, 0b00001000);
oder eben
SPI_MasterTransmit(0x10, 0x08);

Jetzt funktionierts auch, jedoch hab ich immer nur 5V an OUT
und wenn ich 2 mal 0x00 sende, dann wieder die 1.2V

Das verstehe ich dabei nicht, auch wenn ich Vref ändere auf z.B 3.3V 
habe ich noch immer 5V

Wie ist das möglich? Ist da etwas an meiner Hardware falsch?
muss ich den AD-Wandler belasten, damit da die programmierte Spannung 
anliegt?

Gruß
Stefan

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.