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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.