Jungs helft mir bitte mal, ich bekomme das Ding einfach nicht zum
laufen.
Ich hab die Schaltung wie mit Bild verschaltet, die Software des µC
sieht so aus:
1 | #define F_CPU 3686400 //Taktfrquenz
|
2 | #define BAUD 9600 //einstellte Baudrate
|
3 | //-----------------------------
|
4 | #include <ctype.h>
|
5 | #include <avr\io.h>
|
6 | #include <avr\delay.h>
|
7 | #include <avr/interrupt.h>
|
8 | //-----------------------------
|
9 | char _buffer[6]; //für die empfangenen Zeichen
|
10 | int _i = 0;
|
11 | bool Befehl = false;
|
12 | //----------------------------------------------------------------------
|
13 | void initPorts();
|
14 | void initUART();
|
15 | void Senden(char buffer[]);
|
16 | void putChar(char data);
|
17 | char getChar();
|
18 | //----------------------------------------------------------------------
|
19 | void initPorts()
|
20 | {
|
21 | //Ausgänge PORT B deklarien
|
22 | DDRB = (1<< PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6);
|
23 | }
|
24 | //----------------------------------------------------------------------
|
25 | void initUART()
|
26 | {
|
27 | UBRRL = (F_CPU / BAUD - 16) / 16; //Baudberchnnung
|
28 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //Transmitter/Receiver zulassen
|
29 | sei(); // Interrupts zulassen
|
30 | }
|
31 | //----------------------------------------------------------------------
|
32 | void putChar(char data) //Zeichen senden
|
33 | {
|
34 | while (!(UCSRA&32)); //warte bis UDR leer ist
|
35 | UDR = data; //senden
|
36 | }
|
37 | //----------------------------------------------------------------------
|
38 | char getChar() //Zeichen empfangen
|
39 | {
|
40 | char data=0;
|
41 | while (!(UCSRA&128)); //warte bis RX-complete RXC UCSRA
|
42 | data=UDR; //empfangen
|
43 |
|
44 | data = toupper(data);
|
45 | putChar(data);
|
46 |
|
47 | return data;
|
48 | }
|
49 | //----------------------------------------------------------------------
|
50 | void Senden(char buffer[]) //ganze Strings senden
|
51 | {
|
52 | for (int i=0 ; buffer[i] !=0 ; i++)
|
53 | putChar(buffer[i]);
|
54 | }
|
55 | //----------------------------------------------------------------------
|
56 | ISR(USART_RXC_vect) //UART-Receive Interrupt-Routine
|
57 | {
|
58 | getChar(); //Zeichen empfangen
|
59 | }
|
60 | //----------------------------------------------------------------------
|
61 | //----------------------------------------------------------------------
|
62 | main()
|
63 | {
|
64 | initPorts();
|
65 | initUART();
|
66 |
|
67 | do
|
68 | {
|
69 | }
|
70 | while (true);
|
71 | }
|
Sie macht nichts anderes als ein empfangenes kleines Zeichen in ein
großes umzuwandlen und zurück zu schicken. Spannung am Board
eingeschaltet (grüne LED) und Board auf Datenmodus gestellt (2 grüne
LEDs am USB-Modul).
Nun habe ich folgendes getestet:
1. Ich sende über die USB-Schnittstelle vom AVR-Board ein kleines
Zeichen und bekomme das große Zeichen zurück. Gut.
2. Ich verbinde das BTM über Bluetooth mit dem Hyperterminal. Jetzt
sende ich wieder (Punkt 1) über die USB-Schnittstelle vom AVR-Board ein
kleines Zeichen und bekomme das große Zeichen zurück. Dieses Zeichen
sehe ich jetzt noch zusätzlich am Hyperterminal des BTMs. Auch Gut.
3. Nun sende ich über den Hyperterminal des BTMs (über Bluetooth) kleine
Zeichen und erwarte nun große Zeichen zurück. Negativ, es passiert rein
gar nichts !!! Die Daten-Transfer-LED vom BTM blinkt beim tippen aber
fröhlich, also sendet er tatsächlich was.
Jetzt hab ich die Transistorschaltung 100 mal überprüft und keinen
Fehler gefunden. Gut, ich verwende anstatt des BC547B, BC546B, aber
damit muss es auch gehen.
Jetzt dachte ich, gut könnte der Tx vom BTM vielleicht ne macke haben.
Alles klar, Schaltung auseinander gefrickelt, MAX-Modul dazwischen und
an den PC. AT-Befehl "ati1" eingegeben und bekomme sämtliche
Einstellungen des Modul als Antwort. D.h. der Tx vom BTM ist garantiert
nicht defekt.
Warum reagiert der µC nicht was die gesendeten Zeichen vom BTM ???
Ich komme einfach nicht mehr weiter, bitte um Hilfe.