Hallo
Bei unserer SPI Komunikation wird vom Master kein Clock generiert (mit
Ozcilloskope gemessen).
Auf dem Mosi sind die Flankenwechsel der 01 folge deutlich zu erkennen.
Die Inhalte der Einstellungsregister haben wir uns per USART an einen PC
gesendet und kontrolliert.
Die Hardware haben wir getestet, indem wir jede Sekunde den SCK Pin
invertiert haben. (Vorher wurde die SPI init und so natürlich
deaktiviert)
Die Wechsel der Pegel sind auf dem Ozci zu sehen.
Im Normalen SPI Modus ist SCK dauer high
1 | #define DD_CS PB4
|
2 | #define DD_MOSI PB5
|
3 | #define DD_MISO PB6
|
4 | #define DD_SCK PB7
|
5 | #define DDR_SPI DDRB
|
6 | #define PORT_SPI PORTB
|
7 |
|
8 | void SPI_MasterInit()
|
9 | {
|
10 | USART_send_Byte(0x22);
|
11 | // Set MOSI,CS and SCK output, all others input
|
12 | DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_CS);
|
13 | PORT_SPI = (0<<DD_MOSI)|(0<<DD_SCK)|(0<<DD_CS);
|
14 | LTC6802_set_cs();
|
15 | //Enable SPI, Master, set clock rate fck/16
|
16 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA)|(1<<CPOL);
|
17 | _delay_ms(10);
|
18 | }
|
19 |
|
20 | void LTC6802_set_cs()
|
21 | {
|
22 | PORT_SPI |= (1<<DD_CS);
|
23 | }
|
24 |
|
25 | void LTC6802_clear_cs()
|
26 | {
|
27 | PORT_SPI &= ~(1<<DD_CS);
|
28 | }
|
29 |
|
30 | void LTC6802_transmit(uint8_t cData)
|
31 | {
|
32 | // Start transmission
|
33 | LTC6802_clear_cs();
|
34 | USART_send_Byte(0x23);
|
35 | SPDR = cData;
|
36 | // Wait for transmission complete
|
37 | while(!(SPSR & (1<<SPIF)))
|
38 | LTC6802_set_cs();
|
39 | }
|
1 | int main (void)
|
2 | {
|
3 | _delay_ms(1000);
|
4 | USART_init();
|
5 | _delay_ms(20);
|
6 | USART_send_Byte(0x11);
|
7 | SPI_MasterInit();
|
8 | /* //SCK Test
|
9 | DDRB = 0xFF;
|
10 | PORTB = (1<<PB7);
|
11 | */
|
12 | _delay_ms(3000);
|
13 | //LTC_init(Cellcount);
|
14 | //sei();
|
15 |
|
16 | while(running)
|
17 | {
|
18 | _delay_ms(4000);
|
19 | USART_send_Byte(0x44);
|
20 | LTC6802_transmit(0b10101010);
|
21 |
|
22 | /* //SCK Test
|
23 | PORTB = (1<<PB7);
|
24 | _delay_ms(1000);
|
25 | PORTB &= ~(1<<PB7);
|
26 | _delay_ms(1000);
|
27 | */
|
28 |
|
29 | }
|
30 | return 0;
|
31 | }
|
Es ist noch zu sagen, dass SPIF Flag erfolgreich kommt.
Kann uns jemand helfen? Danke