Forum: Mikrocontroller und Digitale Elektronik Signalrichtung MISO/MOSI?


von Christian B. (Gast)


Lesenswert?

Ich möchte mich vergewissern das vom Parallelport aus MOSI immer als
Output arbeitet und MISO immer als Input. Mein Problem ist nämlich
folgendes:
Ich habe einen ATmega16PL und betreibe ihn mit 3,3V. Der Parallelport
arbeitet allerdings mit TTL-Pegeln, also 5V. Jetzt habe ich vor in der
Richtung vom Parallelport zum µC mit einem Spannungsteiler die Spannung
von 5V auf 3,3V runterzuteilen. Damit ich aber in der anderen Richtung
lesen kann darf ich die Spannung natürlich nicht runterteilen sondern
muss sie Hochziehen. Wenn die Signalrichtung bei MISO und MOSI immer
die gleiche ist (also beim Schreiben/Lesen), dann ist es ja kein
Problem.

MOSI -> Output -> Spannungsteiler auf 3,3V
MISO -> Input  -> Spannung hochziehen auf 5V
SCK  -> Output -> Spannungsteiler auf 3,3V
RESET-> Output -> Spannungsteiler auf 3,3V

Am allereinfachsten wäre es mit einem Laptop zu programmieren, da der
am Parallelport ja eh CMOS-Pegel hat wenn ich mich recht entsinne. Aber
in meinem Fall kann ich auf keinen Laptop ausweichen.

Ich hoffe jemand versteht mein Problem und kann mir weiterhelfen.

von Andi (Gast)


Lesenswert?

Hast Du die oben besagten Anschlüsse noch anderweitig beschaltet?
Wenn nicht, sollte das dann nicht egal sein?
Ansonsten Z-Diode, 3,3V oder etwas weniger von z. B. MISO zwischen 2
Widerständen 1KOhm, also 1K -> Z-Diode zu GND -> 1K.
Dann ist die Richtung egal und Du brauchst Dir nicht den Kopf für die
Widerstände eines Teilers zerbrechen.

Gruß
Andi

von Robert (Gast)


Lesenswert?

MISO: Master in - Slave Out
MOSI: Master out - Slave in

solange nur ein Master am Bus hängt, bleibt die Datenrichtung quasi
immer gleich und der Treiber am MOSI und SCK kann immer aktiv sein. Die
Slaves müssen immer die Treiber deaktivieren wenn sie nicht angesprochen
werden. Bei nur einem Slave ist das natürlich egal.

Robert

von Christian B. (Gast)


Angehängte Dateien:

Lesenswert?

Die Pins sind nur zum Programmieren da und in keiner anderen Weise
genutzt. Ich habe einen Screenshot aus einer schnell zusammen
geklickten Eagleschaltung angehangen, damit keine Missverständnisse
auftreten.

@Andi: Meinst du das so wie ichs im Anhang gezeichnet habe?

@Robert: Das heißt ich könnte das wie im oberen Bild schalten? Das wäre
die mir am naheliegenste Variante, da ich hier weniger verdraten muss.
Von der Paralleportseite aus kommt MOSI,SCK,RESET mit 5V und wird auf
3V geteilt. Von der Controllerseite kommt MISO mit 3V und wird direkt
durchgeleitet ohne Veränderungen am Signal (2,7V sind bei TTL soweit
ich weiß noch als HIGH erkannt und somit reichen mit die 3V vom µC).

von Andi (Gast)


Lesenswert?

So ähnlich meinte ich das!
Das mit 2 Widerständen in Reihe und eine Z-Diode dazwischen zu GND ist
nur für MOSI und SCK.
MISO kannst Du direkt oder zur Sicherheit als Strombegrenzer mit 1K in
Reihe versehen.
An die SCK-Leitung noch 1nF (AVR-Seite) zu GND um den Takt zu glätten.
RESET dann lieber mit einem Transistor (BC547) versehen.
Vom Par.-Port aus über 10K an die Basis, vor der Basis 12K zu GND.
Kollektor an RESET (AVR-Seite) und Emitter zu GND.
So ist es bei meinem seriellen ISP aufgebaut wo 12V anliegen.
Mit was Programmierst Du eigentlich?

Gruß
Andi

von Christian B. (Gast)


Lesenswert?

Danke, ich werd mal die Bestände sichten und dann danach entscheiden ob
ichs mit Z-Dioden mache oder doch nur als Spannungsteiler. :) So wie
ich das dann verstehe gehen beide Varianten.

