Advertisement
Guest User

Untitled

a guest
Feb 15th, 2017
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. /*
  2.  * DAC.c
  3.  *
  4.  * Created: 15.02.2017 17:59:51
  5.  *  Author: Шамиль
  6.  */
  7.  
  8. #define F_CPU 8000000
  9. #include <avr/io.h>
  10. #include <util/delay.h>
  11.  
  12. #define SPI_DDR DDRB
  13. #define SPI_PORT PORTB
  14. #define MOSI 3
  15. #define CLK 5
  16. #define CS 2
  17.  
  18. /*
  19. - управляющий регистр SPCR,
  20. - статусный регистр SPSR,
  21. - регистр данных SPDR.
  22. */
  23.  
  24. void spi_init(){
  25.     SPI_DDR |= ( 1 << MOSI )|( 1 << CLK )|( 1 << CS );
  26.     SPI_PORT = ( 1 << CS );
  27.     SPI_DDR |= ( 1 << MOSI )|( 1 << CLK )|( 1 << CS );
  28.     SPCR = ( 1 << SPE )|( 1 << MSTR );
  29.     SPSR = ( 1 << SPI2X );
  30. }
  31.  
  32. void SPI_WriteByte(uint8_t data)
  33. {
  34.     SPDR = data;
  35.     while(!(SPSR & (1<<SPIF)));
  36. }
  37.  
  38. void convert_DAC (float Voltage){
  39.       unsigned int Level = (unsigned int)(Voltage * 4096) / 5;
  40.       unsigned int M_Level = Level >> 8;
  41.       M_Level |= 0x70;
  42.       SPI_PORT &=~ ( 1 << CS );
  43.       SPDR = M_Level;
  44.       while(!(SPSR & (1<<SPIF)));
  45.  
  46.       SPDR = Level;
  47.       while(!(SPSR & (1<<SPIF)));
  48.       SPI_PORT |= ( 1 << CS );
  49. }
  50.  
  51. int main(void){
  52.     spi_init();
  53.     while(1){
  54.     for ( float i = 0; i < 5; i = i+0.1){  
  55.     convert_DAC(i);
  56.     }
  57.     convert_DAC(0);
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement