Forum: Mikrocontroller und Digitale Elektronik Funkübertragung über uC


von Jens (Gast)


Lesenswert?

Hallo,
ich bin relativ neu in dem Gebiet der Controllerprogrammierung und hätte 
da eine Frage.
Ich habe ein Modul angefertigt, welches die Signale über Bluetooth 
übertragen hat und diese wurden jeweils von einem uC ausgewertet.
Dieses Modul hat auch wunderbar funktioniert.
Nun habe ich das Bluetooth mModul gegen ein Funkmodul der Firma 
Radiometrix (RX2-433-14-5V bzw. TX2-433-14-5V) ausgetauscht.
Wenn ich nun versuche die signale zu senden, so springt der empfänger 
zwar in der Empfangsinterrupt jedoch kann ich die Signale nicht 
anzeigen, außer ein unkontrolliertes aublitzen der LEDs ist nichts zu 
sehen.

Nun meine Frage könnte dies mit der Baudrate zusammen hängen, denn diese 
ist noch auf den Werten des Bluetoothmoduls basierend.
Und zum zweiten kann ich meine signale einfach in einer bitfolge senden, 
oder muss ich diese irgendwie coderien?

Ich bin für jede Hilfe sehr Dankbar!
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <inttypes.h>
4
5
6
// Abfragemakro
7
//#define BLUETOOTH_STATUS_AKTIV() (!(PIND & _BV(PD2)))    // Abfrage Bluetooth-Signal
8
#define SCHALTER_LS()        (!(PIND & _BV(PD7)))  // Abfrage Schalter Lautsprecher eingeschaltet
9
10
// Aktionsmakro
11
#define ROTE_LED_AN()    { PORTC |=  _BV(PC3); }      // rote LED ein      -> 3.3V
12
#define ROTE_LED_AUS()    { PORTC &= ~_BV(PC3); }      // rote LED aus     -> 0V
13
14
#define GELBE_LED_AN()    { PORTC |=  _BV(PC1); }      // gelbe LED ein     -> 3.3V
15
#define GELBE_LED_AUS()    { PORTC &= ~_BV(PC1); }      // gelbe LED aus     -> 0V
16
17
#define GRUENE_LED_AN()    { PORTC |=  _BV(PC2); }      // grüne LED ein     -> 3.3V 
18
#define GRUENE_LED_AUS()   { PORTC &= ~_BV(PC2); }      // grüne LED aus     -> 0V
19
20
#define BLAUE_LED_AN()    { PORTC |=  _BV(PC0); }      // blaue LED ein     -> 0V
21
#define BLAUE_LED_AUS()   { PORTC &=  ~_BV(PC0); }      // blaue LED aus     -> 5V
22
23
#define LS_AN()        { PORTB |=  _BV(PB1); }      // grüne LED ein     -> 3.3V 
24
#define LS_AUS()         { PORTB &= ~_BV(PB1); }    // grüne LED aus     -> 0V
25
26
#define LED_LS_AN()      { PORTB |= _BV(PB0); }    // LED Lautsprecher an -->5V
27
#define LED_LS_AUS()      { PORTB &= ~_BV(PB0); }    // LED Lautsprecher aus --> 0V
28
29
#define RELAIS_AN()      { PORTD |= _BV(PD4); }    // Relais an -->5V
30
#define RELAIS_AUS()      { PORTD &= ~_BV(PD4); }    // Relais aus --> 0V
31
32
#define LEUCHT_ROT_AN()    { PORTD |= _BV(PD5); }    // Leuchtmodul "rot" an -->5V
33
#define LEUCHT_ROT_AUS()  { PORTD &= ~_BV(PD5); }    // Leuchtmodul "rot" aus --> 0V
34
35
#define LEUCHT_GRUEN_AN()    { PORTD |= _BV(PD6); }    // Leuchtmodul "grün" an -->5V
36
#define LEUCHT_GRUEN_AUS()    { PORTD &= ~_BV(PD6); }    // Leuchtmodul "grün" aus --> 0V
37
38
#define LEUCHT_BLAU_AN()    { PORTC |= _BV(PC4); }    // Leuchtmodul "blau" an -->5V
39
#define LEUCHT_BLAU_AUS()    { PORTC &= ~_BV(PC4); }    // Leuchtmodul "blau" aus --> 0V
40
41
42
//Variablen Deklaration
43
volatile uint8_t u8_blau = 0;                // Variable für die blaues Signal
44
volatile uint8_t u8_rot = 0;                // Variable für die rotes Signal
45
volatile uint8_t u8_gelb = 0;                // Variable für die gelbe LED
46
volatile uint8_t u8_gruen = 0;                // Variable für die grünes Signal
47
volatile uint8_t u8_Lautsprecher = 0;            // Variable für den Lautsprecher
48
volatile uint8_t u8_Empfang = 0;              // Empfangsdaten
49
volatile uint8_t u8_timer = 0;                // Taktzähler
50
volatile uint16_t u16_timer2 = 0;              // Tondauer "frei"
51
volatile uint16_t u16_timer1 = 0;              // Tondauer "Störung"
52
//volatile uint32_t u32_timer_bluetooth = 0;          // Timer für Bluetoothstatus
53
// Variable für die Tonausgabe "frei"
54
volatile uint16_t u8_Tonausgabe1 = 0;            
55
// Variable für die Tonausgabe "belegt"
56
volatile uint16_t u8_Tonausgabe2 = 0;  
57
// Variable, die den letzten Zustand von "gelb" speichert          
58
volatile uint8_t u8_letztes_gelb = 0;  
59
// Variable, welche angibt ob Bluetoothmodule verbunden          
60
volatile uint8_t u8_b_aktiv = 0;
61
62
// Initialisierung USART
63
//#define F_CPU 16000000ULL                  // Frequenz vom Mikrocontroller 16MHz
64
#define BAUD 9600UL                         // Baudrate 
65
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)       // clever runden 
66
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))         // Reale Baudrate 
67
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)         // Fehler in Promille, 1000 = kein Fehler. 
68
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))           
69
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
70
#endif 
71
72
// Funktionprototypen
73
void USART_Init( unsigned int ubrr);            // Prototyp initialisierung
74
75
// Hauptprogramm
76
int main(void)
77
{
78
  TCCR0B |= _BV(CS01) | _BV(WGM01);             // prescaler 1600000/64 = 15625
79
  OCR0A = 99;                            // 124 Schritte für 1ms
80
  TIMSK0 |= _BV(OCIE0B);                    // Freischaltung
81
82
  TCCR0A = _BV(WGM00);                      // PWM phase correct mode
83
  TCCR0B = _BV(CS10) | _BV(CS11);              // clock select clk/64
84
  ICR1 = 0xFF;                          // Endwert Counter
85
86
// OC0A als PWM-Port setzen
87
  TCCR1A |= _BV(COM0A1);
88
  OCR0A = 0;
89
90
// OC0B als PWM-Port setzen
91
  TCCR1B |= _BV(COM0B1);
92
  OCR0B = 0;
93
94
// Ausgänge
95
  DDRC |= _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3);         // Alle Signallampen als Ausgänge deklariert