Ich programmiere mit dem AVR-GCC mit dem Editor Programmers-Notepad.
Die hübschen *.hex files laden dann danke PonyProg auf meinem µC.
Und selbst? :)

Christian

von Andi (Gast)


Lesenswert?

Ebenso Pony-Prog.
Aber wie gesagt, das mit den Z-Dioden ist bei mir mit seriell.
Könnte auch mit parallel von 5 auf 3,3V gehen.
Schau Dir am besten bei www.lancos.com den Schaltplan für parallel an
und vergleiche, ob es ungefähr gleich ist wie für seriell.

Gruß
Andi

von Andi (Gast)


Lesenswert?

Ups, da wird mit einem Pegel-Wandler gearbeitet.
Kannst Du auch über seriell den AVR ansteuern?

Gruß
Andi

von Christian B. (Gast)


Lesenswert?

Ich will eigentlich nicht Seriell programmieren, da ich keine Erfahrung
auf diesem Gebiet habe. Ich werde morgen mal schreiben obs mit dem
Parallel 5V->3,3V geklappt hat. Da die Sende und Empfangsrichtung beim
lesen und schreiben bei MISO/MOSI/RESET/SCK/GND immer die gleiche ist,
sollte das kein Problem sein. Aber mal schauen :-), falls das nicht
geht werde ich das mit den Z-Dioden ausprobieren. Und wenn das nicht
geht... hmmm dann komme ich langsam in Zeitdruck ;D und werde
vermutlich einen Laptop zum programmieren nehmen. :)
Morgen abend erzähl ich meine Erfahrung.

mfg Christian

von Stefan Seegel (Gast)


Lesenswert?

Wo ist denn der unterschied zwischen Laptop und nicht Laptop bezüglich
der Schnittstellen ?!

Stefan

von Christian B. (Gast)


Lesenswert?

Die prallele Schnitstelle am PC hat TTL Pegel, also 5V. Die parallele am
Laptop CMOS Pegel also 3,3V . Falls ich da falsch liege, bitte ich um
schnelle Korrektur. :)

von Christian Zietz (Gast)


Lesenswert?

@Christian B: Zumindest mit der Bezeichnung der Pegel liegst Du falsch.
Auch CMOS-Pegel sind 0 und 5 Volt. Hingegen ist bei echten TTL-Pegel
U_output_high nur 3,6V (auch wenn nominell 5V festgelegt sind).

Ob man wirklich verallgemeinern kann, dass Notebooks Low-Voltage-Pegel
(3,3V) haben, wage ich auch zu bezweifeln.

von Stefan Seegel (Gast)


Lesenswert?

Tach!

Nein, kann man nicht verallgemeinern! Da hilft nur messen. Grob kann
man sagen je moderner das Gerät desto geringer ist die
warscheinlichkeit dass man 5 Volt hat. ABER NUR GAAAANZ GROB!

Ausserdem ist das alles kein Problem: Eingangsseitig braucht der LPT
Port eigentlich nur auf Masse gezogen werden (hat intern Pullup
Widerstände), also ist hier schon mal 3,3 Volt kein Problem.
Ausgangsseitig haste ja eh 3.3V Zeugs dran, also auch kein Problem.
Schlecht isses nicht wenn man in Reihe einfach Schutzwiderstände macht
(so 1k), damit, falls dein lpt port 5 Volt an den ausgängen macht, der
Strom begrenzt wird der durch die in den AVR eingebauten schutzdioden
fließt.

Stefan

von Christian B. (Gast)


Lesenswert?

