PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrfachnutzung der I/O's fraglich - inbes. ISP-Pins



Ulfens
07.11.2005, 19:01
Hallo Zusammen,

ich habe eine Frage in Zus. mit der doppelten (teilw. auch dreifachen) Nutzung der I/O's der Atmel AVR Controller.
Habe hier bereits stundenlang gesucht, aber keinen passenden Hinweis gefunden.

Das man i.d.R. die I/O's nur für einen Zweck nutzen kann - also entweder Eingang, Ausgang, A/D-Port / PWM, etc. ist mir soweit klar (legt man ja durch das Schaltungsdesign bzw. die Programmierung fest).
Wenn man jedoch die max. Anzahl der möglichen Ausgänge nutzen möchte, kommt man nicht um die Ports herum, die normalerweise für das ISP bestimmt sind.

Pin-Bel. MEGA8:.......Pin-Bel. Tiny26:

MOSI = Port PB3 ...... Port PB0
MISO = Port PB4 ...... Port PB1
SCK = Port PB5 ........ Port PB2
RESET = Port PC6 ..... Port PB7

Ich benötige für meine Anwendung 15 Digital-Ausgänge und wollte den Tiny26 verwenden. Als Takt würde ich auf den int. 1MHz. Oszillator zurückgreifen, sodass ich keinen ext. Quarz benötige (= 2 freie Ausgänge mehr)
Das man über die FUSE-Bits den Reset-Eingang deaktivieren kann, habe ich schon gelesen - auch die Folgen so einer Einstellung sind mir klar.
Den RESET-Eing. bräuchte ich für meinen Anwendungsfall aber gar nicht "missbrauchen", da ja noch ein I/O übrig ist - das wird der RESET (Pin 10 /PB7).
Wie das allerdings mit den ISP-Ports funktionieren soll, ist mir fraglich.
Wie soll ich den AVR programmieren, wenn die dafür erforderlichen Anschlüsse (MOSI, MISO, SCK) als Ausgänge konfiguriert sind?
Wie verträgt sich das mir meinem Programmieradapter (ich verwende den hier mit dem 74HC244 http://rumil.de/hardware/avrisp.html) Wenn der Prog-Dongle noch am AVR-Steckt, während das Programm startet zerschiesst es mir entweder den Controller oder den Dongel - oder beides!?

Wäre für jeden Tipp sehr dankbar!

Gruss,
ULF

SprinterSB
07.11.2005, 19:23
Wenn du RESET als Port verwendest, ist es mit ISP eh Essig, da kann dir MOSI und Konsorten doch egal sein.

Ansonsten schaltest du die ISP-Pins als OUT, das geht prima. Evtl mit Widerständen vom ISP-Progger abkoppeln. Musst eben man den Schaltplan zu deinem Progger anschauen.

Beim ISP-Proggen zieht der Progger den RESET auf 0, wodurch die ISP-Pins wieder Eingänge sind und geproggt werden kann.

Wenn RESET als Port verwendet wird, ist proggen ausschliesslich via paralleler HV-Programmierung möglich.

Ulfens
07.11.2005, 23:19
Hallo,

danke für den Tipp! Wie gesagt - den RESET-Eingang werde ich nicht als Ausgang verwenden, sondern seine ursprüngliche Funktion als RESET-Eingang beibehalten. Demnach kann der Tiny26 noch über das ISP programmiert werden.
Wenn ich dich richtig verstanden habe, braucht man lediglich in die 3 Signalleitungen (MOSI, MISO und SCK) des Programmieradapters Widerstände einzuschleifen !? Ich schätze mal dass 10k zum Schutz des AVR's und des 74HC244 im Prog.-Adapter ausreichen. Reicht das dann aber noch für eine "saubere" Programmierung? Ich habe keine Ahnung, was im Moment des Programmierens für Stöme in die Ein-/Ausgänge des AVR's fließen - nicht dass es mir die Pegel verfälscht. (keine sauberen H-/L-Pegel, weil die meiste Spannung über dem Widerstand abfällt). Hat sowas schonmal jemand gemacht und kann mir ggf. einen Tipp bzgl. Dimensionierung geben?

Vielen Dank!

Ulf

SprinterSB
08.11.2005, 15:39
Die ISP-Pins als OUT zu verwenden geht ohne Probleme, wenn das Wackeln beim Proggen nicht zu Problemen im Rest deiner Schaltung führt. Die Pins als IN zu verwenden ist nicht so einfach, weil der ISP-Adapter bzw das IN-Signal die Pegel verzieht.

Die ISP-Ports beim Proggen sind hochohmig, daher ist der Stromfluss minimal und beschränkt sich auf Input Leakage von ein paar µA und Aufladen der Port-Kapazität von 74*244 bzw AVR.

Ich verwende nen zusammengeschusterten Simpel-Adapter ohne 74*244, selbst da gibt es keine Probs. Allerdings ist da die Anbindung von MOSI und SCK konstruktionsbedingt hochohmig, sofern man 4.7Ohm als hochohmig bezeichnen mag. MISO geht normal direkt durch zum COM-Port, da hab ich 1kOhm zwischengehangen. 10kOhm sollte auch unkritisch sein.

Bei gestecktem Progger puste ich mit 600kByte/s Daten über SPI raus, ohne Zicken.

heinzi
19.11.2005, 11:59
hallo ulfens!
schau doch mal hier:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12282

der widerstand kommt nicht in die isp-leitung, sondern vor das teil was du anschliessen möchtest, um es nicht durch die programmiersignale des programmers zu beschädigen.
alternativ kannst du an mosi, miso und co aber auch dinge anschliessen die nicht kauptt gehen können (z.b. taster!!!). piezos, ics, motortreiber usw. würde ich aber mit dem zusätzlichen 10K davor absichern. achso: falls wirklich jemand taster an die isp pins anschließt, sollte er AUF KEINEN FALL die taster während der programmierung drücken!!! sonst werden die programmiersignale des programmers kurzgeschlossen!
du kannst natürlich auch statt der widerstände, 2polige jumper (steckbrücken wie im pc!) verwenden. ist aber jedesmal ne fummelarbeit die zu montieren.

atmel gibt noch infos dazu:
http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf
versteht man auch einigermaßen, ohne gut englisch zu können.

schau mal im doc2486 zum atmega8 von atmel (www.atmel.com) auf seite 220:
Fusebit#7: Select if PC6 is I/O pin or RESET pin
zu den fusebits: http://s-huehn.de/elektronik/avr-prog/avr-prog.htm ganz runter scrollen!

da kannst du auch einen externen quarz einstellen, wenn dir der interne nicht schnell genug ist. du kannst den µC aber auch kaputt machen (durch setzen der falschen fusebits). an deiner stelle würde ich von den fusebits erstmal die finger lassen und den resetpin als resetpin lassen (so wie du es bereits geschrieben hast)!

ich hoffe, das hat dir geholfen.

Marco78
19.11.2005, 12:26
du kannst natürlich auch statt der widerstände, 2polige jumper (steckbrücken wie im pc!) verwenden. ist aber jedesmal ne fummelarbeit die zu montieren.
Oder wie ich auch schonmal vorgeschlagen habe, eine 5 polige Diodenbuchse nehmen, wie sie früher oft verbreitet war mit einem 5 poligen Umschalter.
Beim Einstecken des Steckers vom Programmiergerät schaltet der Umschalter die restliche Schaltung von den ISP-Pins einfach frei. So können die für alles was man will verwendet werden.
Da könnte sogar an Ausgang eines Pins ein Relais sein, der einen 5kW-Motor einschaltet an dessen Welle Messer angebracht werden. Im "Normalfall" könnte das tote geben. Mit der Buchse nicht, wenn sie richtig beschaltet wird.

Ulfens
02.12.2005, 15:36
Hallo Zusammen,

nochmal vielen Dank für die Antworten! Hat mir wirklich sehr geholfen.
Ich verwende jetzt in jeder meiner Schaltungen einfach 10k Widerstände in den Leitungen MISO, MOSI, SCK. Da kann ich - bei aufgestecktem Programmieradapter - diese Pins ruhig auch als Ausgang definiert und auf "H" gesetzt haben. Das macht Alles Nix ;-) Die Widerstände stören aufgrund der super-kleinen Ströme auch nicht beim "brennen" bzw. "programmieren". Es darf natürlich keine Last parallel an den Ausgängen hängen, die mir die Pegel wegzieht (z.B. eine LED) - aber sonst haut es prima hin.
Nochmal vielen Dank!