96
  PORTC &= ~(_BV(PC0) & _BV(PC1) & _BV(PC2) & _BV(PC3));      // Signallampen ausschalten -> definierter Zustand zu Beginn -> 0V
97
98
  DDRD |= _BV(PD5) | _BV(PD6) ;         // Alle LEDs des Leuchtmoduls als Ausgänge deklariert
99
  DDRC |= _BV(PC4);
100
  PORTD &= ~(_BV(PD5) & _BV(PD6));        // Alle LEDs des Leuchtmoduls -> definierter Zustand zu Beginn -> 0V
101
  PORTC &= ~(_BV(PC4));
102
103
  DDRB |= _BV(PB0) | _BV(PB1);                        // Lautsprecher und Lautsprecher-LED als Ausgang deklariert
104
  PORTB &= ~(_BV(PB0)| _BV(PB1));                      // definierter Zustand zu Beginn
105
106
  DDRD |= _BV(PD4);                        // Relais als Ausgang deklariert
107
  PORTD &= ~_BV(PD4);                      // definierter Zustand zu Beginn
108
109
// Eingänge
110
  DDRD &= ~(_BV(PD7));            // Schalter Lautsprecher als Eingang
111
  PORTD |= _BV(PD2) | _BV(PD7);      // Pull up aktiviert
