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
Wolfgang-G schrieb: > Was bedeutet das L hinter 16000000 ? Dass für die Ganzzahl 16000000 mehr als 16-Bit benötigt werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.