Forum: Mikrocontroller und Digitale Elektronik Uart mit LIN Protokoll


von Amir B. (sticky)


Lesenswert?

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

von Michael L. (-mic-)


Lesenswert?

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

von Amir B. (sticky)


Lesenswert?

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

von Michael L. (-mic-)


Lesenswert?

>>> 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
Noch kein Account? Hier anmelden.