Mahlzeit uC-Gemeinschaft.
Ich hatte vor einiger Zeit selber hier danach gesucht und nichts
gefunden.
Da ich selbst mehr oder weniger noch Neuling bin und mit Schnittstellen
i2C, SPi & Co. bis dato wenig bzw. garnichts gemacht habe, habe ich es
endlich geschafft einen MAX5415 über die Hardware-SPI eines ATmega32 zum
Laufen zu bekommen.
Der Code ist simple gehalten und erlaubt auch die auswahl des jeweiligen
Potis.
1 | #include <avr/io.h>
|
2 |
|
3 | #define DDR_MAX5415 DDRB
|
4 | #define PORT_MAX5415 PORTB
|
5 | #define MOSI PB5
|
6 | #define SCK PB7
|
7 | #define SS PB4
|
8 |
|
9 | void SPI_MasterInit(void)
|
10 | {
|
11 | DDR_MAX5415 = (1<<MOSI) | (1<<SCK) | (1<<SS);
|
12 | PORT_MAX5415 = (1<<SS); // chipselect high
|
13 | SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
|
14 | // SPE = enable SPI
|
15 | // MSTR = Master when Bit 'one'
|
16 | // SPR0 = fosc/16 16MhZ /16 = 1Mhz
|
17 | }
|
18 |
|
19 | void SPI_EnableSlave(void)
|
20 | {
|
21 | PORT_MAX5415 &=~ (1<<SS);
|
22 | }
|
23 |
|
24 | void SPI_DisableSlave(void)
|
25 | {
|
26 | PORT_MAX5415 = (1<<SS);
|
27 | }
|
28 |
|
29 |
|
30 | void MAX5415_SetR(char cWiper, char cData)
|
31 | {
|
32 | SPDR = cWiper;
|
33 | while(!(SPSR & (1<<SPIF))); //wait for transmission complete
|
34 | SPDR = cData;
|
35 | while(!(SPSR & (1<<SPIF))); //wait for transmission complete
|
36 | }
|
37 |
|
38 | void main(void)
|
39 | {
|
40 | SPI_MasterInit();
|
41 | SPI_EnableSlave();
|
42 | MAX5415_SetR(0, 227); //set up wiper 0 on tap 227
|
43 | SPI_DisableSlave();
|
44 | }
|
Hoffe damit einigen Newbies weiterhelfen zu können.
MfG Rush