Forum: Compiler & IDEs Funksteckdosen Library


von malli (Gast)


Lesenswert?

Hallo Leute,

ich bin der malli und habe da eine Frage bezüglich der euch vielleicht 
bekannten Funksteckdosen 433 MHz Library "rc-switch", die open source 
unter http://code.google.com/p/rc-switch/ zu finden ist.
Diese will ich auf plain gcc Code "portieren", dazu habe ich im Code 
einfach die RCSwitch:transmit Funktion geändert:

digitalWrite(…, HIGH) zu PORTB |= (1 << …)
digitalWrite(…, LOW) zu PORTB &= ~(1 << …)

sowie eine delayMicroseconds Funktion implementiert:

void delayMicroseconds(uint8_t x) {
uint8_t i;

for (i = 0; i<x; i++) {
_delay_us(1);
}
}

die receive Funktionen benötige ich nicht, daher hab ich einfach 
RCSwitchDisbaleReceiving definiert.

Leider bleibt das ganze ohne Funktion, weiß jemand, warum? Der Sender 
funktioniert mit der Library am Arduino perfekt.

Danke, euer malli

von Karl H. (kbuchegg)


Lesenswert?

malli schrieb:

> void delayMicroseconds(uint8_t x) {
> uint8_t i;
>
> for (i = 0; i<x; i++) {
> _delay_us(1);
> }
> }

und, hast du auch F_CPU korrekt gesetzt?

von malli (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> malli schrieb:
>
>> void delayMicroseconds(uint8_t x) {
>> uint8_t i;
>>
>> for (i = 0; i<x; i++) {
>> _delay_us(1);
>> }
>> }
>
> und, hast du auch F_CPU korrekt gesetzt?

#define F_CPU 16000000L

#include <util/delay.h>

hab ich im Quelltext.

von Karl H. (kbuchegg)


Lesenswert?

malli schrieb:

>> und, hast du auch F_CPU korrekt gesetzt?
>
> #define F_CPU 16000000L
>
> #include <util/delay.h>
>
> hab ich im Quelltext.

Und?
läuft dein µC auch mit 16Mhz?

Hast du das getestet?

von Michael D. (nospam2000)


Lesenswert?

malli schrieb:
> Leider bleibt das ganze ohne Funktion, weiß jemand, warum?

Wenn du den ganzen Code posten würdest, könnte man dir leichter helfen. 
So kann man nur mutmaßen und im Nebel stochern.

 > digitalWrite(…, HIGH) zu PORTB |= (1 << …)
 > digitalWrite(…, LOW) zu PORTB &= ~(1 << …)

Das funktioniert natürlich nur für ... von 0 bis 7

  Michael

von malli (Gast)


Lesenswert?

Ja, die Fuses sind gesetzt. Habe testweise auch eine LED sekundenweise 
blinken lassen, stimmt genau. Ich hab auch mal F_CPU sehr hoch gesetzt, 
um die Übertragung an einer LED zu beobachten, und es kommt mir so vor, 
als würde immer das High des ersten Impulses fehlen, keine Ahnung ob ich 
mir das nur einbilde

von Davis (Gast)


Lesenswert?

malli schrieb:
> Ja, die Fuses sind gesetzt. Habe testweise auch eine LED sekundenweise
> blinken lassen, stimmt genau. Ich hab auch mal F_CPU sehr hoch gesetzt,
> um die Übertragung an einer LED zu beobachten, und es kommt mir so vor,
> als würde immer das High des ersten Impulses fehlen, keine Ahnung ob ich
> mir das nur einbilde

LOL :)

von malli (Gast)


Angehängte Dateien:

Lesenswert?

Davis schrieb:
> malli schrieb:
>> Ja, die Fuses sind gesetzt. Habe testweise auch eine LED sekundenweise
>> blinken lassen, stimmt genau. Ich hab auch mal F_CPU sehr hoch gesetzt,
>> um die Übertragung an einer LED zu beobachten, und es kommt mir so vor,
>> als würde immer das High des ersten Impulses fehlen, keine Ahnung ob ich
>> mir das nur einbilde
>
> LOL :)

???

Ich habe jetzt mal den Quellcode angehängt, RCSwitch.cpp und .h sind die 
Dateien der Library, RF433lib.cpp das Testprogramm.

von Wolfgang-G (Gast)


Lesenswert?

zufällig habe ich hier ein  Programmschnipsel entdeckt, welches ich in 
einem anderen Fall nicht deuten konnte.

Was bedeutet das L hinter 16000000 ?
#define F_CPU 16000000L

von Michael A. (Gast)


Lesenswert?

Wolfgang-G schrieb:
> Was bedeutet das L hinter 16000000 ?

Dass für die Ganzzahl 16000000 mehr als 16-Bit benötigt werden.

von mally (Gast)


Lesenswert?

Hat jemand mal über den Code drübergeschaut? :(

von Karl H. (kbuchegg)


Lesenswert?

Na ja

> und es kommt mir so vor, als würde immer das High des ersten
> Impulses fehlen, keine Ahnung ob ich mir das nur einbilde

Hast du denn dieses 'kommt mir so vor' in der Zwischenzeit abgeklärt?



Da sich das ganze Protokoll über Zeiten definiert, die im wesentlichen 
hier
1
void delayMicroseconds(uint8_t x)
2
{
3
  uint8_t i;
4
5
  for (i = 0; i < x; i++) {
6
    _delay_us(1);
7
  }
8
  
9
}

festgelegt werden, würde ich mal hergehen und die extrem verlängern. 
Anstatt einem _delay_us(1) würde ich da mal (bei ansonsten unverändertem 
Programm) da ein _delay_ms(10) oder so einsetzen. LED an den Ausgang und 
nachsehen, was sich am Ausgang tut.

Dasselbe mit der Arduino Version und dann das Gesehene miteinander 
vergleichen.

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.