Hallo,
Ich habe ein Problem bei dem ich absolut nicht nachvollziehen kann wie
es zustande kommt. Ich habe ein paar LEDs in meiner Schaltung, die ich
an bestimmten stellen an und aus schalte um optisch feedback zu
bekommen. Das funktioniert so weit ganz gut, jedoch habe konnte ich
nachdem ich den Code ein bisschen umstrukturiert habe die LED am Port B0
nicht mehr einschalten. nach ein bisschen probieren fand ich heraus,
dass meine Funktion SPIInit und zwar die erste zeile probleme macht...
Jedoch verstehe ich nicht warum, da ich bei dem port mit bitmasken ja
nur ein bit verändere.
main.c
1 | DDRD = (1 << PD5)| (1 << PD6) | (1 << PD7);
|
2 | DDRB |= (1 << PB0);
|
3 | PORTB |= 1 << PB0;
|
4 | SPIInit(); // SPI Schnittstelle initialisieren
|
5 | TimerInit(); // Timer Initialisieren
|
6 | USARTInit(UBRR_VALUE); // UART Initialisieren
|
7 | ADCInit(); // ADC Initialisieren
|
8 | RFM70_Init(); // RFM70 Initialisieren
|
9 | //DDRB |= (1 << PB0); //schreibe ich den Befehl hier funktioniert alles aber warum !?
|
10 | //PORTB |= 1 << PB0;
|
11 | sei();
|
12 | while(1)
|
13 | .
|
14 | .
|
15 | .
|
SpiInit
1 | void SPIInit()
|
2 | {
|
3 | DDRB = (1<<CSN)|(1<<MOSI)|(1<<SCK)|(1<<CE); // Outputs für Master definieren // SCK / MOSI / SS
|
4 | DDRB &= ~(1<<MISO); // Input Miso
|
5 | DDRD &=~ (1<<IRQ); // INT0 als Input für Interrupt
|
6 | SPCR = 0x50; // SPEN = 1 MSTR=1 / spi aktivieren prescaler 4
|
7 | PORTB |= 1<<CSN; // SS auf high --> kommunikation mit dem Modul nicht möglich muss auf low gesetzt werden // CE als output
|
8 | PORTB &= ~(1<<CE); // auf low setzen
|
9 | }
|
.h file
1 | // SPI Port definition
|
2 | #define CE PB1
|
3 | #define CSN PB2
|
4 | #define MOSI PB3
|
5 | #define MISO PB4
|
6 | #define SCK PB5
|
7 | #define IRQ PD2
|