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
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?
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.
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?
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
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
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 :)
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.
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
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
voiddelayMicroseconds(uint8_tx)
2
{
3
uint8_ti;
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.