Hallo alle. Ich möchte eine Lin-Kommunikation mit der UART des ATMega168 realisieren. (um den Master muss ich mich nicht kümmern) Ich habe zwei identische Lin slave Baugruppen. Wobei man diese durch einlesen von jumperstellung unterscheiden kann. Woher weiß der LIN header nun an welche baugruppe er gesendet wird? Meine vermutung: Die ID:0 geht an die eine Baugruppe und die ID:1 an die andere aber beide führen die selbe aktion aus. aber ich will einen code für beide slaves nutzten können das geht wohl dann nicht oder? Kann jeder baugruppe nur eine ID zugewiesen werden? hintergrund: ich möchte, dass id0 alle informationen an der Baugruppe1 sammelt ind id1 an der selben baugruppe einen reset auslöst. und analog dazu das id2 infos an der baugruppe 2 sammelt und id3 einen reset an der baugruppe 2 auslöst. Ich habe an meinen LIN-Slaves einen externen Taktgeber installiert. Muss ich den Slave trotdem auf den Master takt synchronisieren? (Master und Slave haben beide ein Baudrate von 9,6kbit/s) Meine Vermutung: ich muss das nicht machen. Muss ich am slave die PID überprüfen? Vermutung: ich muss diese nur für die enhanced checksumme speichern und dann versenden. die auswertung erfolgt dann am Master. Danke für eure Zeit gruß Sticky
hallo sticky. > Woher weiß der LIN header nun an welche baugruppe er gesendet wird? > Meine vermutung: Die ID:0 geht an die eine Baugruppe und die ID:1 an die > andere aber beide führen die selbe aktion aus. andersrum: der LIN header geht an alle busteilnehmer. ob dieser header für einen slave relevant ist, entscheidet dieser anhand der informationen aus dem LDF (die natürlich in irgendeiner form in deine software gegossen werden müssen). wenn ein slave auf einen header antworten muß, schickt er von sich aus den rest des telegramms zurück. demzufolge hättest du ein problem, wenn du dieselbe ID von zwei slaves beantwortet haben wolltest. > aber ich will einen code für beide slaves nutzten können das geht wohl > dann nicht oder? derSELBE code wird's wohl nicht sein, wenn du mit zwei IDs arbeiten willst/mußt. hindert dich etwas daran, ID0 (bzw. 1) in BEIDEN slaves auszuwerten? > Kann jeder baugruppe nur eine ID zugewiesen werden? du kannst jedem slave einen ganzen schwung IDs zuweisen. auch mehreren slaves dieselben. du kannst auch anhand der datenbytes unterscheiden, welcher slave welche der übrigen datenbytes wie zu interpretieren hat ("multiplexing"). so macht man's z.b. auch in den diagnose-frames anhand der SID. lies dir vielleicht besser nochmal die LIN spec durch... > Ich habe an meinen LIN-Slaves einen externen Taktgeber installiert. Muss > ich den Slave trotdem auf den Master takt synchronisieren? (Master und > Slave haben beide ein Baudrate von 9,6kbit/s) > > Meine Vermutung: ich muss das nicht machen. das machst du sowieso über's BREAK/SYNC-field. > Muss ich am slave die PID überprüfen? > Vermutung: ich muss diese nur für die enhanced checksumme speichern und > dann versenden. die auswertung erfolgt dann am Master. wie meinst du das? die PID ist essentieller bestandteil des headers. der slave muß anhand der PID unterscheiden, ob eine nachricht für ihn bestimmt ist oder nicht. ob du die PID in empfangenen nachrichten anhand der ebenfalls übermittelten checksumme auf korrektheit überprüfst, ist deine sache. wenn deine gesamte kommunikation der spezifikation entsprechen soll, hast du EINIGES zu tun. gruß michael
Michael R. wrote: > hallo sticky. > andersrum: der LIN header geht an alle busteilnehmer. ob dieser header > für einen slave relevant ist, entscheidet dieser anhand der > informationen aus dem LDF (die natürlich in irgendeiner form in deine > software gegossen werden müssen). > wenn ein slave auf einen header antworten muß, schickt er von sich aus > den rest des telegramms zurück. demzufolge hättest du ein problem, wenn > du dieselbe ID von zwei slaves beantwortet haben wolltest. (das ganze soll ohne LDF realisiert werden. ) ich meinte das sie baugleich sind aber durch Setzen vun dip-schalter unterschieden werden. > derSELBE code wird's wohl nicht sein, wenn du mit zwei IDs arbeiten > willst/mußt. hindert dich etwas daran, ID0 (bzw. 1) in BEIDEN slaves > auszuwerten? > das sehe ich jetzt auch so :-) >> Ich habe an meinen LIN-Slaves einen externen Taktgeber installiert. Muss >> ich den Slave trotdem auf den Master takt synchronisieren? (Master und >> Slave haben beide ein Baudrate von 9,6kbit/s) >> >> Meine Vermutung: ich muss das nicht machen. > > das machst du sowieso über's BREAK/SYNC-field. das will ich ja gerade umgehen in dem ich am Master und am Slave die gleiche baudrate verwende. sonst sehe ich keinen sinn einen externen taktgeber zu benutzen. >> Muss ich am slave die PID überprüfen? >> Vermutung: ich muss diese nur für die enhanced checksumme speichern und >> dann versenden. die auswertung erfolgt dann am Master. > > wie meinst du das? die PID ist essentieller bestandteil des headers. der > slave muß anhand der PID unterscheiden, ob eine nachricht für ihn > bestimmt ist oder nicht. > ob du die PID in empfangenen nachrichten anhand der ebenfalls > übermittelten checksumme auf korrektheit überprüfst, ist deine sache. ich wollte damit fragen, ob die slaves die aufgabe haben die paritätbits der ID auf richtigkeit zu prüfen. meine vermutung war es eben das ich das nicht machen muss sonder diese mit meinen daten in form der checksumme anden master sende und der master dann prüft, ob sie valide sind. > wenn deine gesamte kommunikation der spezifikation entsprechen soll, > hast du EINIGES zu tun. nein es muss nicht alles der spezifikation entsprechen. Es reicht wenn meine slaves auf bestimmte ID eine bestimmte aktion ausführen. Ich habe da noch eine frage. wie bereit erwähnt habe ich 2 slaves die ich durch dip-schalter adressieren kann. ich will nun den slave über den master mittels seiner IDs steuern. Wenn der Master ID0 sendet sollen alle ADC-Werte des Slaves A an den Master gesendet werden. bei ID1 soll ein Relais des Slave A angesteuert werden. bei ID2 sollen alle ADC-Werte des Slaves B an den Master gesendet werden. wie realisiere ich das am besten ich komm nicht wieter. Gruß Sticky
>>> Muss ich am slave die PID überprüfen? > ich wollte damit fragen, ob die slaves die aufgabe haben die paritätbits > der ID auf richtigkeit zu prüfen. meine vermutung war es eben das ich > das nicht machen muss sonder diese mit meinen daten in form der > checksumme anden master sende und der master dann prüft, ob sie valide > sind. wenn es sich um eine antwort vom slave handelt, erzeugt logischerweise dieser die checksum. und richtig, der master prüft die daten dann auf gültigkeit. andersrum muß bzw. sollte natürlich auch der slave die vom master empfangenen daten anhand der checksum prüfen. > wie bereit erwähnt habe ich 2 slaves die ich durch dip-schalter > adressieren kann. ich will nun den slave über den master mittels seiner > IDs steuern. Wenn der Master ID0 sendet sollen alle ADC-Werte des Slaves > A an den Master gesendet werden. bei ID1 soll ein Relais des Slave A > angesteuert werden. bei ID2 sollen alle ADC-Werte des Slaves B an den > Master gesendet werden. > wie realisiere ich das am besten ich komm nicht wieter. wo genau liegt das problem? du empfängst ein break/sync-signal, dann ein startbit, dann die PID. aus dieser kriegst du die ID. wenn dir die empfangene ID eine empfangsnachricht für den slave anzeigt (hier ID1), steuerst du dein relais an. die datenbytes und alles andere was noch zu diesem frame gehört ignorierst du einfach. wenn der header eine sendenachricht für den slave anzeigt (also ID0 bzw. ID2), veranlaßt du (timeout beachten!) den versand der ADC-daten an den master. wie viele datenbytes du senden mußt, hast du ja irgendwo mal festgelegt. prüfsumme nicht vergessen! alles klar? gruß michael
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.