PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI / ISP Probleme?



CowZ
18.04.2006, 15:43
Hi,

ich plane mehrere Megas (u.A.) über SPI zu verbinden. Die ISP Schnittstelle greift nun ja auch genau auf diese zu. Wie kann ich nun sicherstellen, dass nur ein Controller programmiert wird und die anderen sich nicht davon stören lassen?

Gruß, CowZ

ogni42
18.04.2006, 16:00
1. Nur die RESET-Leitung des zu programmierenden Controllers auf LOW ziehen
2. Dafür sorgen, dass bei den anderen Controllern nicht gegen deren Ausgänge getrieben wird.

CowZ
18.04.2006, 16:10
1. versteh ich :) (ohmann... das hatte ich ganz vergessen, dass ich reset ja auch noch hab...)

2.) Was soll das bedeuten?

ogni42
19.04.2006, 08:39
Wenn Du Nur einen Mega mit ISP Programmierst und ein anderer (weil nicht im Reset und ggfs. aber mit Spannung versorgt) als SPI Master arbeitet, treibt er seinen MOSI Ausgang und der ISP Programmer (weil der sich für den Master hält) ebenfalls. Damit treiben die beiden Ausgänge gegeneinander, was u.U. zu einem defekten MOSI Pin am AVR oder am ISP Programmer sorgen kann.

Kaiser-F
19.04.2006, 10:07
Ich hab schonmal den selben Fall gehabt. Die Lösung ist einfach...

Du verbindest die Controller ganz normal miteinander. Für jeden Controller hast zwei Programmierstecker. Jedoch verbindest du RESET sepperat. Ausserdem verbindest du die RESET-Leitung von Controller A mit einem Beliebigen Eingang von Controller B, und anders rum.

Wenn nun Controller A programmiert werden soll, wird ja RESET auf LOW gezogen. Der Controller B erfasst das an dem Eingang und schaltet (so lange RESET_A auf LOW ist) in eine Schleife, wo er den SPI geaktiviert, und alle PINS die damit zu tun haben als EINGANG scfhaltet. Damit ist sichergestellt dass nix schief geht...

CowZ
19.04.2006, 13:44
Dieses Problem tritt aber nur bei der MOSI Leitung auf? Oder auch bei anderen (SCK?)? Sonst könnte ich bei einfach einen Jumper auf die MOSI Leitung packen, der zwischen programmieren und SPI wechselt. (Also den zu programmierenden Controller von MOSI abtrennt)

edit: was auch ne Idee wäre, ist einen Programmierstecker für alle Controller zuhaben. Den zu programmierenden Controller jumped man dann einfach Reset=low. Wobei man dann natürlich immernoch für die MOSI Leitung sorgen müsste.

Kaiser-F
19.04.2006, 14:31
Ich würd mich sicherheitshalber um die SCK Leitung auch kümmern.

Du kannst natürlich auch einen SPI-Stecker für beide benutzen, machst halt dann nen Jumper, der die Resetleitung des Programmers mit dem entsprechenden resetleitung des Controllers verbindet.

Ich würd den jumoer nicht direkt benutzen um den Controller auf low zu setzen. Alleine schon desswegen, weil man ja meistens gleich nach dem proggen gleich schaun will ob es geht, und da dauernd rumjumpern...

Bin mir auch nicht ganz sicher, aber um den AVR zu programmieren, ob es da genügt einfach RESET zu betätigen? da muss glaub ich etwas zeitlich zusammenpassen. Ich kann dir das aber jetzt nicht bestätigen....

EDIT:
http://www.sir-kaiser.de/upload/zwei-controller.jpg

Rage_Empire
19.04.2006, 15:35
wäre es nicht einfacher mit einem bootloader?

CowZ
19.04.2006, 15:38
Wie soll das mit dem Bootloaderfunktionieren?

Mit dem Resetjumper... Mhh... doof... ich hab keinen Platz für die Resetleitungen (ich mach das mit Buchsenleisten)...

Kann aber auch gerne für jeden Controller einen ISP-Stecker haben, wär glaub ich sogar besser

Kaiser-F
19.04.2006, 16:36
Mal ne Frage, was hast du für ISP-Stecker? wenn du bevorzugst zwei von denen enzubauen, anstatt einen 3-Pol-Jumper, müssen die ziemlich klein sein?

Ich verwende 6-Pol Micromatch zB von Reichelt.

CowZ
19.04.2006, 16:39
Ich habe ganznormale Wannenstecker. Aber ich baue eine modulare Platine auf. Soll heißen, ich weiß nichtmal, ob auf allen Modulen AVRs sind etc.

Daher möchte ich einen ISP-Stecker pro Modul haben. Allerdings sind die Module untereinander (auch) mit SPI verbunden.

Gruß, CowZ

Kaiser-F
19.04.2006, 16:58
achso....

Und wennst das modul einfach rausziehst wennst es Programmierst?

CowZ
19.04.2006, 17:12
Das wäre eine Möglichkeit.

finde ich persönlich aber nicht so gut, weil ich dann immer im Roboter rumschrauben muss (die Module werden teilweise auch festgeschraubt) und ich weiß nicht, wieviele Steckzyklen die Buchsenleisten aushalten. Es wäre schon schöner, würde es eine andere Möglichkeit geben...

Kaiser-F
19.04.2006, 17:23
hast du platz für nen Multiplexer?
der 4053 ist ein 3 kanal multiplexer. Würde für MOSI,MISO,SCK reichen...

ACHTUNG, BILD WURDE AKTUALISIERT!!!

http://www.sir-kaiser.de/upload/zwei-controller2.jpg