112
113
114
// Funktionsaufruf Initialisierung Bluetooth
115
USART_Init(UBRR_VAL );
116
117
  sei();
118
//Endlosschleife
119
  while(1)
120
  {
121
122
// Funkmodule verbunden
123
    if ( u8_Empfang == 0b00001000 )           // Abfrage sind die Funkmodule verbunden
124
    {
125
      u8_blau = 1;                  // wenn "ja", schalte blaue LED an
126
    }
127
    else                        // wenn "nein"
128
    {
129
      u8_blau = 0;                  // schalte blaue LED aus
130
    }
131
132
// Rot empfangen
133
    if(u8_Empfang == 0b00000001)            // Abfrage "Störung" empfangen?
134
    {  
135
      u8_rot = 1;                    // wenn "ja" steuer rote LED an
136
    }
137
    else                        // wenn "nein"
138
    {  
139
      u8_rot = 0;                    // steuere rote LED nicht an
140
    }
141
142
// Gelb empfangen
143
    if(u8_Empfang == 0b00000010)            // Abfrage "Fräse in Betrieb" empfangen?
144
    {
145
      u8_gelb = 1;                  // wenn "ja" steuer gelbe LED an
146
    }
147
    else                        // wenn "nein"
148
    {
149
      u8_gelb = 0;                  // steuere grüne LED nicht an
150
    }
151
152
// Grün empfangen
153
    if(u8_Empfang == 0b00000100)            // Abfrage "Fräse frei" empfangen?
154
    {
155
      u8_gruen = 1;                  // wenn "ja" steuer grüne LED an
156
    }
157
    else                        // wenn "nein"
158
    {
159
      u8_gruen = 0;                  // steuere grüne LED nicht an
160
    }
161
162
    if ( u8_blau == 1 )                       
163
    {
164
      BLAUE_LED_AN();                  // Blaue LED an  
165
      RELAIS_AN();                    // Selbsthaltung ein                  
166
    }
167
    else                                
168
    {
169
      BLAUE_LED_AUS();                // Blaue LED aus
170
      RELAIS_AUS();                  // Selbsthaltung aus
171
    }
172
173
    if(u8_rot == 1)
174
    {
175
      ROTE_LED_AN();                  // Rote LED an
176
    }
177
    else
178
    {
179
      ROTE_LED_AUS();                  // Rote LED aus
180
    }
181
182
      if(u8_gelb == 1)
183
    {
184
      GELBE_LED_AN();                  // Gelbe LED an
185
    }
186
    else
187
    {
188
      GELBE_LED_AUS();                // Gelbe LED aus
189
    }
190
191
    if(u8_gruen == 1)
192
    {
193
      GRUENE_LED_AN();                // Grüne LED an
194
    }
195
    else
196
    {
197
      GRUENE_LED_AUS();                // Grüne LED aus
198
    }
199
200
  }
201
}
202
203
// Funktion USART Initialisierung
204
void USART_Init( unsigned int ubrr)        
205
{
206
//Set baud rate 
207
UBRR0 = ubrr;
208
209
//Enable receiver and transmitter 
210
UCSR0B = _BV(RXEN0)| _BV(TXEN0) | _BV(RXCIE0);        // Sender, Empfänger und Empfangsinterrupt
211
UCSR0C = _BV(UCSZ00)| _BV(UCSZ01);              // Format bestimmen 8 Datenbits 2 Stoppbits
212
}
213
214
215
//Empfangsinterrupt
216
ISR(USART_RX_vect)                      // wird ausgelöst, wenn Daten empfangen wurden
217
{
218
//  if (u8_b_aktiv == 1)                  // Abfrage, besteht Verbindung?
219
//  {
220
      u8_Empfang = UDR0;                  // empfangene Daten werden in "u8_Empfang" gespeichert
221
    GRUENE_LED_AN();
222
//  }
223
//  else                          // wenn keine Verbindung besteht schalte alle LEDs aus
224
//  {
225
//    u8_Empfang = 0b00000000;
226
//  }
227
}

