Forum: Mikrocontroller und Digitale Elektronik Mein MCT Programm läuft nicht!


von Thomas E. (bazibua)


Angehängte Dateien:

Lesenswert?

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

von Otto (Gast)


Lesenswert?

eine ".doc" - Datei öffnen viele nur ungerne....

Gruss Otto

von Klaus (Gast)


Lesenswert?

... mit einem "Windows Pc" gleich garnicht! :(

von Thomas E. (bazibua)


Lesenswert?

Was wollt ihr dann?

von Otto (Gast)


Lesenswert?

kommt darauf an, was in der doc-Datei drin ist.....

Ist es z. B. ein Programm, dann lieber als "asm" oder "c"

Otto

von Klaus (Gast)


Lesenswert?

MaOAm :) reimte sich gerade. grins

von Thomas E. (bazibua)


Angehängte Dateien:

Lesenswert?

ok
hier ist der Sender

von Thomas E. (bazibua)


Angehängte Dateien:

Lesenswert?

und hier der Empfänger

von Otto (Gast)


Lesenswert?

>  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

von holger (Gast)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

Hi Otto

Also muss ich es dann so machen oder?
UDR = x;

Danke für die Hilfe.


Dir auch holger. Werd ich auch ausprobieren.

von Otto (Gast)


Lesenswert?

> 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

von Thomas E. (bazibua)


Lesenswert?

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. :-(

von Otto (Gast)


Lesenswert?

> Aber es klappt ja mit einem Sender auch nicht.

o. g. Änderungen schon getestet ?

> wie ist die Schaltung ?

Otto

von Otto (Gast)


Lesenswert?

ach ja: interner Oszillator oder Quarz und welche Baudrate?

Hast Du den Sender schon mit einem Terminalprogramm getestet ?

(Falls Du einen MAX232 verwendest)

von Otto (Gast)


Lesenswert?

steht ja im Programm:

> 9600Bd bei 3.6846 MHz

aber stimmt es auch - ist der Quarz in den Fuses aktiviert?

von Thomas E. (bazibua)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

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?

von Otto (Gast)


Lesenswert?

DDu musst dem Controller über "Fuses" mitteilen, dass er winen Quarz hat 
- sonst läuft er mit 1MHz

von Otto (Gast)


Lesenswert?


von Thomas E. (bazibua)


Lesenswert?

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. :)

von Otto (Gast)


Lesenswert?

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.

von Thomas E. (bazibua)


Lesenswert?

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.)

von Otto (Gast)


Lesenswert?

nee - ungenau bedeutet, dass die sereille Übertragung nicht 
funktioniert.

Lies dazu bitte:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART_initialisieren

von Thomas E. (bazibua)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

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....

von Otto (Gast)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

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.

von Otto (Gast)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

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

von Thomas E. (bazibua)


Lesenswert?

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