SPI-Bus, SD-Karte, CAN und LCD -> wie lösen(C/C++)?

Gast #3208118
Lesenswert?
• ▲
▼
Hallo zusammen,

ich stehe gerade vor der Aufgabenstellung eine SD-Karte, einen 
CANbus-Treiber(MCP2515) und ein SPI-Lcd(1,8"noname)an einem 
Atmega1284(als Spi-Master) zu betreiben.

Da ja immer nur einer der Teilnehmer gleichzeitig auf dem Bus aktiv sein 
darf, stelle ich mir die Frage wie ich diese am besten entkoppel und 
nacheinander abarbeite?!?

Ein Taskmanager ist vorhanden, allerdings wie löse ich z.B. das 
pollen(dummy-bytes senden) bei der SD-Karten-Initialisierung bis diese 
antwortet(Bibliothek: http://www.roland-riegel.de/sd-reader/)?...Sobald 
"sie" geantwortet hat, darf ich doch nicht einfach weiter pollen, bis 
der Task abgearbeitet wurde!?!

Programmiert wird im Atmel-Studio in C/C++.

Für detaillierte Herangehensweisen und Vorschläge wäre ich euch dankbar
Gast #3208134
Lesenswert?
• ▲
▼
Ein Slave muß erst vollständig bearbeitet werden bevor man eine Aktion 
auf einem anderen Salve ausführen kann.
Also entweder die Slaves nacheinander abarbeiten oder einen Controller 
mit mehreren SPIs benutzen.
Gast #3208212
Lesenswert?
• ▲
▼
@Frank
Warum wäre dies vor allem mit dem CAN-Chip von Vorteil? Wegen der hohen 
Datenrate?
Da beide Möglichkeiten leider nicht umsetzbar sind bleibt nur die 
Softwarelösung.

Wie würdet ihr diese Softwarelösung ansatzweise umsetzen? Per 
Status-Polling oder Interruptbetrieb(bevorzugt).
#3208312
Lesenswert?
• ▲
▼
@ NickNack (Gast)

>ich stehe gerade vor der Aufgabenstellung eine SD-Karte, einen
>CANbus-Treiber(MCP2515) und ein SPI-Lcd(1,8"noname)an einem
>Atmega1284(als Spi-Master) zu betreiben.

Kein Problem.

>Da ja immer nur einer der Teilnehmer gleichzeitig auf dem Bus aktiv sein
>darf, stelle ich mir die Frage wie ich diese am besten entkoppel und
>nacheinander abarbeite?!?

Nacheinander? Siehe Multitasking.

>Ein Taskmanager ist vorhanden, allerdings wie löse ich z.B. das
>pollen(dummy-bytes senden) bei der SD-Karten-Initialisierung bis diese
>antwortet(Bibliothek: http://www.roland-riegel.de/sd-reader/)?...

Ich sehe da kein Problem. Man ruft die Init-Funktion der SD-Karte auf, 
die arbeitet ne Weile, dann ist sie fertig. SD-Karte wird per Chip 
Select deaktiviert, dann können andere SPI-ICs angesprochen werden. Ganz 
normales kooperatives Multitasking.


>Programmiert wird im Atmel-Studio in C/C++.

Ohhh C++. Aber Keine Idee wie man so ein eher einfaches Problem angeht? 
Komisch.
Gast #3208314
Lesenswert?
• ▲
▼
@Torsten C & Frank K.
Die Hardware steht bereits und ist bis auf den SPI-Bus komplett 
ausgereizt. Da die Anforderungen gestiegen sind(im laufe der Zeit) 
kriegt die Platine nun ein Update in Form einer Erweiterungsplatine, 
welche über den SPI-Bus verbunden wird.
Der Atmel "Microcontroller Selector" spuckt mir keinen Atmel Controller 
aus der im TQFP48 ist, I2C, 2USARTS, SPI, CAN und mindestens 16kB Ram 
hat.
-->Ein komplettes Redesign würde sich nicht mehr lohnen.

Daher mein Wunsch das ganze möglichst nur per Softwaresteuerung für den 
SPI-Bus zu lösen. Da fehlen mir allerdings die Erfahrungen und ich frage 
euch nach Lösungsansätzen für selbige :)

Gruß
Persönliche Seite #3209085
Lesenswert?
• ▲
▼
NickNack schrieb:
> ich stehe gerade vor der Aufgabenstellung eine SD-Karte, einen
> CANbus-Treiber(MCP2515) und ein SPI-Lcd(1,8"noname)an einem
> Atmega1284(als Spi-Master) zu betreiben.

Und welcher von den dreien ist der "Update in Form einer 
Erweiterungsplatine"?

Hast Du noch GPIOs frei, um einen zusätzlichen Software-SPI zu ergänzen? 
Oder soll die Erweiterungsplatine mit einem zusätzlichen "Chip-Select" 
an den vorhandenen (Hardware-SPI?) angeschlossen werden?

Falk Brunner schrieb:
> SD-Karte wird per Chip
> Select deaktiviert, dann können andere SPI-ICs angesprochen werden.

Kann das "Chip-Select" nicht zwischendurch auch inaktiviert werden, um 
mit dem SPI andere Dinge zu machen? Oder nimmt das die SD-Karte krumm?
#3209134
Lesenswert?
• ▲
▼
@Torsten C. (torsten_c) Benutzerseite

>> SD-Karte wird per Chip
>> Select deaktiviert, dann können andere SPI-ICs angesprochen werden.

>Kann das "Chip-Select" nicht zwischendurch auch inaktiviert werden, um
>mit dem SPI andere Dinge zu machen?

Komischer Satz.

Eher so.

Ja, Chip Select der SD-Karte kann zwischen Operationen inaktiv (=High) 
werden, damit wird die SD-Karte inaktiv geschaltet, in dem Sinn, dass 
die SPI-Kommunikation nicht an sie gerichtet ist. INTERN macht sie dabei 
natürlich KEINEN Reset sondern wartet auf neue Anweisungen per SPI, wenn 
CS wieder aktiv (= LOW) wird.

>Oder nimmt das die SD-Karte krumm?

Nö. Es gibt sicher ein paar Stellen, wo es Timeouts gibt, aber an die 
kommt man im Normalfall so nicht ran, wenn man eine fertige FAT-Lib 
benutzt, die stecken in den Details der SD-Karten Kommunikation und 
damit der FAT-Lib. Jeder Aufruf einer Funktion der FAT-Lib endet mit 
einem deaktivierten CS der SD-Karte. Also kann man sinngemäss einfach so 
machen.

1
while (1) {
2
  zugriff_SD-Karte()
3
  zugriff_CAN()
4
  zugriff_LCD()
5
}
Persönliche Seite #3209139
Lesenswert?
• ▲
▼
@Falk Brunner (falk): Danke für die Klarstellung.

Torsten C. schrieb:
> Oder soll die Erweiterungsplatine mit einem zusätzlichen "Chip-Select"
> an den vorhandenen (Hardware-SPI?) angeschlossen werden?

PS: Oder ist vielleicht gar kein weiterer GPIO für ein weiteres CS frei? 
Dann kannst Du vielleicht aus zwei CS-Signalen vier machen, z.B. mit 
einem 74HC138.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.