von Edi R. (edi_r)


Lesenswert?

Wenn ich das richtig sehe, schaltest Du die grüne LED ein, wenn ein 
Zeichen empfangen wurde, aber in der Hauptschleife wird die grüne LED 
sofort wieder ausgeschaltet, wenn das empfangene Byte nicht 0b00000100 
ist. Es könnte also durchaus mit der Baudrate zusammenhängen, weil bei 
einer falschen Baudrate die empfangenen Signale falsch interpretiert 
werden und deshalb nicht die erwarteten Werte ankommen.

von Jens (Gast)


Lesenswert?

okay, jetzt bleibt grün an sprich er schein in den empfangsinterrupt zu 
springen, dies tut er aber obwohl der Sender gar nicht eingeschaltet ist 
...

von Edi R. (edi_r)


Lesenswert?

Vielleicht empfängt der Empfänger trotzdem was, z. B. Rauschen. Ich 
kenne den Empfänger nicht.

von Jens (Gast)


Lesenswert?

ja das selbe problem hab ich auch, hab den sender und empfänger so 
bekommen und auch nach mehrfacher suche nichts gefunden, bzw nichts 
gefunden indem jemand den shconeinmal benutzt hat

von Jens (Gast)


Lesenswert?

hab nun die baudrate auf 4800 geändert und immernoch das selbe problem

von Edi R. (edi_r)


Lesenswert?

Solange Du nicht die richtige Baudrate einstellst, wird sich auch 
nichts ändern. Die richtige Baudrate bekommst Du vielleicht aus dem 
Datenblatt heraus:

http://jp.ic-on-line. cn /IOL/datasheet/rx2-433-14-5v_4181122.pdf
(entferne die Leerzeichen vor und nach dem "cn".)

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

das Datenblatt hab ich ja schon kann auch sein, dass meine Berechnung da 
nicht stimmt hab das über ne Software im Netz gemacht, weil ich nich 
wusste welche werte für UBBR am sinnvollsten sind

von Edi R. (edi_r)


Lesenswert?

Ich hab mal kurz ins Datenblatt des Empfängers geschaut. Nachdem Du 
ursprünglich von einem Bluetooth-Modul geschrieben hast, bin ich davon 
ausgegangen, dass das Funkmodul ebenfalls die Daten via Protokoll 
überträgt und am Ausgang als V.24-Signal ausgibt. Dem ist offenbar nicht 
so, sondern das Sender/Empfängerpaar überträgt nur "dumm" einen 
logischen Zustand. Wenn man also beim Sender V.24 reinschickt, kommt 
beim Empfänger V.24 an. Folglich musst Du herausfinden, mit welcher 
Baudrate der Sender gefüttert wird, und diese Baudrate auch bei Deinem 
Programm einstellen. Sind das 9600 Baud? Falls ja: Wo ist F_CPU 
definiert? Wirklich mit dem richtigen Wert? (Die Zeile im angegebenen 
Programm ist auskommentiert.)

von Jens (Gast)


Lesenswert?

die Zeile hab ich auskommentiert, da sonst eine Warnung im AVR auftritt, 
ich benutez einen ATMEGA168 und dazu einen 16MHz Quarz und habe die 
Baudrate bei beiden Programmen also bei der des Senders und des 
Empfängers zu beginn auf 9600 Baud gestellt und nun auf 4800 geändert 
gehabt wie gesagt ob der wert so korrekt ist weiß ich nicht

von Edi R. (edi_r)


Lesenswert?

Welche Warnung kommt denn?

von Jens (Gast)


Lesenswert?

../main.c:63:1: warning: "F_CPU" redefined
<command-line>: warning: this is the location of the previous definition

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:
> das Datenblatt hab ich ja schon kann auch sein, dass meine Berechnung da
> nicht stimmt hab das über ne Software im Netz gemacht, weil ich nich
> wusste welche werte für UBBR am sinnvollsten sind

Wenn du mit Baudraten unsicher bist, gibt es eine einfache Möglichkeit, 
das abzuklären:

