LTC2306 Kommunikation funktioniert nicht

OP #4579838
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ß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.