Forum: Mikrocontroller und Digitale Elektronik LTC2306 Kommunikation funktioniert nicht


von Marco G. (grmg2010)


Lesenswert?

Moin,

ich versuche gerade mit einem ATMEGA328PB mittels SPI mit dem LTC2306 zu 
kommunizieren. Leider gelingt dies nicht, ich erhalte keine Antwort, 
wenn ich eine Anfrage sende. Hier mal mein Code, vielleicht fällt 
jemanden etwas auf, was ich übersehen habe:
1
#define F_CPU 8000000UL
2
3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6
#include <stdlib.h>
7
#include "avr.h"
8
#include "ADC.h"
9
#include "LTC230x.h"
10
#include "UART.h"
11
#include "SPI.h"
12
13
uint8_t counter_isr = 0;
14
uint8_t counter_isr2 = 0;
15
uint16_t adc_value = 0;
16
uint16_t vbat = 0;
17
double adc_result = 0;
18
char Buffer[10];
19
char Buffer_Bat[10];
20
21
22
ISR (TIMER0_COMPA_vect)
23
{
24
  counter_isr++;
25
  if (counter_isr == 50)
26
  {
27
    PORTD ^= (1<<PD3);
28
    counter_isr = 0;
29
  }
30
}
31
32
ISR(ADC_vect)
33
{
34
  adc_value = (uint16_t) (ADCL + (ADCH<<8));
35
  
36
  adc_result = calculate_adc(adc_value);
37
  
38
  calculate_temp(adc_result);
39
}
40
41
42
43
int main(void)
44
{
45
  
46
  avr_init();
47
  SPI_MasterInit();
48
  UART_Init();
49
  
50
  if (!(PIND & (1<<PIND5)))
51
  {
52
    LED_VBAT(1);
53
    LED_SER(0);
54
  }
55
  
56
    
57
  uart_puts("Welcome");
58
    uart_puts("Booting...");
59
  _delay_ms(250);
60
  
61
    while (1) 
62
    {  
63
    uart_puts("Temperatur: ");
64
    start_converting();
65
    _delay_ms(500);
66
    if (!(PIND & (1<<PIND5)))
67
    {
68
       //SPI_MasterTransit(0x88);
69
        D9_low();
70
       _delay_us(10);
71
        select_D9();
72
       _delay_us(10);
73
       D9_high();
74
       SPI_MasterTransit(0b10001000);
75
       //vbat = SPDR0;
76
      _delay_ms(1);
77
      itoa(vbat, Buffer_Bat, 10);
78
      Send_UART_Char(Buffer_Bat);
79
    }
80
    
81
    
82
  }
83
}

Die SPI_MasterInit():
1
void SPI_MasterInit (void)              //Deklaration der Funktion 'SPI_MasterInit' als Funktion ohne Rückgabewert
2
{
3
  DDRB =  (1<<DDB1) | (1<<DDB2) | (1<<DDB3) | (1<<DDB5);
4
  DDRB &= ~(1<<DDB4);
5
  
6
  //Deklarieren von Pin PB0, PB1, PB3 und PB5 von Port B als Ausgang
7
  
8
  PORTB |= (1<<PB1);            //Setzen des Ausgangs PB1 auf high
9
  PORTB |= (1<<PB2);            //Setzen des Ausgangs PB2 auf high
10
  
11
  /*Alle Deklarationen von Port B als Ausgänge müssen in der 'SPI_MasterInit' erfolgen, damit sie global gültig sind.
12
  Dannach können die Pins auch in der Main-Funktion benutzt werden.*/
13
  
14
  /*Der Pin PB4 von Port B muss als Ausgang definiert oder bei einem Eingang per Pull-Up auf high gezogen werden. Sonst ist es 
15
  möglich, dass der µC im Slave-Modus arbeitet und so keinen Takt an PB7 (Port B) generiert*/
16
  
17
  
18
  SPCR0 |= (1<<SPE0) | (1<<MSTR0) | (1<< SPR00);// | (1<<CPOL0);
19
  //Setzen der Bits SPE, MSTR, SPR0 & CPOL im Register SPCR (SPI Status Register)
20
  //SPE = enable SPI
21
  //MSTR = µC als SPI-Master definieren
22
  //SPR0 = den CPU-Takt/16 als SPI-Clock
23
  //CPOL = Taktbeginn auf fallende Flanke setzen
24
}

Ich hoffe jemand kann mir weiter helfen.

Gruß

: Bearbeitet durch User
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.