mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Übertragung bei SPI


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich plage mich seit ein paar Tagen mit einer Schaltung herum, aber 
irgendwie wills nicht so klappen ich hoffe ihr könnt mir weiterhelfen...
Folgendes:
ich habe einen ATmega48 und möchte über SPI einen Digi Poti(AD5231) 
programmieren.
Das mit dem senden klappt auch schon ganz gut(Signal an clock messbar), 
aber der Widerstand des Potis ändert sich nur leider nie.
Hoffentlich habt ihr ein paar hilfreiche Ideen.

Hier der Programmcode:
long int data = 0xB003FF;
unsigned char clear = 0;

void SPI_MasterInit(void)
{
  DDRB |= (1<<DDD3)|(1<<DDD5)|(1<<DDD2);      //MOSI,SCK und SS output
  DDRB &= ~(1<<DDD4);                         //MISO input
  SPCR = 0x00;                                //alle Register auf 0,
  SPCR |= (1<<SPE)| (1<<MSTR) | (1<<SPR0);    //ausser SPE, MSTR und 
SPR0
  PORTB |= (1<<SS) | (1<<SCK);                //SS und SCK auf HIGH
  clear = SPSR;                               //read SPSR & SPDR -> 
clear SPIF
  clear = SPDR;
}

void SPI_MasterTransmit(void)
{
      SPDR = data;                            //send Data
      while(!(SPSR & (1<<SPIF)))              //wait until transmission 
complete
      {
      }
}

void main(void)
{
  SPI_MasterInit();
  SPI_MasterTransmit();
  while(1)
  {
  }
}

Vielen Dank schon einmal im Vorraus für alle Beiträge!
Grüße

Daniel

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
long int data = 0xB003FF;
SPDR = data;                            //send Data

das geht natürlich gar nicht. Die SPI kann immer nur ein Byte senden. In 
deinem Fall dürfte immer 0xFF gesendet werden.
Die Senderoutine sollte mit Parameter aufgerufen werden:

void SPI_MasterTransmit(unsigned char data)
{
      SPDR = data;                        //send Data
      while(!(SPSR & (1<<SPIF)))          //wait until transmission 
complete
      {
      }
}

Und wenn du eine long-Zahl senden willst, bastelst du dir eine weitere 
Routine, die dann SPI_Transmit 4 mal aufruft, jedesmal mit dem 
entsprechenden Teilbyte der long-Zahl.
Ob noch andere Fehler drin sind, weiss ich ohne genauere Prüfung auch 
nicht.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön, habs geändert jetzt klappts zumindest schon mal mit dem 
einstellen des Widerstands. Aber jetzt hab ich schon wieder ein neues 
Problem,
am Anfang(bei niedrigem Widerstand) ist der Widerstand immer um ca. 50 
ohm größer als er eigentlich sein sollte, je höher ich den Widerstand 
einstelle, desto höher wird auch die Abweichung aber nach unten. Sprich 
am höchsten Punkt beträgt die Abweichung -1.9kohm.
Hast du vielleicht eine Idee woran das liegen könnte??

Danke
Daniel

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hast du vielleicht eine Idee woran das liegen könnte??

Ohne Schaltbild koennen wir natuerlich nur den Kaffesatz lesen. Bei mir 
steht da "User liesst Datenblatt nicht"-Error und vermutlich Poti zu 
stark belastet.

Olaf

Autor: Branko Golubovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hast du vielleicht eine Idee woran das liegen könnte??

Datenblatt, Seite 2:
Nominal Resistor Tolerance -40...+20% !

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.