MAX5415 C-Code

OP #1835734
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren