Hallo Zusammen, ich habe mir vor kurzem die neue Version des CodeVisionAVR Evaluation V2.04.5b heruntergeladen, da das Programm jetzt auch die ATxMeaga-Reihe unterstützen soll. Um eine schnellere Konfiguration der Register zu erlangen habe ich den CodeWizard aufgerufen. Allerdings suche ich dort vergebens die Konfiguration der SPI-Module. Nur unter der USART-Schnittstelle habe ich einen Master SPI-Modus gefunden. Dies ist aber doch nicht das eignetliche SPI-Modul sondern nur eine, über das USART-Modul, simulierte SPI-Schnittstelle oder verstehe ich hier etwas falsch? Wenn sich jemand von euch mit CodeWizard und dem SPI der Xmega-Reihe auskennt währe es sehr Nett wenn mir jemand erklären könnte wie man das richtige SPI-Modul aktiviert und was eigentlich der Master-SPI-Modus ist. Schon mal vielen Danke!!!
Hallo, kein Wisard der Welt kann Dir bei der Funkton der SPI-Schnittstelle helfen. Der stellt Dir höchstens die Grund-Configuration zur Verfügung. Der Umstieg auf XMEGAS ist gar nicht so schwierig- Grundbedingung: Du solltest einigermaßen fit im Umgang mit herkömmlichen AVR's sein. SPI,TWI USART sollte kein Problem sein. Die beste Lösung ist die ATMEL Seite "Application Example and Algorithms". (AVR1309 SPI Schnittstelle für XMEGAS). Link: http://www.atmel.com/dyn/products/app_notes_mcu.asp?family_id=607 Gruß GG
Für Code Vision gibt es zumindest eine Funktion mit der man die Daten auf den Bus gibt. Also SPI.h reinladen und Du kannst zumindest diese Funktion verwenden. Ich habe mich damit auch etwas schwergetan. Der Fehler lag bei mir das ich die Ausgänge falsch Konfiguriert habe. Mit dem Scope konnte man das dann aber gut erkennen.
1 | void SPI_Write(unsigned char addr,unsigned char data) |
2 | {
|
3 | unsigned char mcpzw=0; |
4 | // Activate the CS pin
|
5 | PORTD.OUT = Bit_Reset(PORTD.OUT,4); |
6 | delay_us(1); |
7 | // Start MCP23S17 OpCode transmission
|
8 | mcpzw = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_WRITE; |
9 | spi(mcpzw); |
10 | // Start MCP23S17 Register Address transmission
|
11 | spi(addr); // Wait for transmission complete |
12 | // Start Data transmission
|
13 | spi(data); |
14 | PORTD.OUT = Bit_Set(PORTD.OUT,4); |
15 | }
|
16 | |
17 | unsigned char SPI_Read(unsigned char addr) |
18 | {
|
19 | unsigned char mcpzw=0,rd_data=0; |
20 | // Activate the CS pin
|
21 | PORTD.OUT = Bit_Reset(PORTD.OUT,4); |
22 | delay_us(1); |
23 | // Start MCP23S17 OpCode transmission
|
24 | mcpzw = SPI_SLAVE_ID | ((SPI_SLAVE_ADDR << 1) & 0x0E)| SPI_SLAVE_READ; |
25 | spi(mcpzw); |
26 | // Start MCP23S17 Register Address transmission
|
27 | delay_us(100); |
28 | rd_data=spi(addr); // Wait for transmission complete |
29 | delay_us(100); |
30 | rd_data=spi(0x00); |
31 | PORTD.OUT = Bit_Set(PORTD.OUT,4); |
32 | return rd_data; |
33 | }
|
Hier sind meine zwei Funktionen mit dem ich den Bus anspreche. CS muß natürlich durch Deinen Code erzeugen.
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.