Dank euch habe ich zuerst die Spannung die am Parport anliegt gemessen
und festgestellt das nur 4,35V rauskommen. Nachdem ich dann die
Schaltung mit entsprechendem Spannungsteiler aufgebaut habe, mußte ich
leider feststellen das die Spannung von 4,35V auf 3,35V absinkt. Ich
habe zuerst nach einem Fehler in meiner Schaltung gesucht und erst sehr
spät mal probiert was Passiert wenn ich einfach einen 2,8kOhm
Wiederstand direkt in den Parport stecke zwischen GND und /RESET. Ich
mußte feststellen das auch hier die Spannung auf 3,35V zusammensackt.
Kann mir das aber nicht erklären, da ich doch nur 1,8mA entziehe. Und
an diesem Problem hänge ich jetzt. :(

mfg Christian

von Christian Zietz (Gast)


Lesenswert?

@Christian B: TTL-Pegel halt. Ich zitiere mal aus einem Datenblatt eines
LS-Bausteins: Dort sinkt die High-Spannung schon bei einer Stromentnahme
von 0.4mA schon auf 3.4V.

von Christian B. (Gast)


Angehängte Dateien:

Lesenswert?

hm, danke. Ich werde mich dann wohl nochmal schlau machen. Hab langsam
das gefühl ich versteh gar nix mehr.

Das würde für meinen Fall jetzt bedeuten, das ich meinen
Microcontroller der mit 3,3V läuft eigentlich ohne irgendwelche
Spannungsteiler mit dem ParPort programmieren kann, da die Spannung ja
eh auf 3V-3,4V zusammensackt, oder?

Und noch eine Frage:
Warum is in dem Angehangenen Bild kein Widerstand auf der
Reset-Leitung?

von Andi (Gast)


Lesenswert?

Finger weg von dieser Schaltung.
Damit hatte ich mir damals bei einem Rechner den Parallel-Port
zerschossen weil ich +5V für eine aufgesteckte Schaltung um einen Pin
versetzt angeschlossen hatte und dabei dann MISO erwischt.
Als AT-Prog den Pin am Parallelport für MISO auf low gesetzt hatte,
gingen die 5V bzw. die Ampere ungehindert durch den IO-Baustein im
Rechner und Ende.
Wenn Du das benutzt, mach Dir an ALLEN Leitungen, ausser GND, einen
1K-Widerstand hin. Kostet ja nix.

Gruß
Andi

von Stefan Seegel (Gast)


Lesenswert?

Genau, überall schön einen serienwiderstand rein und gut iss, dann kann
Dir nicht viel passieren, auch wenn du nach den widerständen (in
gewissen grenzen) mist machst ;-)

Das die Spannung absinkt ist logisch, wie ich schon gesagt habe sind im
parallelport pull-up widerstände, und die ausgänge werden mit open
kollektors auf Masse gezogen. Man kann also gegen 5 Volt wesentlich
mehr Strom rausziehen als gegen Ground...

Stefan

von Christian B. (Gast)


Lesenswert?

Wenn ich keinen Spannungsteiler benutze und einfach die Leitungen so
durchziehe funktioniert das Ganze. Hab nur angst auf dauer meinen
Controller kaputt zu machen, da dieser ja mit 3,3V läuft und ich von
meinem ParPort 4,3V bekomme. Und ich verstehe nicht warum ein einfacher
Spannungsteiler dazu führt das meine Schaltung nicht funktioniert. Sind
die Richtungen der Signale wirklich so wie ich mir das Denke?

Parport     Controller
SCK------------->
MOSI------------>
RESET----------->
<---------------MISO

von Christian B. (Gast)


Lesenswert?

Letzte Frage :)
Der /RESET hat einen Internen PullUp-Widerstand der zwischen 30-60kOhm
laut Datenblatt liegt. Wenn ich jetzt davor einen Spannungsteiler mit
900Ohm zu 2,7kOhm aufbaue, sodass 4,37V vom ParPort auf ca 3,3V geteilt
werden, dann wird meine Spannung am ParPort auf 3,4V runtergezogen. Das
liegt vermutlich dadran das der ParPort mit TTL-LS aufgebaut ist und
nur bis 0,4mA treibt. Wenn ich jetzt aber einen größeren Teiler einbaue
(38kOhm zu 110kOhm), dann wird zwar die Spannung am ParPort nicht mehr
runtergezogen aber dafür am eingang des Microcontrollers nicht mehr der
Reset erkannt. Dieser bewegt sich nämlich zwischen 1,2V und 3,3V. Das
mit den 1,2V liegt jetzt an der Internen Spannungsquelle und dem
PullUpwiderstand der sich nämlich auch in diesem Bereich 30-60kOhm
bewegt. Das heißt das eine schließt das andere aus. Es muss doch
möglichsein weniger als 0,4mA aus dem ParPort zu ziehen und
gleichzeitig nicht das Signal druch den Internen PullUp vom µC zu
versauen.

Ich werde bei gelegenheit noch ein kleines Bildchen zur Verdeutlichung
anhängen.

Ich hoffe mich versteht irgend jemand :)

mfg Christian.

von Christian Zietz (Gast)


Lesenswert?

@Christian B.: Mach, wie bereits empfohlen, Serien-Widerstände in Deine
Leitungen rein und es sollte gut sein. Die Schutzdioden an den
Eingängen des AVR begrenzen die Spannung schon, die Serien-Widerständen
dann auch den Strom.

von Christian B. (Gast)


Lesenswert?

@Christian Zietz: Die Eingangsschutzdioden sind so wie ich das aus dem
Datenblatt ersehe nur bei den IO-Ports (ATmega16L.pdf FULL, Seite 48:
IO-Ports sind hier mit Schutzdioden) aber nicht beim /RESET angebracht
(ATmega16L.pdf FULL, Seite 36: RESET-Pin ist hier nur mit PullUp aber
ohne Schutzdioden).

