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.
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
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
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).
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
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
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
Ups, da wird mit einem Pegel-Wandler gearbeitet. Kannst Du auch über seriell den AVR ansteuern? Gruß Andi
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
Wo ist denn der unterschied zwischen Laptop und nicht Laptop bezüglich der Schnittstellen ?! Stefan
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. :)
@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.
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
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
@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.
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?
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
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
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
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.
@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.
@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
@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
@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!
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 :(
@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.
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
@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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.