Forum: Projekte & Code MAX5415 C-Code


von Rush .. (rush)


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

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
Noch kein Account? Hier anmelden.