Christian

von Christian Zietz (Gast)


Lesenswert?

@Christian B.: Dafür hält der Reset-Pin aber auch bis zu 13V gegenüber
Masse aus, mit 5 Volt machst Du Dir (nach meiner Erfahrung) da nix
kaputt.

Christian

von Christian B. (Gast)


Lesenswert?

@Christian Zietz: Danke für deine schnelle Hilfe. :) Ich habe nochmal
ein wenig gesucht und die Info gefunden : Seite 291 im ATmega16L.pdf in
der Tabelle steht : "Voltage on /RESET with respect to Ground....-0.5V
to +13.0V.
Also genau das was du mir geschrieben hast.

Genial freu danke!

von Christian B. (Gast)


Lesenswert?

Ein kleiner Dämpfer... ich habe mal bei dem * an der Tabelle nachgelesen
und da steht "NOTICE: Stresses beyond those listed under Absolute
Maximum Ratings may cause permanent damage to the device".

:(
Das heißt es wird eine Zerstörung des ATmegas in den Raum gestellt.
Vermutlich wird das in 1000 Fällen nicht auftreten, ist aber dennoch
eine nicht so schöne Einschränkung. Vorallem da mein ATmega auf einem
Board fest aufgelötet ist und wenn der mal Kaputt geht is das keine
Schöne Arbeit :(

von Christian Zietz (Gast)


Lesenswert?

@Christian B.: Dein letztes Post verstehe ich nicht. "Stresses beyond
those listed" treten am Reset-Pin schon mal garantiert nicht auf, mehr
als 13 Volt wirst Du da ja nicht anlegen.

Und was die anderen Pins angeht: Die Schutzdioden und die Widerstände
begrenzen Spannung und Strom schon. Es gibt Leute, die (z.B. zur
Nulldurchgangserkennung der Netzspannung) 230V über einen
entsprechenden Widerstand an einen Portpin legen. Auch das
funktioniert.

Wenn Du soviel Angst um Deinen uC hast, würde ich eine Lösung mit einem
aktiven Pegelwandler den Spannungsteilern vorziehen. Bei mir
funktioniert das oben beschriebene jedenfalls ohne Probleme.

von Christian B. (Gast)


Lesenswert?

Ich werds mit Pegelwandlern aufbauen.

Im Datenblatt steht halt das RESET nicht höher als Vcc+0.5V sein darf.
Unter Absolut Maximum Ratings steht das er aber auch bis 13V verträgt.
Daraus habe ich geschlossen das bei einer Vcc von 3,3V auch 4,3V schon
nicht mehr zu dem Normalbetrieb gehören. Und wenn die nicht darunter
fallen, dann fallen sie unter Absolut Maximum Ratings. Und da steht das
das Device beschädigt werden kann.

Wenn ich das alles nur für mich zu hause machen würde wärs mir egal,
aber mit dem Teil wird dann nicht nur von mir Programmiert und ich
würde dann dafür geradestehen müssen.

Zu den 230V Netzspannung zur Nulldurchganserkennung: Schön was der Chip
alles abkann. :-) Aber wer wird denn gleich übertreiben G

mfg Christian

von Christian Zietz (Gast)


Lesenswert?

@Christian B.: Beim parallelem Programmieren werden schließlich auch 12V
an RESET gelegt. Da stirbt der uC ja auch nicht. Aber Pegelwandler
dürften die sauberste Lösung sein.

von Stefan Seegel (Gast)


Lesenswert?

Nimm einfach die Serienschutzwiderstände, das ist in jeder zweiten
Schaltung so gemacht und haut hin. Überleg mal: Wenn du 12 Volt auf
irgendeinen IO-Pin über einen Schutzwiderstand legst sind da ja dann
keine 12 Volt mehr sondern eben das was über den internen Schutzdioden
abfällt, also ca. Vcc ! Mit anderen Worten: An deinen IO Pins IST nicht
mehr Spannung als Vcc, drum haut das ja auch mit den 230 Volt hin!

von Christian B. (Gast)


Lesenswert?

Ich habe es mit Pegelwandlern aufgebaut und bin nun zufrieden. Die
Spannungen liegen alle so an wie ich mir das Vorstelle. :) Nun kann ich
das auch jemand anderem guten Gewissens in die Hand geben, ohne das der
dann kommt und sagt ich würde eine zu hohe Spannung anlegen. :D

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.