Benutze ein Gerät von dem zu mit Sicherheit weißt, dass die Baudraten 
richtig gehandhabt wird. Zb einen PC.

Du hängst dein Funkmodem am PC an und startest ein Terminalprogram. Dann 
stellst du die Baudraten ein, die du in Verdacht hast (auf deutsch: du 
probierst einfach durch). An der Ausgabe des Terminalprogramm siehst du, 
wann du die richtige Baudrate hast. Damit weißt du schon mal, mit 
welcher Baudrate dein Sender sendet.

Dann hängst du deine µC Schaltung ebenfalls an den PC und benutzt wieder 
besagtes Terminalprogramm um deinem µC kontrolliert mit einer bestimmten 
Baudrate, die du am PC einstellst, zu füttern. An der Reaktion des µC 
erkennst du, ob du richtig liegst.

Funktioniert beides
  Empfangen vom Modem mit der Baudrate x
  Senden an den µC mit derselben Baudrate x
dann kannst du Funkmodem und µC zusammenschalten und alles müsste 
laufen.

von Jens (Gast)


Lesenswert?

naja so einfach geht das nicht, da ich alles zusammen auf eine platine 
gelötet habe und über eine isp schnittstelle programmiere und alles in 
gehäusen untergebracht ist man muss das doch irgendwie berechnen können

von Edi R. (edi_r)


Lesenswert?

Die Warnung sagt, dass in der Kommandozeile eine Frequenz angegeben ist. 
Wenn nicht 16 MHz angegeben ist, wird auch nicht die richtige Baudrate 
eingestellt. Mit welcher Entwicklungsumgebung arbeitest Du? AVRStudio?

von Jens (Gast)


Lesenswert?

ja genau und da habe ich bei den configuration options bereits die 
passende frequenz eingestellt sowie bei den Fuses auch

von Edi R. (edi_r)


Lesenswert?

Möglicherweise klappt ja auch die Übertragung zwischen Sender und 
Empfänger nicht, und der Empfänger gibt nur Rauschen aus. Kannst Du Dir 
den Ausgang des Empfängers am Oszilloskop anschauen, möglichst 
gleichzeitig mit dem Eingangssignal des Senders?

von Jens (Gast)


Lesenswert?

da müsst ich mal suchen, ob ich irgendwo nen oszilloskop herbekommen 
könnte

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:
> naja so einfach geht das nicht, da ich alles zusammen auf eine platine
> gelötet habe und über eine isp schnittstelle programmiere und alles in
> gehäusen untergebracht ist man muss das doch irgendwie berechnen können

Na dann.
Viel Spass beim Stochern im Nebel

von Edi R. (edi_r)


Lesenswert?

Was mir dazu eingefallen ist, haben wir abgeklärt, aber das hat ja 
nichts gebracht. Ich weiß nicht, ob das Signal wirklich richtig ankommt, 
und ich weiß nicht, mit welcher Baudrate der ATmega tatsächlich 
empfängt.

Jetzt musst Du den Fehler messtechnisch einkreisen, sonst ist es 
wirklich ein Stochern im Nebel.

von Jens (Gast)


Lesenswert?

so oszilloskop läuft ich sende den richtigen Bitcode und empfange ihn 
auch, habe nun die Frequenz herunter gesetzt, da ich dachte, dass mein 
controller mit einer solchen Sendeflut nicht zurecht kommt und sende nun 
nur noch alle 100ms jedoch sende ich dann nicht nur ein signal sondern 3 
gleiche Signale hintereinander, was aber auch nichts ausmachen dürfte

von Edi R. (edi_r)


Lesenswert?

Und am Ausgang des Empfängers kommt das gleiche an, das Du am Eingang 
des Senders reinschickst? Wenn ja: Wie groß ist die Baudrate der 
gesendeten Zeichen? Und stimmt das mit der Anzeige am Oszilloskop 
überein?

von Jens (Gast)


Lesenswert?

ja stimmt alles habe ich berechnet.
Sprich die Module arbeiten beide einwnadfrei, ich bin nun soweit, dass 
ich vor meiner Nachricht eine Art code sende, um weitere Fehler 
ausschließen zu können.
Nun weiß ich nicht genau wie ich das beim empfänger verarbeite, wenn ich 
2 verschiedene bitfolgen habe, das senden funktioniert schoneinmal.