CowZ
19.04.2006, 17:34
Das sieht doch mal gut aus :)

Da besteht dann aber kein Problem, wenn auf MISO und MOSI und SCK Daten fließen?

Sry, ich weiß nicht, wie ein Multiplexer arbeitet...

Kaiser-F
19.04.2006, 17:43
Multiplexer arbeitet wie ein Relais... Nur auf Halbleiterebene.
Zu Beachten ist aber beim übertragen von zB viodeosignalen oder so,
dass die teile nen innenwiderstand haben. Aber für normale Analoge
spannungen, und Digitalen Signalen, überhapt kein problem!

Die dinge gibds auch in SMD, und sind sau günstig! In welche Richtung der Strom Fließt ist egal!

Es gibt noch den 4051, ein 8facher, also 1 auf 8. Auch gut zur Porterweiterung. Übrigens, ein solcher ist im AVR im ADC-Wandler
eingebaut ( MUX ).

der 4052 hat zwei kanäle mit 1 nach 4...

CowZ
19.04.2006, 17:47
Ich kann doch aber genauso gut die ISP-Signale durchschleifen, wofür brauch ich da einen multiplexer?

Problem bleibt doch dann die Störung von außen, oder?

edit: bzw. wo ist der unterschied zwischen nem multiplexer und ner "T-Kreuzung"?

Kaiser-F
19.04.2006, 17:53
Problem ist, wenn du gerade den Controller in MODUL1 beschreibst,
können in der selben zeit die anderen versuchen was zu senden, oder
machen irdend nen schmarrn, da sie signale am SPI empfangen.
Daher sollten diese Leitungen getrennt werden.

A, B und C schalten jeweils die kanäle X Y und Z

Ist A LOW, so ist X mit X0 verbunden, X1 hängt in der Luft. Ist A HIGH,
dann ist X mit X1 verbunden, und X0 hängt in der luft. Wie bei einem
Relay! So ist es mit B und C, bzw. mit kanal Y und Z auch...


http://de.wikipedia.org/wiki/Multiplexer

CowZ
19.04.2006, 17:55
Aaaah :)

Die Linie zu RESET hab ich glatt übersehen :)

Das ist natürlich trickreich und praktisch :) Vielen Dank :)

*merk* :)

Gruß, CowZ

Kaiser-F
19.04.2006, 17:58
Kein Problem :-)

Vergewissere dich nochmal ob X auch wirklich mir A=0 nach X0 verbunden ist,
und nicht mit A=1... Aber normal stimmts schon was ich
dir verzapft hab... :-&

CowZ
19.04.2006, 18:00
:) kk ich guck mir das Datenblatt mal an :)

edit: im Reicheltdatenblatt finde ich nur ax, ay... Im Eagle isses a0, a1

ist a0 = ax oder a0 = ay?

Gruß, CowZ

Kaiser-F
20.04.2006, 12:14
http://www.sir-kaiser.de/upload/zwei-controller3.JPG

Bei mit sieht das so aus...

4053 in 40xx

CowZ
20.04.2006, 13:57
Richtig, bei mir auch.

Mhh... Dann versteh ich das Datenblatt nicht, kannst du da nochmal reingucken?

Gruß, CowZ

Kaiser-F
20.04.2006, 14:05
Klar, hau mal her den Link vom datenblatt das du hast...

CowZ
20.04.2006, 14:15
http://www.reichelt.de/inhalt.html?SID=14Qg8ojNS4AQ4AAADGKdA67611bb0497e7 463883bd43b371eeea0;ACTION=7;LASTACTION=6;SORT=art ikel.artnr;GRUPPE=A2211;WG=0;SUCHE=4053;ARTIKEL=MO S%25204053;START=0;END=16;STATIC=0;FC=669;PROVID=0 ;TITEL=0;DATASHEETSEARCH=MOS%204053;FOLDER=A240;FI LE=MOS4051_MOS4052_MOS4053_SMD4051_SMD4052_SMD4053 %2523STM.pdf;DOWNLOADTYP=1;DATASHEETAUTO=;OPEN=1

Scheiss Link von Reichelt... Hoffe das klappt so

Kaiser-F
20.04.2006, 14:49
Ich glaub jetzt haben wir www.reichelt.de gekillt. Seitdem ich deinen Link angeklickt habe, geht nix mehr mit reichelt..... :-)

Ich hab das Datenblatt mal gespeichert..

MOS4051_MOS4052_MOS4053_SMD4051_SMD4052_SMD4053_ST M.pdf

ax = X0
bx = Y0
cx = Z0

ay = X1
by = Y1
cy = Z1

ax or ay = X
bx or by = Y
cx or cy = Z

A = A
B = B
C = C

INH. muss 0 sein (GND)

WENN A=0 : ax or ay ---> ax
WENN A=1 : ax or ay ---> ay

WENN B=0 : bx or by ---> bx
WENN B=1 : bx or by ---> by

WENN C=0 : cx or cy ---> cx
WENN C=1 : cx or cy ---> cy

CowZ
20.04.2006, 14:53
also müssen die ISP Leitungen an die 0er Anschlüsse, richtig?

Gruß, CowZ

Kaiser-F
20.04.2006, 14:59
Jup, stimmt...

Wenn du programmierst, ist RESET, und somit auch A,B und C LOW.

das bedeutet:

X ---> X0
Y ---> Y0
Z ---> Z0

CowZ
20.04.2006, 15:02
jo, ok :) wunderbar

danke für die tolle Hilfe :) jetzt geht's ans routen :)

Gruß, CowZ

Kaiser-F
20.04.2006, 15:05
Kein Problem,

Ich hab den vorherigen Schaltplan ausgebessert...