Hallo zusammen. Ich habe die Aufgabe erhalten einen Mikrocontroller mit mehreren Sensoren zu erweitern. Der aktuelle Stand ist schon als "Platinenversion" vorhanden. Bevor ich jedoch an der Platine rumlöte, wollte ich das ganze erst einmal auf dem Breadboard nachbauen. Das Problem: Es funktioniert nicht. Auf der Platine ist ein ATMEGA644P-20MU verbaut. Dieser hat 3 Sensoren angeschlossen und ein nRF24L01+ Modul zur Kommunikation mit der Empfängereinheit. Die Empfängereinheit sendet einen Startbefehl an den Atmega, woraufhin der Daten der Sensoren sammelt und sekündlich zurückschickt. Für das Breadboard hab ich einen ATMEGA644P-20AU besorgt und auf eine Adapterplatine gelötet. Original "platinencode" überspielt. Verbindungen gesteckt. 10 Mal schon nachgeschaut ob ich mich vertan habe, aber leider bringt das alles nichts. Der MC antwortet nicht dem Empfänger. Gibt es unterschiede bei der Pinbelegung der beiden MCs? Soweit ich weiß nicht. Muss man was bei der rf24 config.h oder in der rf24.h ändern? https://github.com/iot-playground/Arduino/blob/master/external_libraries/MySensors/utility/RF24_config.h Codeschnipsel bzgl Wifi: Atmega:
1 | #include "RF24.h" |
2 | |
3 | ...
|
4 | |
5 | RF24 radio(21,22); |
6 | byte addresses[][6] = {"1Node","2Node"}; |
7 | |
8 | ...
|
9 | unsigned long hello = 0b11111111111111111111111111111111; |
10 | unsigned long error = 0b11111111111111111111111111111110; |
11 | unsigned long line = 0b11111111111111111111111111111101; |
12 | |
13 | ...
|
14 | |
15 | radio.begin(); |
16 | radio.setPALevel(RF24_PA_HIGH); //alt: RF24_PA_MAX RF24_PA_MIN |
17 | radio.setDataRate(RF24_250KBPS); //alt: RF24_250KBPS RF24_1MBPS |
18 | radio.setAutoAck(1); // Ensure autoACK is enabled |
19 | |
20 | radio.enableDynamicPayloads(); |
21 | radio.setCRCLength(RF24_CRC_8); |
22 | |
23 | radio.enableAckPayload(); // Allow optional ack payloads |
24 | radio.setRetries(0,30); // Smallest time between retries, max no. of retries |
25 | radio.setPayloadSize(32); // Here we are sending 1-byte payloads to test the call-response speed |
26 | radio.openWritingPipe(addresses[1]); // Both radios listen on the same pipes by default, and switch when writing |
27 | radio.openReadingPipe(1,addresses[0]); // Open a reading pipe on address 0, pipe 1 |
28 | |
29 | |
30 | radio.powerUp(); |
31 | //radio.printDetails(); // Dump the configuration of the rf unit for debugging
|
32 | radio.write(&hello,4); |
33 | |
34 | |
35 | |
36 | // Start the radio listening for data
|
37 | radio.startListening(); |
Die Empfangseinheit:
1 | #include "RF24.h" |
2 | |
3 | ...
|
4 | bool radioNumber = 1; |
5 | |
6 | ...
|
7 | |
8 | radio.begin(); |
9 | radio.setPALevel(RF24_PA_HIGH); //alt: RF24_PA_MAX RF24_PA_MIN |
10 | radio.setDataRate(RF24_250KBPS); //alt: RF24_250KBPS RF24_1MBPS |
11 | radio.setAutoAck(1); // Ensure autoACK is enabled |
12 | |
13 | radio.enableDynamicPayloads(); |
14 | radio.setCRCLength(RF24_CRC_8); |
15 | |
16 | radio.enableAckPayload(); // Allow optional ack payloads |
17 | radio.setRetries(0,30); // Smallest time between retries, max no. of retries |
18 | radio.setPayloadSize(32); // Here we are sending 1-byte payloads to test the call-response speed |
19 | radio.openWritingPipe(addresses[1]); // Both radios listen on the same pipes by default, and switch when writing |
20 | radio.openReadingPipe(1,addresses[0]); // Open a reading pipe on address 0, pipe 1 |
21 | |
22 | |
23 | radio.powerUp(); |
24 | //radio.printDetails(); // Dump the configuration of the rf unit for debugging
|
25 | radio.write(&hello,4); |
26 | |
27 | |
28 | |
29 | // Start the radio listening for data
|
30 | radio.startListening(); |
Verbunden ist das ganze wie folgt: nRF24L01+ - Atmega 1 GND - GND 2 VCC - 3.3V (mit 0.1uF Kondesator zu GND) 3 CE - PCINT21 4 CS - PCINT22 5 SCK - SCK 6 MOSI - MOSI 7 MISO - MISO 8 IRQ - Keine Verbindung Ist irgendetwas falsch? Vielen Dank schon einmal für den Aufwand.