mikrocontroller.net

Forum: Compiler & IDEs Funkübertragung mit Atmega169


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich möche mit dem Atmega169 anagolge Signale aufnehmen, diese mit
dem AD Wandler wandeln und dann als Manchestercodiertes diditales Signal
über UART (RS232) ausgeben. Wie kann ich das in C realisieren? Hat
jemand einen entsprechenden Quellcode in C?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Threads über geeignete Funkmodule gab es schon massig, musst nur einmal
suchen. Was der UART mit deiner Manchestercodierung zu tun hat, weißt
du wohl wahrscheinlich selbst nicht?!

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, er wird einen Funkmodul haben, der zwar ,,im Prinzip'' via
RS-232 gespeist wird (bzw. dessen TTL-Pegel-Variante), aber trotzdem
die Signale 1:1 auf die HF schickt, sodass diese gleichspannungsfrei
sein müssen.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau so wie Jörg sagt, die Hadrware habe ich, mir geht es nur um den
C-Code für so eine Anwendung, -also AD Signal aufnehmen,
Manchestercodieren und über UART permanendt ausgeben. In den anderen
Beiträgen habe ich keinen entsprechenden Code gefunden.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil das so nicht geht, du musst die Zahlen per Hand codieren und über
einen Pin ausgeben. Der USART hilft dir da nicht.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist ja prinzipiell auch möglich, ich muss halt nur eine Datenrate
von 1MBit/s erreichen, das heißt die Daten müssen auch schnell genug
vom AVR zum Funkmodul übertragen werden.
Deshalb wollte ich das über UART machen, da man hier die Datenraten
entsprechend hoch einstellen kann.
Für jeden Tip, wie ich das sonst realisieren kann -insbesondere
softwareseitig- bin ich sehr dankbar.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1MBit/s per Funk???

Einfach so? Möglicherweise noch mit so einem ISM-Band "Modem"?

Kann ich mir nicht vorstellen...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber du weißt, wie man einen Pin toggelt?

1MBit halte ich für ein wenig utopisch. Kannst es ja versuchen, aber
netto wird etwas wesentlich geringeres rauskommen.

Kannst dir ja mal selbst ausrechnen, wieviel Takte du dann pro Bit Zeit
hast, um es korrekt formatiert auszugeben.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was meinst du mit Pin toggeln?

Das Funkmodul kann mehr als 1MBit/s wichtig ist nur, dass der AVR die
Daten schnell genug seriell auf das Funkmodul gibt (innerhalb weniger
µs). So dass z.B. ein 10 Bit Datenwort vom AD erzeugt wird, und dann
übertragen werden kann.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Funkmodul hast du denn (und in welchem Band)?

Für diese Datenrate kannst du eigentlich nur SPI machen, RS-232
framing + UART ist da chancenlos.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Funkmodul ist auch von Atmel der Transceiver ATR2406 (im 2,4GHz
Band).
Mir wäre sehr geholfen, wenn mir jemand einen Quellcode zur Verfügung
stellen könnte mit dem ich das über SPI, oder UART realisieren kann.
Ich weiß von Atmel, das das über UART funktionieren soll.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Projekt ist für dich ne Nummer zu groß. Du hast es nicht mal
geschafft, bis Punkt 7.8 in doc4779.pdf zu lesen. Dort steht klar, dass
das SPI genutzt werden muss.

Quellcode gibt es im Datenblatt jedes beliebigen Atmegas...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so weit bin ich sehr wohl gekommen. Unter Punkt 7.8 ist beschrieben, wie
der ATR2406 Programmiert wird, was nämlich über SPI geht. Das hat nichts
mit der Datenübertragung zu tun, sondern nur das setzen der Register des
ATR2406 um bspw. die Datenrate und Trägerfrequenz einzustellen.
Ich habe von Atmel ein Layout für den Transceiver und Mikrokontroller,
wo der Transceiver über UART angeschlossen ist. Leider habe ich keine
Software dazu und dachte hier etwas Hilfe zu bekommen. Nun muss ich
mich eben doch in die Programmierung reindenken und versuchen das
selber zu schreiben.
Vielen Dank für Eure Mühen.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

