Hallo,
ich möchte gerne Daten von einem Arduino zu einem ATtiny2313 übertragen.
Dazu sende ich zunächst vom Arduino jede Sekunde eine Nachricht zum
ATtiny. Dieser soll beim Eingang einer Nachricht zunächst einfach nur
eine LED Toggeln. Doch leider werden keine Daten übertragen.
Im Arduino lasse ich einen Timer hochlaufen und immer wenn eine Sekunde
vorüber ist in der hauptschleife eine Nachricht mit einem Byte
rausschicken.
1 | int main(void){
|
2 | uint8_t k = 0;
|
3 | uint8_t l = 1;
|
4 | timer_interrupt_init(); // Timer0 -> 1ms
|
5 | mirf_init();
|
6 | _delay_ms(50);
|
7 | sei(); // Global Interrupts activate
|
8 | mirf_config();
|
9 | while (1){
|
10 | if(sekunde_over==1){ // sekunde_over wird in der Timer ISR gesetzt
|
11 | k++;
|
12 | mirf_send(k,l);
|
13 | sekunde_over = 0;
|
14 | }
|
15 | }
|
16 | }
|
Im Attiny lasse ich bei eingehenden Daten den INT0 Interrupt auslösen
und hole mir dort die Daten heraus
1 | ISR(INT0_vect){
|
2 | TOGGLEBIT(PORTD, 5);
|
3 | uint8_t status;
|
4 | //If still in transmitting mode then finish transmission
|
5 | if (PTX) {
|
6 |
|
7 | //Read MiRF status
|
8 | mirf_CSN_lo; // Pull down chip select
|
9 | status = spi_fast_shift(NOP); // Read status register
|
10 | mirf_CSN_hi; // Pull up chip select
|
11 |
|
12 | mirf_CE_lo; // Deactivate trans receiver
|
13 | RX_POWERUP; // Power up in receiving mode
|
14 | mirf_CE_hi; // Listening for packets
|
15 | PTX = 0; // Set to receiving mode
|
16 |
|
17 | //Reset status register for further interaction
|
18 | mirf_config_register(STATUS,(1<<TX_DS)|(1<<MAX_RT)); // Reset status register
|
19 | }
|
20 | }
|
doch leider bleibt die LED aus.
Das Problem liegt denke ich schon am Arduino, dass dort nichts gesendet
wird. Wenn ich an CSN (PB1 vom Atmega328p) noch eine LED hänge, leuchtet
diese auf, und geht auch nicht kurz, während des sendens aus.
Könnt ihr über den Code gucken und sehen, was falsch ist?
Johannes