Hallo! Ich beschäftige mich seit ein paar Wochen erstmalig mit AVRs. Habe mir dazu das Pollin-Board und nen Mega8 besorgt. Bis jetzt habe ich auch schon einiges wie ADC, LCD, PWM, Timer, Interrupts usw. zum Laufen bekommen. Jetzt wollte ich mich mal an der SPI-Schnittstelle versuchen und habe mir dazu einen DAC Typ MCP4902 besorgt um Analogwerte auszugeben. Aber ich komme hier jetzt nicht so richtig weiter. Der Mega8 soll als Master fungieren, der DAC ist ja eh nur passiv. Wie ist das jetzt mit dem SS- und dem SCK-Signalen? Verstehe ich es richtig, dass ich mich hierum in meinem Programm im Prinzip nicht kümmern muss, da der Mega8 diese automatisch bearbeitet sobald ich etwas in das Daten-Register (SPDR) schreibe? #define F_CPU 16000000 #include <avr/io.h> #include <util/delay.h> int main(void) { // Initialisierung SPI DDRB |= (1<<DDB2) | (1<<DDB3) | (1<<DDB5); SPCR |= (1<<SPE) | (1<<MSTR) | (1<<SPR0); while (1) { SPDR = 0x3F; while(!(SPSR & (1<<SPIF))) SPDR =0x00; while(!(SPSR & (1<<SPIF))) _delay_ms(1000); SPDR = 0x30; while(!(SPSR & (1<<SPIF))) SPDR =0x00; while(!(SPSR & (1<<SPIF))) _delay_ms(1000); } } Danke schon mal für eure Hilfe. Tobias
Hallo, SCK, MOSI, MISO bedient die SPI-Hardware. SS ist beim AVR Slave-Select und muß bei Betrieb als Master ein Ausgang sein. Den Pin kann man dann als I/O frei bedienen. Wenn der Slave einen /CS oder /CE-Pin hat, nit man meist SS zum Ansteuern. Das Ansteuern muß man aber im Programm selbt erledigen, also z.B. /CS auf Low, SPI-Daten rausschicken, /CS wieder auf High. Das sagt aber das Datenblatt des des DAC, was der haben will. Gruß aus Berlin Michael
Tobias M. schrieb: > ie ist das jetzt mit dem SS- > und dem SCK-Signalen? Verstehe ich es richtig, dass ich mich hierum in > meinem Programm im Prinzip nicht kümmern muss, da der Mega8 diese > automatisch bearbeitet sobald ich etwas in das Daten-Register (SPDR) > schreibe? Nein, das SS must du selber setzten. Der SS-Pin muss als Ausgang eingestellt sein, selbst wenn du einen anderen Pin für Select benutzt. Der AVR wechselt automatisch in den SPI-Slave Mode, falls der SS-Pin als Eingang eingestellt wird und das Signal Low wird.
Also, Code sieht schonmal ganz gut aus, wird aber auf den ersten Blick nicht fuktionieren :D Annahme: Der CS-Pin von deinem DAC hängt am /SS Pin des Megas. Du musst vor einer Kommunikation den CS-Pin auf GND ziehen, sonst denkt der DAC sich: "Ach da quatschen 2 auf der Leitung, ich bin jedenfalls nicht gemeint.. düdüdü" :D Nach der Kommunikation wieder auf high setzen (bei einem Slave nicht wirklich notwendig, aber ist schöner). Gut wäre ebenfalls den MISO Pin nochmal auf Eingang zu setzen (In DDRB sicher das Bit zu löschen, wer weiß was da grade drin steht). Das SCK macht dein Atmega selbst.
Fuer den maximalen Lernerfolg empfehle ich zumindest einmal die Pins haendisch, per PortIO, nach Datenblatt ansusteuern. Da kann man schoen mit dem Oszilloskop kontrollieren was so geht.
Vielen Dank, es läuft. Leuchtet mir jetzt auch ein, dass man SS selbst bedienen muss. Wie könnte man schließlich sonst bei mehreren Slaves einen bestimmten Slave auswählen. Gruß Tobias
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.