Ich möchte zuerst den code auswerten und sollte dieser richtig sein, 
will ich den zweiten Bitstrom auswerten.
Nur weiß ich halt ncht genau wie ich das anstellen soll,
ich stelle mal rein wie ich es bisher habe es scheint aber nicht zu 
funktionieren.
1
//Empfangsinterrupt
2
ISR(USART_RX_vect)                      // wird ausgelöst, wenn Daten empfangen wurden
3
{  
4
  u8_Empfang = UDR0;                  // empfangene Daten werden in "u8_Empfang" gespeichert
5
  if( u8_Empfang == 0b00101011)
6
  {
7
    u8_Code_empfangen = 1;
8
  }
9
  else
10
  {
11
    u8_Code_empfangen = 0;
12
  }
13
      
14
}

und dann frage ich den Variable u8_code_emfangen im Hauptprogramm 
zusätzlich ab
1
// Rot empfangen
2
    if(u8_Empfang == 0b00000001 && u8_Code_empfangen ==1)            // Abfrage "Störung" empfangen?
3
    {  
4
      u8_rot = 1;                    // wenn "ja" steuer rote LED an
5
    }
6
    else                        // wenn "nein"
7
    {  
8
  
9
      u8_rot = 0;                    // steuere rote LED nicht an
10
    }

von Jens (Gast)


Lesenswert?

hab nochmal optimiert
1
//Empfangsinterrupt
2
ISR(USART_RX_vect)                      // wird ausgelöst, wenn Daten empfangen wurden
3
{  
4
//  u8_Empfang = UDR0;                  // empfangene Daten werden in "u8_Empfang" gespeichert
5
  if( UDR0 == 0b00101011)
6
  {
7
  u8_Empfang = UDR0;
8
    u8_Code_empfangen = 1;
9
  }
10
    
11
}

und
1
// Rot empfangen
2
    if(u8_Empfang == 0b00000001 && u8_Code_empfangen ==1)            // Abfrage "Störung" empfangen?
3
    {  
4
      u8_rot = 1;                    // wenn "ja" steuer rote LED an
5
      u8_Code_empfangen = 0;
6
    }
7
    else                        // wenn "nein"
8
    {  
9
  
10
      u8_rot = 0;                    // steuere rote LED nicht an
11
    }

von Karl H. (kbuchegg)


Lesenswert?

Ich würde grundsätzlich das Empfangen vom Auswerten des Empfangenen 
trennen.
Die ISR ist nur dafür zuständig ein Byte von der UART zu holen und zb in 
einem Ringbuffer abzulegen.
Ob das Empfangene gültig ist, sehe ich mir dann bei der Auswertung zb in 
main() an.
1
ISR(USART_RX_vect)                      // wird ausgelöst, wenn Daten empfangen wurden
2
{  
3
//  u8_Empfang = UDR0;                  // empfangene Daten werden in "u8_Empfang" gespeichert
4
  if( UDR0 == 0b00101011)
5
  {
6
  u8_Empfang = UDR0;
7
    u8_Code_empfangen = 1;
8
  }
9
    
10
}

Das darfst du nicht tun. Du darfst UDR0 nur ein einziges mal pro Zeichen 
auslesen.

von Jens (Gast)


Lesenswert?

alles klar danke =)

Und wie trenne ich dann die beiden daten voneinander?

von Jens (Gast)


Lesenswert?

So habe nun meinen code abgesichert und die baudrate heruntergesetzt, 
damit alles deutlich und sauber übertragen wird seht auch alles danach 
aus, habe nun abgetestet, und mein microcontroller kann irgendiwe nichts 
mit den daten anfangen, sprich er nimmt den code nicht als den richtigen 
code war, hat jemand ne ahnun woran das liegen könnte?

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:
> So habe nun meinen code abgesichert und die baudrate heruntergesetzt,
> damit alles deutlich und sauber übertragen wird seht auch alles danach
> aus, habe nun abgetestet, und mein microcontroller kann irgendiwe nichts
> mit den daten anfangen, sprich er nimmt den code nicht als den richtigen
> code war, hat jemand ne ahnun woran das liegen könnte?

