Hallo zusammen. wer kann mir helfen. ich bin absolut neu im bereich AVR-uC prorammieren. Also: Ich möchte über Port D Pins 0...4 (5 Bit) eine Zeit einstellen, die ich dann zu meinen anderen uC als Hexzahl senden möchte. Fürs senden und empfangen brauche ich den gleichen Pin, deshalb muss ich für jede Vorgang Ein- und Ausgänge neu initialisieren. void InitSendenZeit (void) { DDRD |=0x3F; //Port d, pin 0..5 als eingang, mit pin 5 senden /* Usart initialisieren*/ //Wie geht das? if (bit_is_clear (PIND, PIND5)) // Der Taster ist gedrückt. { // Daten senden: etwa so??? // UBRRH = 0x1F; // 5 Bit ???? UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1); } //if }// funktion Ich verwende uC Atmega8 und 2 Funkmodule mit TRX433 (diese benötigen 3 Bidirektionale Pins für die Kommunikation). Wenn jemand in der Lösung auch ein bischen dokumentieren könnte, wäre ich sehr dankbar. Also, wer kann helfen?
Tach, hab für den ollen TRX433 mal ein Interface geschrieben...ist im Anhang, vielleicht nurz Dir das was. Mit USART kannst du auf keinen Fall den TRX ansprechen, weil die Kommunikation zusätzlich über eine Handshake und Clock Leitung abgewickelt wird... Stefan
@ Stefan: erstmal besten Dank für den Interface für TRX433. Ich möchte gerne erstmal für den Einstieg einen Byte senden und empfangen, habe die dokus von trx433 mehrmals schon durchgelesen und einige sachen bereits ausprobiert, natürlich als Anfänger mit Null Erfolg. Kann mir bitte jemand verraten, die sowas schon etwas realisiert haben, wie ich sowas machen kann. Villeicht ist es zu viel verlangt, aber mit so einen kleinen C-Datei, womit man das realisieren könnte, wäre ich sehr gut bedient. Des weitere würde ich dann versuchen selber zu realisieren. Ich möchte am Ende Ports überwachen (insg. ca 10 Bits + 6 Bits für die Kennung der Trx433 untereinander). DANKE. Gruß Calik
Tach, bitte die Doku genau lesen, das gilt übrigens für ALLE Datenblätter, da ist wirklich jedes Wort wichtig :-) Einen Byte kann man nicht senden, wenn dann nur einen 8er Block oder einen 16er Block. Senden kannst du z.B. so: trxadr=dte_rx_buf[0]; trxdata6=dte_rx_buf[0]; trxdata5=dte_rx_buf[2]; trxdata4=dte_rx_buf[3]; trxdata3=dte_rx_buf[4]; trxdata2=dte_rx_buf[5]; trxdata1=dte_rx_buf[6]; trxdata0=dte_rx_buf[7]; trx_send(); Empfangen z.B. so: trxadr=0; trxdata0=13; trx_send(); trx_rcv(); dte_tx_buf[0]=trxdata6; dte_tx_buf[1]=trxdata5; dte_tx_buf[2]=trxdata4; dte_tx_buf[3]=trxdata3; dte_tx_buf[4]=trxdata2; dte_tx_buf[5]=trxdata1; dte_tx_buf[6]=trxdata0; dte_tx_buf[7]=0; dte_tx_pointer=0; Es ist geschickt wenn man die Data Leitung des TRX auf einen Interrupt Eingang des avr legt, da der Data Pin High wird wenn der TRX Daten empfangen hat. Dann muss man umgehend die Daten abholen, sonst verwirft der TRX selbige nach einem Timeout. Stefan
@ Stefan Seegel Besten Dank. Ich werde es mal ausprobieren. Hast du bei deinem Projekt auch mit den "Kommandos" gearbeitet, z.B. Kanal einstellen, Datenmengen einstellen, etc.?
Ja, hab ich, da kommt man garnicht drum herum. Man muss ja wie in der Doku beschrieben über ein Kommando erstmal die Adresse der jeweiligen Geräte setzen. MfG Stefan
Hallo, ich bins nochmal. Ich habe ein ziemlich großes Projekt und bis vor ca. einen Monat keine Erfahrung mit Microcontrollern etc. und programmieren mit C. Nun habe ich mich mittlerweile einigermaßen in uC eigearbeitet. Mein großes Problem ist immer noch mit der TRX433 Transreceiver. Hat jemand vielleicht ein kleines C Datei, den er mir zukommen lassen kann, wo z.B. so ein 8er-Block gesendet und empfangen wird. Das wäre sehr nett. Danke. Gruß an alle Calik @Stefan Seegel: Sorry, ich werde dich nicht mehr direkt anschreiben, sondern alles nur ins Forum posten, damit jeder was davon hat, wie du auch korrekt mir geschrieben hast.
Ok, dann schreib ichs hier nochmal für evtl andere Mitleser: Alles was man braucht ist in der trx433 bibliothek weiter oben. Man muss erst den "Datenpuffer" voll schreiben (Doku des TRX433 beachten) und dann trx_send() aufrufen. So wird gesendet. Zu beachten ist das keines der Bytes 0 sein darf (steht nicht in der Doku). Empfangen siehe Doku: Wenn ein Impuls auf der DATA Leitung kommt muss man man in der lib das kommando zum empfangen aufrufen, die Daten stehen dann im Puffer. Ich wollte evtl die TRX Lib mal umschreiben dass man an die beiden Funktionen einen Zeiger auf einen Puffer übergeben kann, bin aber von den TRXen weggekommen, weil die nix taugen. Gibt da inzwischen viel bessere für das 800MHz ISM Band, die direkt über die serielle Schnittstelle angesteuert werden, die Dinger übertragen dann 1:1, kosten genau so viel, haben höhere Reichweite und sind einfacher anzusprechen. MfG Stefan
@ Stefan >>Gibt da inzwischen viel bessere für das 800MHz ISM Band, die direkt >>über die serielle Schnittstelle angesteuert werden, die Dinger >>übertragen dann 1:1, kosten genau so viel, haben höhere Reichweite >>und sind einfacher anzusprechen. Wo kann man diese den kaufen, ich habe schon bei conrad, schuricht, etc. recherchiert gehabt, bis ich auf die TRX gestoßen bin. Kannst du mir was empfehlen? Danke. mfg Cengiz
Vorsicht mit 866 MHz, davon abgesehen daß es eben kein ISM-Band ist (sondern ein SRD-Band), dort gelten teilweise drastische zeitliche Limitierungen für den Betrieb. Teilweise sind nur 0,1 % Einschaltzeit zugelassen, um die gegenseitige Beeinflussung minimal zu halten.
Hallo, ich habe von der Firma Amber Wireless zwei Vorserienmodelle bekommen, die werden demnächst in Serie gehen. Die Teile heißen OPC 1430. Hab ein paar Tests gemacht, funktionieren sehr gut. http://www.amber-wireless.de/ Stefan
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.