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
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
PS.: Ein Link wäre auch nicht schlecht... sorry, vergessen. www.fernando-heitor.de
> 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?
hi ,,,,, problem hat sich erledigt, ich habe CS high gemacht, bevor das 2. byte übertragen wurde. der DAC wird gesetzt, wenn CS high wird
Ich habe die fertige Bibliothek von microchip genommen, die haben schon alles fertig da. Und läuft bestens mfG David
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.