Forum: Mikrocontroller und Digitale Elektronik ATmega32 für Funkmodul nRF24L01+ Fehlerquelle Suchen


von JI (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

es geht um ein aktuelles Projekt von mir, die zwei gleiche Funkmodule 
nRF24L01+ sich funken sollen, und zwar "transparent" programmieren. 
Transparent heißt, die zwei Funkmodule bzw. Platinen sollen 100% 
identisch programmiert werden, damit die Module jederzeit als Absender 
oder als Empfänger reagieren können.

 Hardware sind folgenden:
--> 2x AVR STK500 + ATmega32(8-bit);
--> 2x Funkmodul nRF24L01+ (Nordic + Olimex);
--> 2x RS232 - USB Kabel (mein Thinkpad T430 keine serielle 
Schnittstelle);
--> 2x Oscillator 8MHz (für USART Stabilität);
--> und zusätzlich noch ein 4x20 LCD Display zur Diagnose.

 Software sind:
--> 1x AtmelStudio aktuelle Version 6.2
--> 1x Hyperterminal (für Eingabe eines Strings). Fertig.

Die alte Geschichte war einfach zuerst nur auf eine Platine 
programmieren und zwar beiden Absender/Empfänger Funktionen zu 
realisieren, dann auf die andere Platine kopieren. Dazwischen hatte ich 
mithilfe Oszilloskop und LCD Display nicht nur einmal kontrolliert. 
Alles funktionierten (SPI Kommunikation,Parametrieren Funkmodul, USART 
Interrupt...).

Heute habe ich für das "transparentes" Programm mit vorhandenen zwei 
TX/RX_Mode Programme neu strukturiert und das war schon einmal geklappt. 
Nach eine Kaffee Zeit ging es schief. Bei einer der Platinen scheint es, 
dass das Funkmodul von Anfang an überhaupt nicht initialisiert werden 
kann. Zur Diagnose gehe ich einfach zurück, dass zwei ATmega32 identisch 
programmiert werden, und zwar einfach das alte Absender 
Programm-Code(simple TX_Mode, alles kontrolliert und funktioniert).

Eine Platine geht. Ich gebe mithilfe HypTerminal einen String durch 
USART zu Platine, der String wird in TX_FIFO Register des Funkmoduls 
geschrieben und erfolgreich gesendet(in die Luft). Auf dem LCD Displaz 
werden die aktuellen Zustände vielen Register des Funkmoduls richtig 
angezeit während seines Funkenbetrieb(TX_Mode). *Siehe Anhang 
"Ablauf.jpg".

Die andere nicht. Gleiches Code, gleiches Modul, gleiches Kabel, auch 
gleiches Display und gleicher Rechner :( *Siehe Ablauf_schief.jpg.
Offensichtlich sieht man, dass alle Bits von Register 1 gesetzt. Die 
USART Interrupt Routine geht noch, die Platine reagiert richtig wenn ein 
String ankommt.

Ich habe zuhause leider kein Oszilloskop. Aber ich hätte heute in der 
Firma einmal schon mit Oszilloskop kontrolliert, damals habe ich einfach 
MOSI/MISO/IRQ usw "High" gelesen - wenn ich nocht richtig erinnern 
könnte.

Ich habe auch Platine Einstellung kontrolliert: 3,3V und ISP Clock 
115.2KHz, FUSE extern 8_12_18_64...also nochmal, zwei Platinen 
identisch.

Anhang kommt noch ein Foto für die Hardware Beschreibung.

Ich weiß nicht ob die Fehlerquelle von Hardware oder Software kommt. 
Wenn nötig liege ich auch Code dazu.

P.S., ich bin ausländischer Student, deswegen nicht mein Deutsch ärgern 
:) Danke!

Gruß,
Ji

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.