Hallo :) Um einen Routerlog per UART (38400 Baud) auszulesen möchte ich diesen an meinen atmega8 anschließen, um den atmega8 an meinen PC anzuschließen um per UART den Router zu verfolgen. Hintergrund: Das UART des Routers läuft auf 3,3V Pegel und ich möchte mir den Pegelwandler sparen. Der atmega8 sitzt auf einem MyAvrBoard light (http://shop.myavr.de/Hardware%20-%20Baus%C3%A4tze/myAVR%20Board%20light,%20Bausatz.htm?sp=article.sp.php&artID=200084) und hat daher einen USB-Anschluss. Würde es reichen, den rx/tx des Routers an die 2 Interrupts zu hängen und die werte an die UART ports des atmega8 anzulegen sobald sie sich ändern oder müsste eine andere lösung her? lg
Du könntest entweder: - beide USARTS mit gleicher Baudrate aufsetzen und den RX Interrupt einschalten - im RX-Interrupt jeweils das empfangene Byte auf dem anderen USART senden - In der Hauptschleife nur sei(); und dann eine Endlosschleife ohne Inhalt oder: - den USART nicht benutzen und stattdessen die Portpins entsprechend als Ein- und Ausgänge konfigurieren - in einer Endlosschleife die beiden Eingänge ständig abfragen und den dazu gehörigen Ausgangspin auf den gleichen Pegel setzen - Vorteil: Funktioniert mit beliebigen Baudraten, solange die Taktfrequenz ausreichend hoch ist
Hier ein Beispiel, wie es mit einfachem Durchreichen von einem Pin an den nächsten funktioniert:
1 | #include <avr/io.h> |
2 | |
3 | int main(void) |
4 | { |
5 | |
6 | PORTE = (0 << PINE0) | (1 << PINE1); |
7 | PORTH = (0 << PINH0) | (1 << PINH1); |
8 | |
9 | DDRE = (1 << PINE1); |
10 | DDRH = (1 << PINH1); |
11 | |
12 | while (1==1) |
13 | { |
14 | if ((PINE & (1 << PINE0)) == 0) |
15 | PORTH &= ~(1 << PINH1); |
16 | else |
17 | PORTH |= (1 << PINH1); |
18 | |
19 | if ((PINH & (1 << PINH0)) == 0) |
20 | PORTE &= ~(1 << PINE1); |
21 | else |
22 | PORTE |= (1 << PINE1); |
23 | } |
24 | |
25 | return 0; |
26 | |
27 | } |
Kaito C. schrieb: > Würde es reichen, den rx/tx des Routers an die 2 Interrupts zu hängen > und die werte an die UART ports des atmega8 anzulegen sobald sie sich > ändern oder müsste eine andere lösung her? Welche UART ports ? MEGA8 hat nur einen. Und wenn MEGA nichts anderes zu tun hat, als nur Pegel umzusetzen, kannst du das auch in einer normaler Schleife in main() tun. USART ausschalten, TX pin auf Ausgang, die beiden Eingänge ständig abfragen und entsprechend ihren Zustand nach TX durchschalten. Nur aufpassen, wer wann anfängt zu senden (Startbit). Idle und Stoppbit ist dasselbe, dort wo du als erstes Startbit empfängst, bleibt so lange Aktiv, bis ein Startbit vom anderen Eingang kommt. Oliver schrieb: > - in einer Endlosschleife die beiden Eingänge ständig abfragen und den > dazu gehörigen Ausgangspin auf den gleichen Pegel setzen > - Vorteil: Funktioniert mit beliebigen Baudraten, solange die > Taktfrequenz ausreichend hoch ist Blödsinn. Welche Ausgangpins ? Geht auf USB raus - nur ein Ausgang. Oliver schrieb: > Hier ein Beispiel, wie es mit einfachem Durchreichen von einem Pin an > den nächsten funktioniert: Noch dümmer. Erstens: MEGA8 hat kein E- und H-Port. Zweitens: siehe oben, nur ein Ausgang. Drittens: deinen Programm will ich gar nicht kommentieren.
Wenn mans richtig anschließt kann man in Dauerschleife PORTD = PINC ausführen. Klappt bei mir mit 38400 Baud nur lesend angedacht!!
:
Bearbeitet durch User
Marc Vesely schrieb: > Welche UART ports ? > MEGA8 hat nur einen. Zum lesen brauchst Du nur RX, zum Senden nimmst Du TX. Dafür reicht ein UART. > Blödsinn. > [...] > Noch dümmer. Sag mal, gehst Du immer so mit Leuten um, mit denen Du kommunizierst? > Erstens: MEGA8 hat kein E- und H-Port. Was hast Du an dem Wort "Beispiel" nicht verstanden? > Drittens: deinen Programm will ich gar nicht kommentieren. Frage: Hast Du im realen Leben vielleicht schon mal erlebt, dass Du was auf die Fresse bekommen hast und Du konntest es Dir wirklich nicht erklären, warum?
Kaito C. schrieb: > Wenn mans richtig anschließt kann man in Dauerschleife PORTD = PINC > ausführen. Mach mal lieber PORTD |= PINC
Cor Tex schrieb: > Mach mal lieber PORTD |= PINC Und wie werden damit bits in PORTD die einmal gesetzt wurden jemals wieder gelöscht? Der Ruhepegel für UART ist 1 und somit wäre der ausgangs Pin seit dem Rest dauerhaft auf 1.
Frank fragte vorsichtig den Schwätzer Marc Vesely: >Frage: Hast Du im realen Leben vielleicht schon mal erlebt, dass Du was >auf die Fresse bekommen hast und Du konntest es Dir wirklich nicht >erklären, warum? :-))) Wunderbar! Das sind die richtigen Antworten auf solche Anwürfe...
John Wayne sein Garagennachbar schrieb: > Wunderbar! Das sind die richtigen Antworten auf solche Anwürfe... Bist du sonst nicht immer John Wayne seine Schwiegermutter? mfg.
Thomas fragte:
>Bist du sonst nicht immer John Wayne seine Schwiegermutter?
Nein, das ist der Schwiegervater. Ich bin der Garagennachbar sowohl
vom Schwiegervater als auch von John selbst. Es handelt sich nämlich
um eine Doppelgarage.
Ich hoffe, daß ich nun alle Fragen erschöpfend beantwortet habe.
Kaito C. schrieb: > Um einen Routerlog per UART (38400 Baud) auszulesen möchte ich diesen an > meinen atmega8 anschließen, um den atmega8 an meinen PC anzuschließen um > per UART den Router zu verfolgen. Öhm, warum den Umweg über den Atmega8? Es gibt doch mehr als genügend UART2USB oder UART2RS232 Wandler. Beispiel: http://www.elv.de/Kompakt-umgesetzt-–-Mini-USB-UART-Umsetzer/x.aspx/cid_726/detail_30827
Michael Köhler schrieb: > Öhm, warum den Umweg über den Atmega8? Weil er offenbar sein Board nicht umlöten und den darauf befindlichen RS232-USB Wandler verwenden will... Kaito C. schrieb: > um per UART den Router zu verfolgen. Zum Mithören allein reicht doch die RX-Leitung des USB-Wandlers aus. Wofür brauchst du die TX Leitung?
Da die beiden Beiträge auf die ich geantwortet habe, nicht auch gelöscht würden, nehme ich an, dass das löschen meiner Beiträge ein Fehler war, deshalb nochmals die Antworten: Frank M. schrieb: > Frage: Hast Du im realen Leben vielleicht schon mal erlebt, dass Du was > auf die Fresse bekommen hast und Du konntest es Dir wirklich nicht > erklären, warum? Nein. Aber du anscheinend schon mehrmals. John Wayne seine GaragenTante schrieb: > Wunderbar! Das sind die richtigen Antworten auf solche Anwürfe... LOL. Auch eine auf die Fresse mitgekriegt zusammen mit Frank ?
:
Bearbeitet durch User
John Wayne sein Garagennachbar schrieb: > Ich bin der Garagennachbar sowohl > vom Schwiegervater als auch von John selbst. Es handelt sich nämlich > um eine Doppelgarage. Demzufolge gehört dir also die mittlere. mfg.
Marc Vesely schrieb: > Kaito C. schrieb: >> Würde es reichen, den rx/tx des Routers an die 2 Interrupts zu hängen >> und die werte an die UART ports des atmega8 anzulegen sobald sie sich >> ändern oder müsste eine andere lösung her? > > Welche UART ports ? > MEGA8 hat nur einen. Ich glaube, Kaito meint mit "UART ports des atmega8" den RX und den TX Port der UART des Atmega die mit dem UART-USB-Wandler verbunden sind. > Und wenn MEGA nichts anderes zu tun hat, als nur Pegel umzusetzen, > kannst du das auch in einer normaler Schleife in main() tun. Das war ja auch Olivers Vorschlag, anstelle der von Kaito angedachten Interrupt-Steuerung eben "busy polling" zu betreiben. > USART ausschalten, TX pin auf Ausgang, die beiden Eingänge ständig > abfragen und entsprechend ihren Zustand nach TX durchschalten. > Nur aufpassen, wer wann anfängt zu senden (Startbit). Idle und > Stoppbit ist dasselbe, dort wo du als erstes Startbit empfängst, > bleibt so lange Aktiv, bis ein Startbit vom anderen Eingang kommt. > Oliver schrieb: >> - in einer Endlosschleife die beiden Eingänge ständig abfragen und den >> dazu gehörigen Ausgangspin auf den gleichen Pegel setzen >> - Vorteil: Funktioniert mit beliebigen Baudraten, solange die >> Taktfrequenz ausreichend hoch ist > Welche Ausgangpins ? Geht auf USB raus - nur ein Ausgang. Das verstehe ich nicht. Es muss doch bidirektional übermittelt werden, um die Kommandos zum Auslesen des Logs an den Router absetzen zu können, also gibt es doch zwei TX-pins: Router TX -> Atmega8 -> USB RX Router RX <- Atmega8 <- USB TX Marc Vesely schrieb: > Oliver schrieb: >> Hier ein Beispiel, wie es mit einfachem Durchreichen von einem Pin an >> den nächsten funktioniert: > Erstens: MEGA8 hat kein E- und H-Port. > Zweitens: siehe oben, nur ein Ausgang. > Drittens: deinen Programm will ich gar nicht kommentieren. So schlecht ist das Beispielprogramm von Oliver doch gar nicht. Sicher, es ginge noch etwas einfacher. Und er erzeugt bei laufender Kommunikation zur Startzeit einen Kurzschluss, indem er die RX-Pins auf HIGH setzt bevor er sie auf Eingang umschaltet. Und die UART-Ruhelage ist HIGH, also erzeugt die Initialisierung der TX-Ports mit LOW einen Glitch. Aber der Kurzschluss ist wirklich kurz (zwei Zyklen), da wird so schnell schon nichts passieren ... LG, Sebastian PS: Blödsinn, dümmer, Fresse, Schwätzer scheinen mir die guten Absichten aller Mitforisten nicht hinreichend zu würdigen.
Marc Vesely schrieb: > Da die beiden Beiträge auf die ich geantwortet habe, nicht auch gelöscht > würden, nehme ich an, dass das löschen meiner Beiträge ein Fehler war, > deshalb nochmals die Antworten: Diese beiden Antworten wurden wohl gelöscht weil sie schlicht nichts mit dem Thema zu tun haben genau wie dieser Beitrag nun von mir ;) Tipp von mir: Ignorier einfach solche Beiträge die eiinen nur angreifen. Bringt eh nie was gegen den Poster vorzugehen. Dafür ist das Internet zu anonym ;)
Sebastian Wangnick schrieb: > Das verstehe ich nicht. Es muss doch bidirektional übermittelt werden, > um die Kommandos zum Auslesen des Logs an den Router absetzen zu können, > also gibt es doch zwei TX-pins: > > Router TX -> Atmega8 -> USB RX > Router RX <- Atmega8 <- USB TX Irgendwie hab ich gedacht, dass er nur Router_Rx und Router_Tx überwachen, bzw. abhören will und diese beiden Leitungen über MEGA8 als ein Signal an PC weiterleiten will. Ohne dass der PC direkt mit Router kommuniziert. Hmmm... Falsch gedacht, sorry. > PS: Blödsinn, dümmer... Ja, das war dummer Blödsinn von mir, es tut mir leid.
:
Bearbeitet durch User
Gibt sowas das nannte sich wohl XPort oder ZPort als Weiterleitung von RS232, auch per Linux von PC zu PC oder beim ethersex Projekt bzw. AVRNetIO. Problem ist nur: Es ist Mist wenn da was dazwischen hängt. Nimm halt einfach einen Pegelwandler und einen Seriell zu USB. Dann gehts auch. Oder direkt eine serielle am PC, soll es ja auch mal geben haben.
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.