zwei MCP2515 über eine Bibl. ansprechen

Gast #3218034
Lesenswert?

Hallo,

ich habe eine Schaltung mit einem ATmega88 und zwei CAN Schnittstellen.
Zwei CAN Schnittstellen bedeuten 2 MCP2515, welche über SPI angesprochen 
werden.
Jeder dieser Controller hat ein extra CS und ein extra INT.
Nutzen möchte ich die gängige CAN-Bibliothek:
http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek#downloads

Der ganze Code baut auf die config.h auf, in welcher u.a. definiert 
wird, welche Pins am µC CS und INT darstellen.

#define  MCP2515_CS  D,3
#define  MCP2515_INT  D,4

nun habe ich ja aber alles doppelt...

Kann ich irgendwie während der Laufzeit des Programmes diese Belegung 
ändern,
sodass ich beide MCP2515 nach Wunsch ansteuern kann?

Oder muss ich die gesamte Bibliothek anpassen?

Grüße
Gast #3218070
Lesenswert?

Falk Brunner schrieb:
> Teilweise.

hm... ich hab es geahnt.

Dazu hab ich mir folgendes gedacht:

#define  MCP2515_CS  D,3
#define  MCP2515_INT  D,4

#define  MCP2515_CS_1  D,5
#define  MCP2515_INT_1  D,6

Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine 
kleine Entweder-Oder Bedingung drumherum und ergänze die beiden neuen 
defines.
Um zu wählen muss ich dann vorher natürlich immer angeben welchen MCP 
ich meine.

Wäre das eine möglichkeit?

Oder wie sollte ich das machen?
#3218123
Lesenswert?

@qwertz (Gast)

>#define  MCP2515_CS  D,3
>#define  MCP2515_INT  D,4

>#define  MCP2515_CS_1  D,5
>#define  MCP2515_INT_1  D,6

>Immer wenn die Bibl. MCP2515_CS oder MCP2515_INT verwendet bau ich eine
>kleine Entweder-Oder Bedingung drumherum und ergänze die beiden neuen
>defines.

Könnte man machen, dazu muss man den Quellcode sehen.

Ok, gerade mal geschaut. Das Problem ist deutlich größer, denn es werden 
ja diverse Datenstruktiren für die Verwaltung angelegt, das muss man 
alles aufbohren, damit man mehrere parallel verwalten kann. Klingt nach 
ner Menge Arbeit. Und WENN man die schon mal investiert, sollte man es 
nicht hart codiert für N=2 machen, sondern variabel für N=1-X. Ist fast 
der gleiche Aufwand, am Ende aber deutlich flexibler.
Gast #3219503
Lesenswert?

> Ok, gerade mal geschaut. Das Problem ist deutlich größer, denn es werden
> ja diverse Datenstruktiren für die Verwaltung angelegt, das muss man
> alles aufbohren, damit man mehrere parallel verwalten kann. Klingt nach
> ner Menge Arbeit. Und WENN man die schon mal investiert, sollte man es
> nicht hart codiert für N=2 machen, sondern variabel für N=1-X. Ist fast
> der gleiche Aufwand, am Ende aber deutlich flexibler.

..hm das klingt ja schwirig.
Gibt es andere Möglichkeiten?
Vielleicht eine Bibl. die das schon kann? :-)
#3220532
Lesenswert?

Du könntest trotzdem Glück haben. Bei vielen Dingen ist der Aufrufer 
dafür zuständig die Datenstruktur bereit zu halten. Zb die Filter.

Allerdings hab ich bis jetzt im Code einige Funktionen noch nicht 
gefunden, wie zb can_static_filter um mal zu sehen, wie das 
funktioniert.

Muss ich mir doch ein Testprojekt aufsetzen, damit mir die IDE hilft, 
die Relevanten Sachen zusammenzusuchen?
Gast #3221121
Lesenswert?

> Allerdings hab ich bis jetzt im Code einige Funktionen noch nicht
> gefunden, wie zb can_static_filter um mal zu sehen, wie das
> funktioniert.

Die Funktion ist doch unter mcp2515_static_filter.c

> Muss ich mir doch ein Testprojekt aufsetzen, damit mir die IDE hilft,
> die Relevanten Sachen zusammenzusuchen?

Ich wäre wirklich überaus dankbar wenn du mir dadurch Tipps geben 
könntest, wie ich das ganze am besten anstellen sollte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren