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


von T. Baumbach (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

bevor ich anfange zu löten brauche ich eure Hilfe.
Ich möchte eine Schaltung mit einem Atmega32 (SMD) und einem Display 
löten.
Da ich den Atmega danach nicht mehr aus der Schaltung bekomme um ihn 
alleine zu programmieren möchte ich ISP benutzen und den dann per ISP 
des STK-600 dierekt auf der Platine programmieren.
Das Display hat ein CS der high-Aktiv ist es liefert keinerlei Daten 
(über MISO) zurück sondern kann nur empfangen.
Die Schaltung möchte ich wie in der angehängten Zeichnung aufbauen.
Meine Frage an euch, kann/wird das so funktionieren?
Habe dazu 3 Fragen:

1.
Da der Atmega über SPI auch gleichzeitig (über MISO) Daten liest, ich 
aber keine vom Display bekomme, würde ich gerne den Pin 7 (PB6 / MISO) 
über den (grünen) 10k Pulldown-Widerstand auf low legen, damit nur 
Nullen eingelesen werden.
Kann ich so trotzdem noch über ISP den Atmega programmieren?
(da ja der Programmer (der dann der Master ist und der Atmega der Slave) 
die Daten über denselben MISO-Pin in den Atmega schreibt)

2.
Habe irgendwo gelesen, dass man in die Leitungen zum ISP Widerstände 
vorsehen soll. Habe die mal blau eingezeichnet.
Brauche ich die? Wenn ja - wofür?

3.
Habe über das Datenrichtungsregister DDRB den SS Pin auf high/Ausgang 
gesetzt um somit den Atmega als Master einzustellen.
Der Programmer müsste ja, damit der Atmega nun der Slave ist diesen 
SS-Pin auf low legen. Macht der Programmer das so?
Funktioniert das dann trotzdem, dass ich den SS Pin auf high gelegt 
habe?
Oder spielt das keine Rolle weil beim Programmieren der RESET-Pin des 
Atmega ja auf low gezogen wird und somit mein 'auf high legen' garnicht 
ausgeführt wird?



Vielen Dank schonmal für eure Hilfe!

von easylife (Gast)


Lesenswert?

T. Baumbach schrieb:
> Hallo,
>
> bevor ich anfange zu löten brauche ich eure Hilfe.
> Ich möchte eine Schaltung mit einem Atmega32 (SMD) und einem Display
> löten.
> Da ich den Atmega danach nicht mehr aus der Schaltung bekomme um ihn
> alleine zu programmieren möchte ich ISP benutzen und den dann per ISP
> des STK-600 dierekt auf der Platine programmieren.
> Das Display hat ein CS der high-Aktiv ist es liefert keinerlei Daten
> (über MISO) zurück sondern kann nur empfangen.
> Die Schaltung möchte ich wie in der angehängten Zeichnung aufbauen.
> Meine Frage an euch, kann/wird das so funktionieren?
> Habe dazu 3 Fragen:
>
> 1.
> Da der Atmega über SPI auch gleichzeitig (über MISO) Daten liest, ich
> aber keine vom Display bekomme, würde ich gerne den Pin 7 (PB6 / MISO)
> über den (grünen) 10k Pulldown-Widerstand auf low legen, damit nur
> Nullen eingelesen werden.
> Kann ich so trotzdem noch über ISP den Atmega programmieren?

ja. der programmer ist "stärker"

> (da ja der Programmer (der dann der Master ist und der Atmega der Slave)
> die Daten über denselben MISO-Pin in den Atmega schreibt)
>
> 2.
> Habe irgendwo gelesen, dass man in die Leitungen zum ISP Widerstände
> vorsehen soll. Habe die mal blau eingezeichnet.
> Brauche ich die? Wenn ja - wofür?
>

kann man weglassen. schützt vor ESD uund kurzschlüssen. allerdings ist 
1k zu viel. besser 33..100ohm.

> 3.
> Habe über das Datenrichtungsregister DDRB den SS Pin auf high/Ausgang
> gesetzt um somit den Atmega als Master einzustellen.
> Der Programmer müsste ja, damit der Atmega nun der Slave ist diesen
> SS-Pin auf low legen. Macht der Programmer das so? Funktioniert das dann
> trotzdem, dass ich den SS Pin auf high gelegt habe?
> Oder spielt das keine Rolle weil beim Programmieren der RESET-Pin des
> Atmega ja auf low gezogen wird und somit mein 'auf high legen' garnicht
> ausgeführt wird?

genau. im reset sind die pins 'tri-stated'
>
> Vielen Dank schonmal für eure Hilfe!

von Thomas E. (thomase)


Lesenswert?

T. Baumbach schrieb:
> über den (grünen) 10k Pulldown-Widerstand auf low legen, damit nur
> Nullen eingelesen werden.

Warum? Schalt den internen Pullup ein und gut ist. Das, was da 
eingelesen, wird vom Programm nicht beachtet und dem Controller ist das 
egal.

mfg.

von Christian J. (Gast)


Lesenswert?

Es gibt auch sowas wie Jumper, damit man eben diese Sorgen nicht haben 
muss.
Wenn der Programmer eben doch nicht so ganz stark ist verbrät er dir 
auch die Fuses und das war es dann mit dem Chip, wenn du keinen HV 
Programmer hast.

von mäuschen (Gast)


Lesenswert?

Christian J. schrieb:
> Es gibt auch sowas wie Jumper, damit man eben diese Sorgen nicht
> haben
> muss.
> Wenn der Programmer eben doch nicht so ganz stark ist verbrät er dir
> auch die Fuses und das war es dann mit dem Chip, wenn du keinen HV
> Programmer hast.

"Mäuseklavier" gibt's kleiner und als einmal alles Schalter.
GND nicht vergessen ...

von spess53 (Gast)


Lesenswert?


von Falk B. (falk)


Lesenswert?

T. Baumbach (Gast)

>    Atmega32_SPI_ISP.png

Nicht so günstig. Lass die 3x 1k weg.

>Da der Atmega über SPI auch gleichzeitig (über MISO) Daten liest, ich
>aber keine vom Display bekomme, würde ich gerne den Pin 7 (PB6 / MISO)
>über den (grünen) 10k Pulldown-Widerstand auf low legen, damit nur
>Nullen eingelesen werden.

Kann man machen, ist aber unkritisch.

>Kann ich so trotzdem noch über ISP den Atmega programmieren?

Sicher.

>Habe irgendwo gelesen, dass man in die Leitungen zum ISP Widerstände
>vorsehen soll. Habe die mal blau eingezeichnet.
>Brauche ich die? Wenn ja - wofür?

Nein. Lass sie weg.

>Habe über das Datenrichtungsregister DDRB den SS Pin auf high/Ausgang
>gesetzt um somit den Atmega als Master einzustellen.

Nein, als Master stellt man das SPI über ein anders Bit ein. ABER 
dennoch muss SS als Ausgang geschaltet werrden. Also alles OK.

>Der Programmer müsste ja, damit der Atmega nun der Slave ist diesen
>SS-Pin auf low legen.

Nein. Bei ISP hat der SS Pin keine Funktion.

>Funktioniert das dann trotzdem, dass ich den SS Pin auf high gelegt
>habe?

Ja.

>Oder spielt das keine Rolle weil beim Programmieren der RESET-Pin des
>Atmega ja auf low gezogen wird und somit mein 'auf high legen' garnicht
>ausgeführt wird?

Ja.

von Stefan F. (Gast)


Lesenswert?

> Wenn der Programmer eben doch nicht so ganz stark ist verbrät
> er dir auch die Fuses

Er meint damit, dass der Programmer die Fuses möglicherweise falsch 
setzt. Die 1k Widerstände erhöhen die Wahrscheinlichkeit dieses Fehlers. 
Also alss sie weg.

von Philipp K. (philipp_k59)


Angehängte Dateien:

Lesenswert?

Die 1K sind nach Atmel datasheet falsch eingezeichnet ..

Quasi kommt direkt an den Atmega der ISP Slot und der 1K und alles was 
nicht programmiert hinter die 1K. (Du hast es falschrum im Bild)

Schon besprochen hier: Beitrag "ISP Programmieren, trotz Geräte am spi bus"

Denke das das sonst mit den 1K okay ist.. Hätte auch das gleiche wie 
spess53 angemerkt.

Edit: Bild angehängt

: Bearbeitet durch User
von T. Baumbach (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

danke für alle die mir hier schon geholfen haben.
Habe eine neue Zeichnung angehängt.

1.
Habe den Pulldown-Widerstand an PB6 weggelassen, und wie Thomas Eckmann 
gesagt hat den Pin (per Software) in den High-Z / Tristate Modus zu 
setzen.

2.
Bin mir über den Wert der blauen Widerstände nicht sicher, easylife hat 
gesagt 1k wäre zu groß, 33-100Ohm wären besser - was ist nun richtig?

3.
Die letzte Antwort von Philipp K. hat mich einwenig verwirrt, wo jetzt 
die Widerstände zu setzen sind. Habe in der Zeichnung zwei Optionen 
gemacht, ich denke so wie in der linken Zeichnung (A) müsste es korrekt 
sein - oder?

Danke nochnmal...

von Philipp K. (philipp_k59)


Lesenswert?

1. Links isses richtig
2. In Deiner ersten Schaltung hatten Deine Widerstände für das 
eigentliche Spi-ISP Problem keinen nutzen,man hätte diese dort an der 
Stelle mit 100Ohm als Kurzschlussschutz(oder was auch immer) einsetzen 
können.
3. Normalerweise sind für die Trennung 1k bis auf wenige Ausnahmen 
okay.. und auch diese probleme hättest Du in der Suche finden können. 
(Wie die anderen auch)

von spess53 (Gast)


Lesenswert?

Hi

>Habe eine neue Zeichnung angehängt.

Du solltest alle Posts lesen. Die richtige Lösung hatte ich dir schon 
gestern gepostet:

Beitrag "Re: SPI und ISP in derselben Schaltung"

MfG Spess

von T. Baumbach (Gast)


Angehängte Dateien:

Lesenswert?

@Philipp, danke, aber dann sind doch die Widerstände in der Zeichnung 
von Atmel korrekt. Direkt an den Pins des Atmega wird abgegriffen für 
ISP. Dann kommen die Widerstände und dahinter liegt dann der SPI-Bus.
Also was deiner Meinung nach ist in der Atmel-Zeichnung falsch?

Habe mir auch mal Gedanken über die Stromzufuhr gemacht.
(siehe angehängtes Bild).

Das Display braucht ja Strom und weitere Verbraucher (z.B. Rest der 
Schaltung, ein Motor oder was auch immer) auch.
Wenn ich nun den Atmega flashen also programmieren möchte, habe ich die 
eigentliche Stromversorung der Schaltung ja abgeschaltet. Dann stecke 
ich den 6 poligen Stecker des STK-600 (oder anderen Programmers) and den 
ISP-Anschluss.
Wenn ich die rot eingezeichnete Diode NICHT hätte, dann würden ja die 
Verbraucher sofort Strom ziehen und zwar aus dem Programmer, was bei 
zuviel Strom evtl. den Programmer beschädigen könnte.

Meine Frage nun , macht man das dann so mit der Diode, wie ich sie (rot) 
eingezeichnet habe oder muss ich da mit einem Jumper o.ä. arbeiten, 
damit der Programmer nicht die Vebraucher mit Strom versorgt?

Danke nochmals...

von Stefan F. (Gast)


Lesenswert?

Normalerweise dient die VCC Leitung am ISP Stecker dazu, dass der 
Programmer sich auf diese Spannung einstellen kann. Die Schaltung 
braucht nach wie vor ihr eigenes Netzteil.

Die Idee, den Programmer zur Stromversorgung zu missbrauchen ist nicht 
im Sinne der Erfindung und sollte daher auch in jedem Fall mindestens 
durch Jumper oder Schalter abschaltbar sein.

von Philipp K. (philipp_k59)


Lesenswert?

T. Baumbach schrieb:
> Also was deiner Meinung nach ist in der Atmel-Zeichnung falsch?

Nein Nur Dein kompletter Schaltplan im Eröffnungspost war falsch.. das 
Atmel was falsch gemacht hat habe ich nie geschrieben ;)

Spess53 hat als erstes den richtigen Tip gegeben.

Und das mit dem Netzteil ist Anwendungsabhängig wenn Du zum Beispiel 
400ma hast und der Programmer USB-VCC direkt durchbrückt kannste das 
nebenbei noch zum testen laufen lassen.. (mach ich so)

: Bearbeitet durch User
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.