Gruss,
Ulfens

recycle
19.09.2007, 00:42
alternativ kannst du an mosi, miso und co aber auch dinge anschliessen die nicht kauptt gehen können (z.b. taster!!!). piezos, ics, motortreiber usw. würde ich aber mit dem zusätzlichen 10K davor absichern. achso: falls wirklich jemand taster an die isp


Ich habe an meinem ATMega8 am MOSI-Pin (PB3) einen Taster angeschlossen, kann den aber gar nicht auslesen.
Kann es sein, dass man den Pin nur als Ausgang aber nicht als Eingang verwenden kann?
(Für den ISP brauche ich den PIN gar nicht, da ich seriell über Bootloader programmiere).

Cairol
20.09.2007, 23:19
Wie genau hast du den Taster denn angeschlossen?
Mit Pullup- /Pulldown-Widerstand oder anders?

recycle
21.09.2007, 01:23
Wie genau hast du den Taster denn angeschlossen?
Mit Pullup- /Pulldown-Widerstand oder anders?

Bei der Schaltung habe ich das erste mal auf externe Pullups verzichtet und wollte die internen Pullups nutzen.

Der Taster hängt mit einer Seite direkt am MOSI-Pin und mit der anderen an GND. Icih programmiere mit Bascom und habe den internen Pullup eingeschaltet.