Forum: Compiler & IDEs Zeit via Taster eingeben und über USART (Bidirektional)


von Calik (Gast)


Lesenswert?

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?

von Stefan Seegel (Gast)


Angehängte Dateien:

Lesenswert?

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

von Calik (Gast)


Lesenswert?

@ 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

von Stefan Seegel (Gast)


Lesenswert?

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

von Calik (Gast)


Lesenswert?

@ 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.?

von Stefan Seegel (Gast)


Lesenswert?

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

von Calik (Gast)


Lesenswert?

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.

von Stefan Seegel (Gast)


Lesenswert?

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

von Calik (Gast)


Lesenswert?

@ 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

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Stefan Seegel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.