www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP dsPIC30F C30 SPI


Autor: MAX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wollte mir gerade eine SPI lib programmieren. das setzen eines 16bid
DACs funktioniert auch teilweise. meine funktion set_adc funktioniert
nur richtig wenn ich 1ms warte, bevor ich das CS wieder high setzte,
ansonsten gibt er einen falschen wert aus. kann mir jemand sagen warum?
- der dsPIC läuft mit 30MIPs sprich 120MHz, hab das ganze auch mit
7.5MIPs (30MHz) versucht, hat auch nicht geklappt.

hier das datasheet des DACs:
http://pdfserv.maxim-ic.com/en/ds/MAX541-MAX542.pdf

hier mal der code:

...

void set_dac(unsigned int value)
{
  SPI1_SS=0;  //set SS1 low
  SPI1_master_tx((unsigned char)(value>>8));
  SPI1_master_tx((unsigned char)(value)&0xFF);
  //delay_ms(1);
  SPI1_SS=1;  //set SS1 high
}

die spi.h:

#define SPI1_SDI    PORTFbits.RF2    //SDI1
#define SPI1_SDI_DIR  TRISFbits.TRISF2  //SDI1 DIR
#define SPI1_SDO    PORTFbits.RF3    //SDO1
#define SPI1_SDO_DIR  TRISFbits.TRISF3  //SDO1 DIR
#define SPI1_SCK    PORTFbits.RE8    //SCK1
#define SPI1_SCK_DIR  TRISEbits.TRISE8  //SCK1 DIR
#define SPI1_SS      PORTBbits.RB3    //SS1
#define SPI1_SS_DIR    TRISBbits.TRISB3  //SS1 DIR

void SPI1_master_init(unsigned char spi_clock)
{
  SPI1_SS=1;      //set SS1 high
  SPI1_SDI_DIR=1;    //SDI1 as input
  SPI1_SDO_DIR=0;    //SDO1 as output
  SPI1_SCK_DIR=0;    //SCK1 as output
  SPI1_SS_DIR=0;    //SS1 as output

  SPI1STAT=0x00;
  SPI1CON=spi_clock&0x1F;  //set baudrate
  SPI1CONbits.MSTEN=1;  //Master enable
  SPI1STATbits.SPIEN=1;  //spi enable
}

void SPI1_master_tx(unsigned char data)
{
    SPI1BUF=data;
    while(SPI1STATbits.SPITBF);
}

wäre toll wenn mir jemand weiterhelfen könnte, bin schon seit fast 2
tagen auf fehlersuche :-/

gruß,
MAX

Autor: MAX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch niemand das SPI vom dsPIC verwendet?

finde das problem leider nicht,
MAX

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann dir nur den Tip geben: Schau auf die Seite von Fernando Heitor.
Es geht zwar hauptsächlich um PICs aber die Burschen und Mädchen dort,
können dir sicher mehr helfen als da.

mfg Schoasch

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS.: Ein Link wäre auch nicht schlecht... sorry, vergessen.
www.fernando-heitor.de

Autor: MAX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für den hinweis, hab den post gleich mal dort ins forum gestellt

Autor: ,,,, (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> meine funktion set_adc funktioniert nur richtig wenn ich
> 1ms warte, bevor ich das CS wieder high setzte, ansonsten
> gibt er einen falschen wert aus.

Vielleicht braucht der DAC eben einen Moment. Mal in dessen Datenblatt
geschaut?

Autor: MAX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi ,,,,,

problem hat sich erledigt, ich habe CS high gemacht, bevor das 2. byte
übertragen wurde. der DAC wird gesetzt, wenn CS high wird

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die fertige Bibliothek von microchip genommen, die haben schon
alles fertig da. Und läuft bestens

mfG
David

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.