Ja. An deinem Programm

von Jens (Gast)


Lesenswert?

ja soweit war ich auch, denn hardware arbeitet ja aber ich verstehe 
nicht waurm,da es ja in den Empfangsinterrupt springt und dort den code 
nicht erkennt

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:
> ja soweit war ich auch, denn hardware arbeitet ja aber ich verstehe
> nicht waurm,da es ja in den Empfangsinterrupt springt und dort den code
> nicht erkennt

Einen Moment, ich habe eine Eingebung.
Es ist alles sehr verschwommen. Aber die Geister der Softwarewelt zeigen 
mir eine symbolisierte 42! Vielleicht solltest du Zeile 42 mal genauer 
ansehen?

Mist, jetzt ist alles wieder weg. Irgendjemand hier im Forum hat eine 
schlechte Aura. Ich kann deinen Code nur noch schemenhaft erkennen ... 
nein, jetzt ist auch das letzte bischen Sicht nur noch verschwommen.

(Meine Glaskugel sollte mal dringend zur Reparatur. Kennt jemand einen 
günstigen Magierservice?)

von Jens (Gast)


Lesenswert?

naja ich glaube das ist sehr unpassend und solltest du in einem anderen 
Thread verlagern passt nicht ganz zum Thema oder was meinst du?

Denn wie du sicherlich weißt gibt es keine dummen fragen nur dumme 
Antworten nun denk mal drüber nach

von Klaus (Gast)


Lesenswert?

Naja, es gibt zwar keine dummen Fragen, aber unvollstaendige. Was was 
Karl Heinz dir auf humorvolle Art mitteilen wollte, ist dass dir keiner 
bei einem Fehler in deinem Code helfen kann, wenn du nicht deinen 
aktuellen Code herzeigst.

von Karl H. (kbuchegg)


Lesenswert?

Jens schrieb:

> Denn wie du sicherlich weißt gibt es keine dummen fragen nur dumme
> Antworten nun denk mal drüber nach

Doch, es gibt dumme Fragen. Es ist nur mitlerweile verpönt, den 
Fragesteller darauf hinzuweisen. Eine dumme Frage ist zb. ein Anruf beim 
Arzt: "Doc, es tut weh. Was kann das sein?". Das IST eine dumme Frage, 
weil jedem, der seine 7 Zwetschken noch halbwegs beisammen hat, klar 
sein muss, dass man sie nicht beantworten kann.

Poste deinen Code. Und zwar so, wie er jetzt aussieht. Du gehst ja 
schliesslich auch selber zum Arzt und lässt ihn sich die Sache ansehen 
und berufst dich nicht auf deinen Bruder, der vor einer Woche beim Arzt 
war und so ähnlich aussieht wie du.

von Jens (Gast)


Lesenswert?

sehr "humorvoll" ich würd das eher als unqualifiziert bezeichnen ...

Code ist gleich geblieben bis auf folgende zeilen
1
//Empfangsinterrupt
2
ISR(USART_RX_vect)                      // wird ausgelöst, wenn Daten empfangen wurden
3
{  
4
  u8_Datenstrom = UDR0;                  // empfangene Daten werden in "u8_Datenstrom" gespeichert    
5
  if( u8_Datenstrom == 0b00101011)            // ist die empfangene Bitfolge der Code?
6
  {
7
    u8_Code_empfangen = 1;
8
    //ROTE_LED_AN();                // wenn ja setze das Flag
9
    
10
  }
11
  else                              // wenn die empfangene Bitfolge nicht der code ist
12
  {//ROTE_LED_AN();
13
    if(u8_Code_empfangen == 1)              // Überprüfe ob die vorherige Folge der Code war --> es sind nun sinnvolle Daten
14
    {
15
      u8_Empfang = u8_Datenstrom;          // wenn ja schreibe die Bitfolge in "u8_Empfang"
16
      u8_Code_empfangen = 0;              // und setze das Flag zurück --> Übertragung abgeschlossen
17
    }
18
  }
19
}

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.