schau mal im Dokument doc4779.pdf auf Seite 15 (Figure 8-2) da ist
genau das was ich machen möchte.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, musst du die Signale dort wirklich noch Manchester-Codieren?

Ansonsten müsstest du den USART einfach nur so konfigurieren, dass er
die Baudrate via XCK erhält (nicht vom internen Baudratengenerator) und
könntest, vorausgesetzt das Ding ist richtig konfiguriert, einfach
Testbytes in die Luft schicken.
Ich würde mit niedrigen Datenraten anfangen.

Kannst du das Teil schon via SPI korrekt ansprechen?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Manchestercodierung ist von daher wichtig, da ich permanent senden
möchte. So muss das Signal im Mittel gleichstromfrei sein, damit die
PLL nicht ständig einen Einschwingvorgang macht, was Zeit kostet.
Sicher kann ich erst mal mit geringenern Datenraten anfangen, das löst
aber auch nicht mein Problem.
Ich habe noch nicht probiert, ob ich den Transceiver über SPI
ansprechen kann, ich denke aber das ist das geringste Problem. Ich muss
erst mal sicher sein, ob der AVR geeignet ist, was ich ohne Software
nicht kann.

Autor: anderer Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja dann mal ran. Jetzt hast du schon einen Tag im Forum vertrödelt. In
der Zeit hättest du die Software schon längst selber schreiben können.
Wie man den UART programmiert steht im Datenblatt des Atmega.


Martin

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe bereits ein Programm für die UART geschrieben, siehe Anhang.

Was ich nicht ganz verstehe, das gewandelte Signal gebe ich sowohl über
UART als auch über PORTD aus. An PORTD habe ich einfach das
digitalisierte Signal, an dem UART liegt irgendetwas undefinierbares
an. Selbst wenn ich kein analoges Signal auf den Eingang gebe, liegt am
UART was an, an PORT D nichts. Ich denke das kann am UART nicht nur
Start und STOP Bit sein.

2. Frage: Wie muss ich das Programm um die Manchestercodierung
erweitern?

Autor: anderer Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie wäre es mit einer interruptgesteuerten UART Übertragung?
Manchester mit dem UART geht so direkt nicht. Du kannst aber pseudo
gleichspannungsfreie Übertragung machen (einfach 8bi ACSII Zeichen
nehmen die die gleiche Anzahl 0 und 1 haben).
Ansonsten scheint es mir so das du noch eine Menge Hausaufgaben machen
musst.


Martin

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm ist ne mittlere Katastrophe:

- ein AD-Wandler stellt das Ergebnis erst nach einer bestimmten Zeit
zur Verfügung, da muss ein Bit gepollt werden
- du hast im Moment keine kontinuierliche AD-Wandlung (beabsichtigt?)
- wenn du PORTD einen 16-Bit Wert zuweist kommt keine Warnung?

"an dem UART liegt irgendetwas undefinierbares an"
Ich nehme an, eine Folge von Nullen und Einsen ?!

"wenn ich kein analoges Signal auf den Eingang gebe"
Alle was reale Welt ist, ist analog ...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Das Programm ist ne mittlere Katastrophe:"
-deshalb wollte ich mit mit dem Programmieren nicht rumschlagen.

"du hast im Moment keine kontinuierliche AD-Wandlung
(beabsichtigt?)"
-ja sollte so sein. was muss ich ändern?

Am UART liegt ein Siganl an, welches einer fallenden e-Funktion
gleicht, und dann mit steiler Flanke wieder steigt. Sonst aber
periodisch ist. Also wie ne Folge von Nullen und Einsen, blos das die
fallende Flanke einer e-Funktion gleicht.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die e-Funktion kommt daher, dass dein Messfunzeleingang bzw. deine
Übertragungsstrecke als Tiefpass wirkt.

Zum AD-Wandler: Es gibt nen Unterschied zwischen Single Conversion und
Free Running (näheres im Datenblatt).

So eine Aufgabenstellung ohne programmieren lösen zu wollen, ist ein
kühnes Unterfangen. Wünsche dir viel Erfolg und empfehle dir das
Tutorial dieser Seite. Das wird dir deine nächsten 10 Fragen auch
beantworten.

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.