www.mikrocontroller.net

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


Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Seegel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.?

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.