- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 23

Thema: ATmega > DAC (SPI Problem)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.08.2011
    Beiträge
    18

    Frage ATmega > DAC (SPI Problem)

    Seid gegrüßt,

    im Rahmen eines Projektes beschäftige ich mich derzeit mit der
    Ansteuerung eines AD5624R mit Hilfe eines ATmega168 über die SPI
    Schnittstelle.

    An sich soll das Ganze ja sehr einfach gehen mit SPI, jedoch beiße ich
    mir derzeit einwenig die Zähne daran aus.

    Die Signale auf den SPI bekomme ich schon (mittels Oszi überprüft), aber
    eine Reaktion seitens des DAC bleibt leider aus.

    Die beiden Bilder zeigen das Oszibild für eine SPI Übertragung. Einmal
    CLK+Data und einmal SS+Data.

    Hier nun vllt die Codeschnipsel, die jeden interessieren sollten:

    Code:
    void PORTS_init() 
    {
      DDRB |= (1<<PB2)|(1<<PB3)|(1<<PB5);      // LED , SPI::MOSI/CLK
      DDRC |= (1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4);  // SPI::SS1...4 outputs
      PORTC |= (1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4);  // all high
    }
    
    void SPI_MasterInit(void) 
    {
      SPCR |= (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0) | (0<<CPOL) | (0<<DORD) | (1<<CPHA);
    }
    
    void SPI_Master_to_DAC_send(uint8_t mode, uint8_t dac, uint16_t wert) 
    {
      uint8_t byte0 = 0x0;
      uint8_t byte1 = 0x0;
      uint8_t byte2 = 0x0;
     
      switch( mode ) 
      {               
        case 0: byte0 |= 0x0; break;  // write to input register n
        case 1: byte0 |= 0x8; break;  // update dac register n  
        case 2: byte0 |= 0x10; break;  // write to input register n, update all
        case 3: byte0 |= 0x18; break;  // write to and update dac channel n
      }
      switch( dac ) 
      {                 
        case 0: byte0 |= 0x0; break;  // DAC A
        case 1: byte0 |= 0x1; break;  // DAC B
        case 2: byte0 |= 0x2; break;  // DAC C
        case 3: byte0 |= 0x3; break;  // DAC D
        case 4: byte0 |= 0x7; break;  // ALL DAC    
      }
    
      byte1 = (wert>>4);
      byte2 = (wert<<4);
    
      PORTC &= ~(1<<PC4);
      SPI_MasterSend( byte0, byte1, byte2 );
      _delay_us(5);
      PORTC |= (1<<PC4);
    }
    
    void SPI_MasterSend(char cData0, char cData1, char cData2) 
    {  
      cli();
      SPDR = (uint8_t)cData0; 
      while(!(SPSR & (1<<SPIF)));
      SPDR = (uint8_t)cData1; 
      while(!(SPSR & (1<<SPIF)));
      SPDR = (uint8_t)cData2; 
      while(!(SPSR & (1<<SPIF)));
      sei();
    }
    Initialisieren tu ich den DAC mit einem kompletten Reset, einschalten
    der internen Referenz sowie setzen des LDAC für alle Outputs auf 1.

    Sende ich nun ein SPI_Master_to_DAC_send() mit einem Wert, so passiert
    nichts. Habe nun schon alle Modi durchprobiert.

    Kann mir jemanden eine Hilfestellung liefern?

    Beste Grüße,
    Robert
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken IMG_0753.jpg   IMG_0752.jpg  
    Geändert von rrobert (20.08.2011 um 23:49 Uhr)

Ähnliche Themen

  1. ATMEGA 8 - Problem!
    Von mikro-VIIV im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 30.10.2008, 13:02
  2. PWM problem mit Atmega 8
    Von Enterprise im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.08.2008, 00:56
  3. I2C/TWI und ATmega 8 Problem
    Von cpinkle im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 25.10.2006, 20:02
  4. ATMEGA 128 SPI Problem
    Von schmidtkoe im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 01.10.2006, 19:23
  5. Atmega 16 Problem
    Von Ringo im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 07.05.2005, 18:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test