Forum: Mikrocontroller und Digitale Elektronik SPI und ISP in einer Schaltung


von Rahul (Gast)


Lesenswert?

Guten Morgen!
Ich habe hier das Problem, dass ich einen MCP2515 (CAN-Controller von
Microchip) per SPI an einen ATmega32 hängen möchte.
Gleichzeitig will ich den ATmega aber auch noch über die gleiche
Schnittstelle per STK500 programmieren (ISP halt).
Momentan steckt der MCP2515 in einem Steckbrett mit äusserer
Beschaltung (24MHz-Quarzoszillator).
Wenn ich den ATmega jetzt programmieren will geht das nicht, wenn ich
den MCP aber abklemme geht es. Kann das mit zu langen Leitungen
zusammenhängen (STK500-Problem)?
Wenn ich den ganzen Spaß jetzt auf eine Platine mache, wie muß ich dann
den MCP vom "Programmierstrang" lösen? Reicht es einen Pull-Up an
dessen CS-Leitung zu hängen? Wie ist das mit der Reset-Leitung, da ich
beide Controller über einen Reset-Controller betreiben wollte?

Vielen Dank im Vorraus

Gruß Rahul

von Dirk (Gast)


Lesenswert?

Hi,

bei Atmel ist ein Appnote ... normalerweise schaltet man 1k
Widerstaende dazwischen.

Mfg
Dirk

von Thorsten (Gast)


Lesenswert?

Alternativ den MCP2515 mit Jumper während des Programmierens abkoppeln.
Ist zwar nicht sehr elegant, funktioniert aber :)

von Daniel (Gast)


Lesenswert?

Hallo,

ich verwende den ATmega16 mit dem MCP2515. Habe keine Widerstände im
SPI  Bus. Die braucht man eigentlich nur wenn noch ein Mikrocontroller
am Bus ist. Habe auch keine Probleme beim Flashen. Hält Du den
Can-Controller im Reset beim programmieren ? Wenn schließ einfach die
Resetleitung vom ISP mit an den Can-Controller. Gruss Daniel

von Rahul (Gast)


Lesenswert?

Mahlzeit!
Dass das mit dem STK500 nicht funktioniert, liegt wohl an den langen
Leitungen auf dem STK und dann auch noch zum Zielsystem (MCP2515).
Ich bin gerade dabei eine Platine (mit OrCAD) zu entwerfen, ujnd werde
die Widerstände einfach mal vorsehen.

Gruß Rahul

von Marco Genise (Gast)


Lesenswert?

Hallo,

sorry wenn ich diesen alten Thread nochmal zum Leben erwecke, aber
heisst dass dann, dass man die 1k Widerstände auch in die SPI-Leitungen
schalten sollte  kann  muss, wenn man den Atmel als Master und sonst
nur Slave-Devices verwendet?
Schaltet man die 1k Widerstände in alle Leitung, also Data-In,
Data-Out, Clk & SS?

Grüße,

Marco.

von Rahul (Gast)


Lesenswert?

Die müssen einfach in alle Leitungen, die auch der ISP-Stecker belegt.
MOSI, MISO, SCK. Beim Reset bin ich mir jetzt nicht sicher. DAmüsste
ich nachgucken.

von Marco Genise (Gast)


Lesenswert?

Hab's in der Application Note 910 gefunden ... die müssen nur in die
Leitungen MOSI, MISO & SCK. #RESET kommt keine - die hat ja
letztendlich auch nichts mehr mit SPI zu tun.

Wie komme ich aber auf den Wert von 1k? In der AN steht nur, dass der
Wert abhängig von der Belegung des SPI gewählt werden muss.

Grüße,

Marco.

von Peter Dannegger (Gast)


Lesenswert?

Alles Quatsch, Du must nur den /CS des MSP mit auf Deinen AVR klemmen,
damit dieser ausgewält werden kann und dann noch einen Pull-up (10k)
gegen VCC ran.

Während Reset sind die AVR-Ausgänge floatend und dann sorgt der Pull-up
dafür, daß der MSP still ist (disabled).


Peter

von Marco Genise (Gast)


Lesenswert?

Hallo Peter,

klingt schon logisch einen Pull-Up am CS zu verwenden um das Device zu
deaktivieren, aber das war eigentlich garnicht meine Frage.

Ich wollte ursprünglich wissen ob man die Widerstände auch in die
SPI-Leitungen schalten sollte, wenn man nur Slave-Devices am Atmel hat.
Daraufhin hat sich mit Hilfe der genannten AN rausgestellt, dass Atmel
die bei Verwendung eines ISP auch so empfiehlt / vorschlägt.

Meine Frage lautete nun letztendlich wie man die Größe des
zwischengeschaltenen Widerstandes am besten ermittelt?

Grüße,

Marco.

von Peter Dannegger (Gast)


Lesenswert?

Die Schutzwiderstände sind nur nötig, wenn beide Seiten unterschiedliche
Stromversorgung haben.


CMOS-ICs können nämlich einen parasitären Thyristoreffekt zeigen, wenn
an den IO-Pins Spannung liegt, bevor sie an VCC liegt.
Sie werden dann schweineheiß und können dauerhaft Schaden nehmen.

Ist auch eine beliebte Methode, um LCDs mit internem Controller
(HD44780) zu schlachten.


Die Widerstände begrenzen also den Strom unter den Zündwert des
parasitären Thyristors.


Peter

von Jörn G. aus H. (Gast)


Lesenswert?

Ne Peter, die Rs in der App910 sind nicht wegen dieses Effektes dort
(sonst müssten sie ja in der Leitung zum STK500 drin sein).
Sie sind nötig, wenn das 2. SPI Device gegen den SPI Programmer gegenan
treiben könnte.

Ihre Dimensionierung? Wenn STK500 high "sagt" (+5V) und anderes
Device low, dann fliessen bei 1kOhm 5mA - da dürfte dann nicht kaputt
gehen, also schon keine ganz verkehrte Wahl. Vielleicht einfach mal
auspobieren von 470Ohm bis zu 47kOhm?

Das Problem mit den langen SPI-Kabeln und zusätzlich zu vielen
SPI-Devices am STK500-SPI-Bus (von denen meinetwegen auch nur der AVR
aktiv ist und der Rest per PullUp an CSn sauber deaktiviert wurde)
lässt sich dadurch aber nicht unbedingt lösen. Die STK500-Firmware, die
bei der 3-er Version vom AVR-Studio beilag war in der Hinsicht stabiler
(vermutlich weil langsamer).

jörn

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.