Hi Leute, hab hier ein kleines Problem. Ich hab zwei Mikrocontroller als Sender programmiert und einen als Empfänger. Die Eingangssignale der Sender sind je 4 Taster, die dann 3V an die Eingangpins von PORTB legen. Die Senderprogramme sind identisch, die unterscheiden erfolgt über den PIN 4 (je nachdem ob er über einen Schalter gesetzt ist oder nicht). Das ganze soll dann über den Seriellen Ausgang (TXD und RXD) auf den Empfänger übertragen werden. An den Ausgängen von dem Empfänger MCT hängen an PORTB 8 LED´s und an PORTA eine LED und ein Summer. Die 8 LED´s an PORTB sollen noch ca 10s nachleuchten, deshalb die Zähler und der Timer. Wenn nichts mehr übertragen wird, soll er in den Power-down Mode gehen. Nur irgendwie klappt des ganze ned. Hab schon einiges ausprobiert und umprogrammiert, aber sie wollen nicht so wie ich es will. Hab die beiden Programme im Anhang. Würde mich tierisch über Hilfe freuen! Danke schon mal im Vorraus. MFG Thomas
kommt darauf an, was in der doc-Datei drin ist..... Ist es z. B. ein Programm, dann lieber als "asm" oder "c" Otto
> UDR = 'x'; // Inhalt von x �bertragen auf Schnittstelle
Das überträgt nicht den Inhalt, sondern das ASCII-Zeichen "x" - und zwar
nur dieses.
Gruss Otto
Zu Empf_nger.c volatile unsigned char c1 = 0; // Z�hler 1 initialisieren und auf Null setzen volatile unsigned char c2 = 0; // Z�hler 2 initialisieren und auf Null setzen volatile unsigned char c3 = 255; // Z�hler 3 initialisieren und auf 255 setzen
Hi Otto Also muss ich es dann so machen oder? UDR = x; Danke für die Hilfe. Dir auch holger. Werd ich auch ausprobieren.
> Die Eingangssignale der Sender sind je 4 Taster, die dann 3V > an die Eingangpins von PORTB legen. Mit welcher Spannung arbeitet der Controller ? > Die Senderprogramme sind identisch, > die unterscheiden erfolgt über den PIN 4 (je nachdem ob er über einen > Schalter gesetzt ist oder nicht). hängen die beiden gleichzeitig an der seriellen Schnittstelle? Falls ja, wäre das nicht so gut - versuche es mit nur einem Sender Otto
Den Mikrocontroller versorg ich auch mit 3V (2x 1,5V Batterie). Ist ein ATmega 8515L dem müsste das reichen, oder? L steht doch für Low Power oder? Noch hängen nicht beide Sender MCT´s auf der seriellen Schnittstelle. Aber es klappt ja mit einem Sender auch nicht. :-(
> Aber es klappt ja mit einem Sender auch nicht. o. g. Änderungen schon getestet ? > wie ist die Schaltung ? Otto
ach ja: interner Oszillator oder Quarz und welche Baudrate? Hast Du den Sender schon mit einem Terminalprogramm getestet ? (Falls Du einen MAX232 verwendest)
steht ja im Programm:
> 9600Bd bei 3.6846 MHz
aber stimmt es auch - ist der Quarz in den Fuses aktiviert?
Otto wrote: > o. g. Änderungen schon getestet ? Bin grad dabei, hab nen Testaufbau auf einer Platine zusammengelötet. Bautrate hab ich bei beiden gleich eingestellt: UBRRL = 0x17; // 9600Bd bei 3.6846 MHz Ich hab ein STK 500 und das AVR Studio 4
Otto wrote:
> aber stimmt es auch - ist der Quarz in den Fuses aktiviert?
Versteh ich jetzt nicht.
Meinst du ob im Datenblatt steht, dass die UBRR 23 und die 9600 Bautrate
zusammenpassen bei fosc = 3.6864 MHz?
DDu musst dem Controller über "Fuses" mitteilen, dass er winen Quarz hat - sonst läuft er mit 1MHz
Ich hab aber keinen externen Quarz, falls du das meinst. Also nix mit XTAL1 usw. Drum hab ich das ja mit dem Zähler gemacht. Aber bin grad noch am weiterlesen. Nur vorab mal. :)
dann hast Du auch kein fosc = 3.6864 MHz - ausserdem ist der interne Oszillator relativ ungenau, wenn er nicht kalibriert ist. Entweder, Du hängst einen Quarz dran, damit Du mit 9600 Baud arbeiten kannst, oder Du reduzierst die Baudrate auf 300 - 2400 und lässt die Fuses, wie sie sind.
Hmm, ungenau ist egal. Kommt auf ein paar Sekunden hin oder her nicht an. Will aber eigentlich keine Externen Bauteile mehr dazu. Ich dachte wenn ich den Timer auf langsamste Geschwindigkeit stell reicht des. Oder was wäre das für ein Befehl um die Bautrate runter zu setzen? beim Empfänger TCCR1B = 0x05; // (Timer) prescaler 1024 (langsamste Geschw.)
nee - ungenau bedeutet, dass die sereille Übertragung nicht funktioniert. Lies dazu bitte: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART_initialisieren
Ja ok danke. Werd ich mir morgen vornehmen. Hab da auch schon einiges raus, aber ich geh´s nochmal durch. Vielleicht is mir ja jetzt alles ein wenig klarer. Na dann, vielleicht bis die Tage. Danke nochmal für die bisherige Hilfe. MFG Thomas
Hi, hab mir das http://www.mikrocontroller.net/articles/AVR-GCC-Tu... nochmal durchgelesen. Und wenn ich es richtig verstanden hab muss ich diese Zeile noch hinzufügen UCSRC = (1<<URSEL)|(0<<UMSEL)|(0<<UPM0)|(UPM1<<0)|(0<<USBS)|(1<<UCSZ0)|(1<<UCSZ1 ); Aber es funktioniert immer noch nicht. Ich weis nicht mehr weiter....
Hast Du bereits geprüft, ob die Schaltung überhaupt funktioniert - also z. B. eine LED blinken lassen? An einer Stelle schreibst Du, dass Du die Schaltung mit 3V betreibst - an anderer, das es ein STK500 ist. Falls es ein STK500 ist, teste Sender und Empfänger über ein Terminalprogramm, indem Du die "RS232-Spare" an einen PC anschliesst. Otto
Die Schaltung funktioniert sicher. Hab sie selbst auf einer Platine aufgebaut und durchgemessen. Diese wird mit 3V betrieben. Mit dem STK500 programmiere ich immer nur die MCT und steck sie dann in meine Schaltung.
Dann teste Sender- und Empfängerprogramm mit dem STK500 über ein Terminalprogramm, indem Du die "RS232-Spare" an einen PC anschliesst. Programmiere zuerst die Sender-UART komplett so, wie im Tutorium beschrieben und sende die Tasten an das Terminalprogramm. Funktioniert dies, programmiere die UART des Empfängers identisch und sende mit dem Terminalprogramm Daten an den Empfänger. Otto
Ok, hab mir ein Terminalprogramm besorgt. Werds mal damit versuchen. Hab übrigens noch ein paar Fehler gefunden. Bin ja mal gespannt, ob ich es in den nächsten Tagen hin bekomme. Danke
Hi Leute, also das Mikrocontroller Programm funktioniert. Mit den XBee Modulen aber leider nicht. Ich hab jetzt nur die zwei Mikrocontroller über die Serielle Schnittstelle (TXD & RXD) verbunden und es funktioniert alles einwandfrei. Aber sobald ich die Verbindung trenne und die XBee Module zwischen schalte, funktioniert es nicht mehr. Hat das schon mal jemand gehabt? Kann mir jemand Helfen? Danke schon mal im Voraus. Gruß Thomas
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.