Hallo,
zur Zeit befasse ich mich mit Erweiterungen an diesem Projekt mit dem
RFM70:
http://projects.weber-itam.de/?p=90
http://projects.web4clans.com/wp-content/plugins/download-monitor/download.php?id=1
http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html
In Grundfunktionen funktioniert die Übertragung per Funk, nur möchte ich
noch zusätzliche Möglichkeiten ausnutzen, die das Modul bietet.
Kann mal bitte jemand die Übergabe dieses Pointers genau betrachten:
"buf[byte_ctr] = transmitSPI(0);"
hier mal grob die Konstellation im Programm: 1 | uint8_t buffer[32]; //Zum Lesen des Sende-Registers mit readRegBuf.
| 2 | unsigned char Buffer[10]; //->>> für ITOA
| 3 |
| 4 | uint8_t receivePayload(uint8_t *payload)
| 5 | {
| 6 | uint8_t len;
| 7 | readRegBuf(RFM70_CMD_RD_RX_PLOAD, payload, len);
| 8 | }
| 9 |
| 10 |
| 11 | void readRegBuf(uint8_t reg, uint8_t * buf, uint8_t len)
| 12 | {
| 13 | buf[byte_ctr] = transmitSPI(0);
| 14 | {
| 15 |
| 16 | int main (void)
| 17 | {
| 18 | readRegBuf (0x10,buffer, 5 );
| 19 | }
|
Was nicht funktioniert, ist die Übergabe der Werte, auf die der Pointer
"buf" zeigt, durch die verschiedenen Funktionen bis zur Ausgabe von
"buffer" auf das UART. Innerhalb der Schleife in "readRegBuf" gelingt
die Ausgabe der gelesenen fünf Bytes allerdings einwandfrei.
Kann mir da jemand auf die Sprünge helfen bitte?
mfG
______________________________
______________________________
in rfm70.c: 1 | uint8_t receivePayload(uint8_t *payload)
| 2 | {
| 3 | uint8_t len;
| 4 | readRegBuf(RFM70_CMD_RD_RX_PLOAD, payload, len);
| 5 | uart_puts((char*)buffer); //
| 6 | uart_puts( "\n" ); // neue Zeile und Rücklauf
| 7 | }
| 8 |
| 9 |
| 10 | //************************RFM COMMAND and REGISTER****************************************//
| 11 | // SPI(RFM70) commands siehe Seite 12 Tabelle2, SPI-Commands *** *** *** *** ***
| 12 | void readRegBuf(uint8_t reg, uint8_t * buf, uint8_t len)
| 13 | {
| 14 | char Buffer[10]; //->>> für ITOA
| 15 | uint8_t status, byte_ctr, hilfsvariable; //byte_ctr dient zum Mitzählen der gelesenen Bytes.
| 16 | status = transmitSPI(reg); // Select register to write, and read status UINT8
| 17 |
| 18 | for(byte_ctr = 0; byte_ctr < len; byte_ctr++)
| 19 | buf[byte_ctr] = transmitSPI(0); // Perform SPI_RW to read UINT8 from RFM70 //Einfach Bytes mit Wert Null übertragen per SPI, bis die vorgegebene Anzahl erreicht ist.
| 20 |
| 21 | /*
| 22 | uart_puts("Register: ");
| 23 | itoa( reg, Buffer, 10);
| 24 | uart_puts((char*)Buffer);
| 25 | uart_puts(" "); // neue Zeile und line feed
| 26 |
| 27 | uart_puts("Anzahl: ");
| 28 | itoa( len, Buffer, 10);
| 29 | uart_puts((char*)Buffer);
| 30 | uart_puts("\n\r"); // neue Zeile und line feed
| 31 |
| 32 |
| 33 | for(byte_ctr = 0; byte_ctr < len; byte_ctr++)
| 34 | {
| 35 | hilfsvariable = transmitSPI(0); // Perform SPI_RW to read UINT8 from RFM70 //Einfach Bytes mit Wert Null übertragen per SPI, bis die vorgegebene Anzahl erreicht ist.
| 36 | itoa( hilfsvariable, Buffer, 10);
| 37 | uart_puts((char*)Buffer);
| 38 | uart_puts(" ");
| 39 | buf[byte_ctr] = hilfsvariable;
| 40 | }
| 41 | */
| 42 |
| 43 | /*
| 44 | Ausgabe auf Terminal:
| 45 | Register: 10 Anzahl: 5
| 46 | 52 67 16 16 1
| 47 | Register: 11 Anzahl: 5
| 48 | 53 67 16 16 2
| 49 | Register: 12 Anzahl: 5
| 50 | 195 195 195 195 195
| 51 | Register: 13 Anzahl: 5
| 52 | 196 196 196 196 196
| 53 | Register: 14 Anzahl: 5
| 54 | 197 197 197 197 197
| 55 | Register: 15 Anzahl: 5
| 56 | 198 198 198 198 198
| 57 | Register: 16 Anzahl: 5
| 58 | 52 67 16 16 1
| 59 | */
|
_____________________________________________
in main.c:
1 | uint8_t buffer[32]; //Zum Lesen des Sende-Registers mit readRegBuf.
| 2 | unsigned char Buffer[10]; //->>> für ITOA
| 3 | //falls etwas nicht stimmt, das unsigned hier und in RC5.h entfernen.
| 4 |
| 5 | int main()
| 6 | {
| 7 |
| 8 | uint8_t test[32]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','\n','\r'};
| 9 |
| 10 | uint8_t zaehlvariable, k = 0; //eine Variable zum Testen der LCD-Ausgabe über itoa
| 11 |
| 12 | Begin(); //RFM70 starten
| 13 | setMode(0); //1 als Empfänger, 0 als Sender
| 14 | setChannel(8);
| 15 |
| 16 |
| 17 | sendPayload(test,32, 0); //für Sender ins Programm
| 18 | uart_puts("\n\r"); // neue Zeile und line feed
| 19 | for(k = 0x0A; k < 0x11; k++)
| 20 | {
| 21 | readRegBuf (k, buffer, 5 ); //../main_sender_6.c:191: warning: passing argument 2 of 'readRegBuf' from incompatible pointer type
| 22 | uart_puts((char*)buffer);
| 23 | }
| 24 | uart_puts("\n\r"); // neue Zeile und line feed
| 25 | }
|
Wer ruft denn diese Funktion hier auf?
uint8_t receivePayload(uint8_t *payload)
Der Aufrufer müsste meines Erachtens Speicher für das anlegen, worauf
der Zeiger uint8_t *payload zeigt. Wo passiert das?
Der Aufruf erfolgt von main aus. Dort ist "buffer" bereits angelegt.
siehe Anhang.
Man kann also von main aus die 32 Bit an Daten, die das Modul empfangen
hat, sich anzeigen lassen mittels
if (receivePayload(buffer)) //für Empfänger ins Programm
{
uart_puts((char*)buffer); //für Empfänger ins Programm
uart_puts("\n"); //für Empfänger ins Programm
}
aber ein direkter Aufruf aus main
for(k = 0x0A; k < 0x11; k++)
{
readRegBuf (k, buffer, 5 );
//../main_sender_6.c:191: warning: passing argument 2 of 'readRegBuf'
from incompatible pointer type
uart_puts((char*)buffer);
}
geht nicht oder bringt kein plausibles Ergebnis. Ich blicke da leider
nicht durch. Habe schon einiges ausprobiert, aber es war nicht das
richtige dabei.
mfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|