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
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.
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
> 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
> Hast du vielleicht eine Idee woran das liegen könnte??
Datenblatt, Seite 2:
Nominal Resistor Tolerance -40...+20% !
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.