Gast
#390360
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