Hallo zusammen, ich habe einen Trigger-Eingang der als RS485 alias(EIA-485) Spezifiziert ist. Nun möchte ich mit dem Atmega 360p die Pegeldifferenz simulieren, ohne lauter Wiederstände anzuwenden. Mit 2 IO-Ports kommt irgendwie Mist bei raus. (Triggert nicht korrekt). Kann ich mit zwei PWM Ausgängen das Differenzsignal hinbekommen ? Gibt es Beispiele ? Vielen Dank für jeden Hinweise Karsten aus Berlin
> Mit 2 IO-Ports kommt irgendwie Mist bei raus.
Was passiert konkret? Wie sieht die Generierung der Signale aus?
@Karsten S. (kahnsoft) >Nun möchte ich mit dem Atmega 360p die Pegeldifferenz simulieren, >ohne lauter Wiederstände anzuwenden. Kann man machen, man muss nur zwei IOs synchron umschalten. Also nicht NACHEINANDER sonder echt gleichzeitg. Das geht mit einem passenden Portzugriff. >Kann ich mit zwei PWM Ausgängen das Differenzsignal hinbekommen ? Braucht man nicht.
1 | #define PIN1 PD0
|
2 | #define PIN2 PD3
|
3 | |
4 | PORTD ^= (1<<PIN1) | (1<<PIN2); |
Hallo, danke für deine Antwort. Also es handelt sich um einen HighEnd -Controller für industrielle Anwendungen. Getriggert wird der also über eine RS485 Vereinbarung. (Also keine Kommunikation nur ein Bit quasi) Hier kann man schon bei Google sehen, das eine Leitung High geht wärend auf der anderen eine Flanke stattfindet, nur wird die nicht Null sondern im 5V Fall z.b. 4.8V im Verhältnis zur Quittungsleitung 5V. So bildet die "Quittung 5V" und das Signal(4.8V) eine Differenz also auch LVDS genannt. Ich fummel mich da jetzt ran , setze mit einem Arduino die Quittung auf analogout PWM 255 und das Signal auf dem zweiten AnlOut auf 250 nun wird das scheinbar gut durchgetriggert. Ob ich durch den Pfusch nun Signale verliere kann ich nur schwer ermitteln. Die Frequenzen sind niedrig im 200Hz Bereich. Was mich nun stört das ich in testserien am Oszi das alles ausprobieren muss, wiederstände wollte ich da nicht einschustern in die Leitung. Für Trainingshinweise bin ich sehr Dankbar, ich bin ja Informatiker und Touchiere die Mikroelektronik mit gefährlichem Halbwissen. Läuft also so lala.. Dank Dir Grüße aus Berlin Karsten
Markus schrieb: >> ... Informatiker ... > > Unwahrscheinlich :) Wieso? Ich jedenfalls habe nur recht wenige Informatiker kennengelernt, die tatsächlich programmieren können, aber eine ganze Menge, die viele Tage lang darüber reden können, wie man es richtig machen sollte... Das sind dann die Leute, die bei SAP, T-Systems usw. das Sagen haben... Ich vermute fast, das sie auch beim BER irgendwie beteiligt waren...
Ach seit der Kindheit habe ich schon den Bastelgang Radioman von Kosmos Und alle EE2050 Philips serien :) Und Softwareentwicklung mache ich seit zx81 zeiten also 1981 Langsam komme ich dahinter .. Der LVDS Simulator sieht dann so aus: inline void Trigger(void)//emit short diff flash { //LVDS Signal emulator analogWrite(OUTPORT1,250);//Signal analogWrite(OUTPORT2,255);//Resp delayMicroseconds(500); analogWrite(OUTPORT1,255);//Signal analogWrite(OUTPORT2,0);//resp delayMicroseconds(500); vTrigger++; } Habe noch einen verdammten Teiler im Controller gefunden und umgestellt, nun komme ich auf gute Ergebnisse muss aber weiter prüfen.. Oft hilft es einfach nur von was zu qwatschen was das thema noch mal verinnerlicht. Grüße aus berlin Kasrten
Mensch jo das ist gut, ich lasse mich immer vom Arduino verführen.. #define PIN1 PD0 #define PIN2 PD3 PORTD ^= (1<<PIN1) | (1<<PIN2); thx
@Karsten S. (kahnsoft) >Also es handelt sich um einen HighEnd -Controller für industrielle >Anwendungen. Getriggert wird der also über eine RS485 Vereinbarung. >(Also keine Kommunikation nur ein Bit quasi) Schon klar. >Hier kann man schon bei Google sehen, das eine Leitung High geht wärend >auf der anderen eine Flanke stattfindet, Nö, die Signale schalten praktisch gleichzeitig. Eins geht hoch, das andere runter. > nur wird die nicht Null sondern >im 5V Fall z.b. 4.8V im Verhältnis zur Quittungsleitung 5V. ??? >So bildet die "Quittung 5V" und das Signal(4.8V) eine Differenz also >auch LVDS genannt. Nö, LVDS ist zwar auch differentiell, aber ein anderer, elektrischer Standard als RS485. >Ich fummel mich da jetzt ran , setze mit einem Arduino die Quittung auf >analogout PWM 255 und das Signal auf dem zweiten AnlOut auf 250 nun wird >das scheinbar gut durchgetriggert. Was zu Geier murkst du da rum? Duch braucht keine Sekunde PWM!!! >Für Trainingshinweise bin ich sehr Dankbar, ich bin ja Informatiker und >Touchiere die Mikroelektronik mit gefährlichem Halbwissen. Merkt man.
@ Karsten S. (kahnsoft) >Mensch jo das ist gut, ich lasse mich immer vom Arduino verführen.. >#define PIN1 PD0 >#define PIN2 PD3 >PORTD ^= (1<<PIN1) | (1<<PIN2); Vielleicht nicht soviel Kaffee/Red Bull/whatever saufen und mal versuchen, mit vernünftgen Worten einen vernünftigen Inhalt zu kommunizieren? Was wolltest du uns mitteilen?
Warum nimmst Du nicht einfach ein Treiber-IC? Das da z.B.? http://www.ti.com/lit/ds/symlink/ua9638.pdf Das wäre die saubere Lösung. fchk
Mit analogWrite wird das wahrscheinlich nix, da dies über PWM generiert wird. Und mir scheint, du wolltest hier die 200mv simulieren, die mindestens erforderlich sind. Du kannst direkt mit +-5V der Portpins rein gehen (Ein MAX485 erlaubt bis 12,5V am Eingang) VG Roland
Hi, also danke an alle angeschlossenen Stationen :) Läuft halt mit dem Register: PORTD ^= (1<<PIN4) | (1<<PIN5); (das mit dem LVDS difference signal war hier bedenklich mit dem portswitch läuft das auch, und wohl sicher besser) Alles jute danke für die Hilfen. Grüße aus Berlin.
Nur so geht es also, das ist die einzige gültige Flanke. Sieht trivial aus aber nur mit der negation der bits läuft das. #include <avr/io.h> DDRD = B00111000;//outport mask //RS485 Trigger void Trigger(void) { PORTD = (1<<PIN4) | ~(1<<PIN5); delayMicroseconds(10);//ggf. anpassen PORTD = ~(1<<PIN4) | (1<<PIN5); } Danke nochmal der Hinweise. Alles zusammen hat das Problem gelöst, getestet am Atmel360p via Arduino.
Karsten S. schrieb: > Nur so geht es also, das ist die einzige gültige Flanke. > Sieht trivial aus aber nur mit der negation der bits läuft das. Dir ist aber schon klar, dass Deine Erläuterungen Nonsens waren? Bsp: Karsten S. schrieb: > Hier kann man schon bei Google sehen, Wenn man einen konkreten Typen hätte, einfaches rs485 war's ja nicht. > das eine Leitung High geht wärend > auf der anderen eine Flanke stattfindet, Was unterscheidet Flanke von "high geht" > nur wird die nicht Null sondern > im 5V Fall z.b. 4.8V im Verhältnis zur Quittungsleitung 5V Hier führst Du "Quittungsleitung" ein > So bildet die "Quittung 5V" und das Signal(4.8V) eine Differenz also > auch LVDS genannt. Ohne Datenblatt deiner Aufgabe sind die Erläuterungen sinnfrei. Dass dann Falk eine Lösung postet, 2 Bits zu invertieren, und Du stattdessen alle 8 setzt, zeigt: ja, Informatiker
psst... es reicht, einen der differentiellen Eingänge an 2,5V zu hängen und den anderen mit einem Portpin zu bespaßen...
>>Autor: Achim S. (achs) >>Dass dann Falk eine Lösung postet, 2 Bits zu invertieren, und Du >>stattdessen alle 8 setzt, zeigt: ja, Informatiker Das hat am allerbesten geholfen !
@Karsten S. (kahnsoft) >void Trigger(void) >{ > PORTD = (1<<PIN4) | ~(1<<PIN5); Über diesen Term denken wir dann doch noch einmal nach. Siehe Bitmanipulation und https://www.mikrocontroller.net/articles/Bitmanipulation_-_Standard_C_-_DeMorgan_Umformung > PORTD = ~(1<<PIN4) | (1<<PIN5); Dito. >Danke nochmal der Hinweise. Alles zusammen hat das Problem gelöst, >getestet am Atmel360p via Arduino. Da hattest du mehr Glück als Verstand. Schon mal überlegt, das die anderen Bits in dem Register machen?
Mein Vorschlag: (unter der Voraussetzung, dass vorher schon ein Pin High und der andere Low gesetzt ist)
1 | //RS485 Trigger
|
2 | void Trigger(void) |
3 | {
|
4 | PIND = (1<<PD4) | (1<<PD5); // 2 Pin toggle |
5 | delayMicroseconds(10);//ggf. anpassen |
6 | PIND = (1<<PD4) | (1<<PD5); // 2 Pin toggle |
7 | }
|
Ich staune (mit grossen Augen) welch massives Wissen und Fähigkeiten Informatiker mitbringen. Dagegen sind wir Spaghetti-Codierschweine doch arme Würstchen.
Hallo Ufo, funktioniert leider nicht, die müssen sich als Paar gegenseitig negieren beim zweiten signal nach 10-100 ns. Ein Trigger besteht aus dem Wechsel der Bits daher exclude ~ Danke für deinen Hinweis! Ist ggf. auch eine Eigenschaft der hohen Datensicherheit auf dieser Leitung. 1Kw Co2 Laser.
Hallo UfUf :) Ufo war nicht korrekt :) Was ich damit mache wenn es interessiert sieht man in einem Erklärvideo dazu: https://www.youtube.com/watch?v=jfWM6e0R0mk Viele Grüße Karsten
Karsten S. schrieb: > Ufo war nicht korrekt :) OK.... Dann bin ich gemeint... Atmega360p ist auch nicht korrekt. Denn weder Microchip, noch Google kennt einen Atmega360p (oder habe ich was übersehen?) Karsten S. schrieb: > funktioniert leider nicht, die müssen sich als Paar gegenseitig > negieren beim zweiten signal nach 10-100 ns. > Ein Trigger besteht aus dem Wechsel der Bits daher exclude ~ Ich habe deinen µC als halbwegs modernen ATMega angenommen, das P deutet darauf. Und bei diesen funktioniert der Toggle auf diese Art. Die Bedingungen, unter dem das von dir gewünschte Verhalten erzeugt wird, habe ich auch genannt. Ich nehme also an, dass du nur behauptest, dass mein Code nicht funktioniert. Getestet hast du das nicht. Aber, wie so oft: Das Datenblatt zu deinem µC gibt gerne zu dem Punkt Auskunft.
Danke für den Hinweis es ist ein 328P. (2 Euro) Ne läuft nicht durch Wiederholung des selben Musters. Wie gesagt es wechselt sich der Inhalt alles gut, läuft ja prima. Danke für deine Hilfe. Gruß Karsten
Karsten S. schrieb: > Ne läuft nicht durch Wiederholung des selben Musters. > Wie gesagt es wechselt sich der Inhalt alles gut, > läuft ja prima. Kannst du das übersetzen? Der 328p kann den Toggle über das PINx Register
Halb Leerer schrieb: > Ich staune (mit grossen Augen) welch massives Wissen und > Fähigkeiten Informatiker mitbringen. > > Dagegen sind wir Spaghetti-Codierschweine doch arme Würstchen. Ich verstehe, dass dein Kommentar negativ bewertet wird. Muss dir aber zustimmen! Bin allerdings als Hobbyprogrammierer, als Arduinojünger, kaum in der Position, gestandene Informatiker kritisieren zu dürfen. Aber in diesem Thread fallen mir einige Dinge auf. z.B. mangelnde Sorgfalt. (...,Ufo,360p,...) Ich erwarte von einem Informatiker, dass er ganze und verständliche Sätze schreiben kann. Das er die binären Operatoren vollständig beherrscht, oder zumindest weiß, wo man das nachlesen kann und und der Lage ist sich kundig zu machen. Die in Beitrag "Re: RS485 Differenz simulieren mit Atmega360p" vorgestellte Funktion soll angeblich funktionieren. ok... Aber sie hat Seiteneffekte, welche mit Sicherheit nicht gewünscht sind, und einem (mit hoher Wahrscheinlichkeit) zu späterer Zeit derbe auf die Füße fallen werden. Das ist das, was ich öfter mit "schlampige Arbeit" bezeichne. Hier sage ich: "Mangelnde Sorgfalt." Die Variante mit dem ^= ist da eindeutig vorzuziehen. Meine Variante ist ein paar Takte schneller, braucht etwas weniger Flash, bietet sonst keine Vorteile. Verwundern tut mich, dass mein Toggle Verfahren vom TE nicht verstanden wird/wurde. Und als defekt erklärt wird. Dabei ist das Verhalten doch eindeutig im Datenblatt beschrieben. OK, vielleicht erwarte ich zu viel... Vielleicht ist meine Position auch nicht die, dass ich überhaupt was erwarten "darf". -- Alles in allem: Dieser Thread "verstört" mich etwas.
Arduino Fanboy D. schrieb: > Aber in diesem Thread fallen mir einige Dinge auf. Ja ... da ist so ziemlich alles auffällig. Danke dass sich jemand noch die Mühe macht dies alles auch in einem anderem Licht zu betrachten. Scheinbar gibt es hier genügend Leute die sehr enge Scheuklappen aufgesetzt haben. Arduino Fanboy D. schrieb: > Dieser Thread "verstört" mich etwas. So verstörend dass man schon mit hoher Sicherheit von einem Troll-/Fake-Thread sprechen darf. Oder man kann es einfach nicht glauben dass solche "Informatiker" wirklich ihr Unwesen treiben und es ist tatsächlich so.
Karsten S. schrieb: > Ist ggf. auch eine Eigenschaft der hohen Datensicherheit auf dieser > Leitung. 1Kw Co2 Laser. Das macht mir dann Angst.
Achim S. schrieb: > Karsten S. schrieb: >> Ist ggf. auch eine Eigenschaft der hohen Datensicherheit auf dieser >> Leitung. 1Kw Co2 Laser. > > Das macht mir dann Angst. Ja, ich hoffe auch, das da weitere Sicherheitsmechanismen verbaut sind, die nicht von unserem Informatiker entworfen worden.
Also hier läuft mal wieder eine Diskreditierung. Der hat freundliche Fragen formuliert, und das sind ganz normale Probleme auf die man stoßen wird. Man sollte sich Ehre und Respekt erhalten, oder Sachlich bleiben von wegen Drogensüchtiger und Psychischer ADHS Fall. Trifft eher für die zu, die solche Hetzen veranstalten.
Kortschnoi schrieb: > Also hier läuft mal wieder eine Diskreditierung. > > Der hat freundliche Fragen formuliert, und das sind > ganz normale Probleme auf die man stoßen wird. > > Man sollte sich Ehre und Respekt erhalten, oder Sachlich bleiben > von wegen Drogensüchtiger und Psychischer ADHS Fall. > Trifft eher für die zu, die solche Hetzen veranstalten. mit dem letzten Absatz hast Du natürlich recht. Was ich hier jedoch bedenklich finde, ist weniger die fehlende HW-Kenntniss (die dann mit munter sinnfreie eingeworfenen Begriffen kaschiert wird) sondern - kein Datenblatt oder Typ, um den sonst wirren Pegel- und Trigger-Ausführungen folgen zu können - anscheinend kein Verständnis von boolschen Operationen als Informatiker. Wenn er irgendwie erwähnte: PortD ist sonst nicht belegt, dann könnte man ja sagen: boah, abgefahrener Pfuscher. Aber so sehe ich ihn übermorgen posten: "Kühlung wird beim Triggern ausgeschaltet, 5V mit PWM-DAC erzeugen?"
Alles gut Kortschnoi, die jüngere Generation ist nicht mehr so wie früher wo man froh war überhaupt über ein Thema ohne Briefverkehr zu reden. Und keine Sorge boolesche Algebra hatten wir auf dem zx81, da war mal jedes Bit wichtig , von 2 euro Rechnern mit 20Mhz haben wir nicht zu träumen gewagt. Sollte man mal zu schätzen wissen. Dazu spielte Abba. Aber dieser LVDS kombinierte RS485 Port ist undokumentiert. Wir haben zuerst versucht mit versch. Pegeln die Differenz zu liefern, ausschlaggebend waren aber zwei Trigger mit gedrehtem Inhalt und zwar im ns Bereich gleichzeitig, und in einem bestimmten Zeit Fenster, das muss man erst austüfteln, und daher hier der Dialog, oft ist es wichtig drüber zu reden. Und auch für die jüngeren ist das wichtig, die müssen sich erstmal an die Basis halten und schreien wenn was abweicht, später wird man lockerer. Der Atmel 328P ist zum Testen. Wird später über eine S7 getriggert. Grüsschen aus Berlin Karsten (InHale)
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.