Forum: Mikrocontroller und Digitale Elektronik LIN Implementierung am AT90CAN128


von Marco (Gast)


Lesenswert?

Hallo zusammen,

ich bin im augenblick an meiner Abschlussarbeit und bräuchte dringend 
hilfe!
Ich Habe mir eine Platine erstellt mit einem AT90CAN128 und einem 
MCP2021 LIN Transceiver.

Ich benutze die App note AVR322 und bekomme diese leider nicht umgesetzt 
im Atmel Studio damit ich LIN Botschaften von einem Master versenden 
kann.

Hat jemand Erfahrung im Programmierien von LIN und würde mir geren 
helfen gerne auch gegen Geld falls es mich weiter bringt.

von Harald (Gast)


Lesenswert?

Was ist dein konkretes Problem?

Zwei wichtige Hinweise in Bezug auf den MCP2021. Die mit dem eingebauten 
Regulator können ziemliche Divas sein, evtl auch die pinkompatiblen von 
NXP testen (z.B. TJA2021)

- am Ausgang des Voltage Regulators muss ein paar uF keramischer 
Kondensator, AUCH wenn Du den Ausgang nicht nutzt. Sonst ist die interne 
Spannung nicht stabil.

- CS/WAKE Aufwachsequenz aus dem Datenblatt beachten, sonst kommt da 
nichts raus.

- kommen die Daten aus dem AVR raus?

von tom (Gast)


Lesenswert?

Hi,

ausgehend von deinem posting kann dir nicht wirklich konkret 
weitergeholfen werden...
und mit "ich mach mal eine platine und nehme den source code einer 
app-note daher" ist es in diesem fall wohl nicht getan ggg
du solltest problematik und werkzeuge besser verstehen, wenn es um 
(D)eine abschlussarbeit geht.
ansonsten bist du nur ein weiterer plagiatsheld-karl-theodor...

1. Nimm Deine uC-HW schritt für schritt in betrieb
* läuft der at90can - controller auf deiner platine ?
* stimmt die Vcc und die cpu-clock configuration (fuses)?
* kommst du mit dem debugger drauf ?

2. Nimm deinen LIN-transceiver in betrieb, siehe hinweise von harald
* halt das ding statisch wach, der pegel welcher am Tx-pin anliegt, muss 
mit minimaler verzögerung am Rx-pin auftauchen. das kannst du mit dem 
avrstudio debugger einfach stimulieren + kontrollieren.
bevor das nicht tut, wird der LIN-stack aus der app-note nix gross 
machen, da die interne state machine zum parsen des LIN-protokolls auf 
dem rx-interrupt aufsetzt. das ist nicht ungewöhnlich.

3. angenommen deine HW tut jetzt (uC+LIN transceiver) nun 
SW-inbetriebnahme
* die appnote sourcen+projekt sehen nach IAR-compiler aus imho, so du 
den hast - gut.
* wenn nicht, musst du das schicht für schicht nach avr-gcc portieren. 
ist absolut kein hit, wenn man weiss was zu tun ist. die 
isr-deklarationen ändern z.B. ...

4. Wenn das alles tut, erst LIN messages von master schicken lassen und 
mit einem trace-tool oder zur not scope+terminalprogramm validieren.
so man hat, z.B. eine PC slave-simulation nutzen (Canoe oder was immer 
auch) oder einen echten HW-slave anschliessen und mit dem richtigen 
Message-Header "füttern".


Also, wenn du hilfe erbittest - mehr und klare infos zu deinem projekt 
posten (Schaltplan+layout, welche tools hast du, welche vorkenntnisse), 
ok ?

viel erfolg und motivation am Lernen !

tom.

von Harald (Gast)


Lesenswert?

Tja, ich glaube Marco ist bereits in Panik verfallen, jedenfalls keine 
Antwort bis jetzt obwohl es doch eilt...

Man kann einfach mal eine LIN-Message komplett manuell erzeugen, also 
ohne das ganze Interrupt-Gelumpe, also:

- Nullbyte mit niedrigerer Datenrate (1/2) senden (damit ein Break draus 
wird)
- etwas warten, damit das Break komplett gesendet ist.
- Baudrate wieder auf 19200 (oder was immer es sein soll)
- 0x55 senden
- fix-ID senden (Paritäten händisch ausrechnen)
- 1..8 Datenbytes senden
- Checksumme senden (händisch ausrechnen)
- etwas warten
- wieder oben beginnen

Scope/Debugger bedienen.

Das sind 20 Zeilen Code, wenn das läuft kann man die Appnote in Betrieb 
nehmen.

von Daniela (Gast)


Lesenswert?

Harald schrieb:
> Nullbyte mit niedrigerer Datenrate (1/2) senden (damit ein Break draus
> wird)
> - etwas warten, damit das Break komplett gesendet ist.
> - Baudrate wieder auf 19200 (oder was immer es sein soll)
> - 0x55 senden
> - fix-ID senden (Paritäten händisch ausrechnen)
> - 1..8 Datenbytes senden
> - Checksumme senden (händisch ausrechnen)
> - etwas warten
> - wieder oben beginnen

Hallo,
versuche auch gerade etwas per LIN zu senden. Dazu habe ich mir auch 
passende Lektüre besorgt.
Nun sende ich folgendes per UART:

-0x00   (bei halber Baudrate)
-0x55   (bei 19200kBaud)
-0xf7:0x4a:0x55:0x93:0x5e:0xe6 (dies soll ein Masterframe sein)

Leider sehe ich keine Daten, es werden nur Fehlermeldung angezeigt.
Ich vermute das ich bei Checksumme oder dergleichen einen Fehler mache.
Kann das sein?

LG
Deniele

von Daniela (Gast)


Lesenswert?

Hallo,
ich habe gerade festgestellt das mein MCP2003 offensichtlich nicht tut.
Am LIN-Pin habe ich immer High-Level.
Ich habe ihn aber wie im Datenblatt beschrieben angeschlossen... :-(


Gruß
Daniela

von Harald (Gast)


Lesenswert?

Und am vorgelagerten TX Pin, was hast Du da? Hab jetzt keine Lust ins 
Datenblatt zu schauen, was ist beim MCP2003 mit dem Wake Signal?

von Daniela (Gast)


Lesenswert?

Hi,
was meinst Du mit vorgelagertem TX Pin?
Ich habe die TXD und RXD mit den entsprechenden Leitungen am µC 
verbunden.
Wake liegt über 10k an VBB. CS habe ich fest auf 5V gelegt...
So habe ich das aus dem Datenblatt interpretiert.
Danke...

Daniela

von Daniela (Gast)


Lesenswert?

So,
ich habe mir mal ein Oszilloskop ausgeliehen. Leider eines mit 
LCD-Display.
Offensichtlich kommen keine Signale aus dem MCP2003. Ab und an sehe ich 
einen Peak, aber nichts plausibles.
Habe ich einen Fehler beim Anschluß (siehe oben) gemacht? :-(

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.