Forum: Mikrocontroller und Digitale Elektronik IO-Mangel bei Tiny13


von Thomas B. (escamoteur)


Lesenswert?

Hi,

der Tiny13 ist ja nicht wirklich großartig mit IO-Pins gesegnet. Was 
kann man also machen um das zu verbessern?

1. Kann ich die Pins des ISPs nach dem booten einfach als normale IOs 
verwenden?

2. Ist es sinnvoll Pins wechselweise als In und Out zu schalten, wenn 
diese nicht gleichzeitig benötigt werden? Was ist dabei zu beachten?

Gruß

Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas Burkhart wrote:
> Hi,
>
> der Tiny13 ist ja nicht wirklich großartig mit IO-Pins gesegnet. Was
> kann man also machen um das zu verbessern?
>
> 1. Kann ich die Pins des ISPs nach dem booten einfach als normale IOs
> verwenden?

Sicher kannst du.

>
> 2. Ist es sinnvoll Pins wechselweise als In und Out zu schalten, wenn
> diese nicht gleichzeitig benötigt werden? Was ist dabei zu beachten?

An so einem Pin hängt ja normalerweise auch irgendwelche Hardware.
Die muss natürlich mitspielen.

von crazy horse (Gast)


Lesenswert?

und ansonsten gibts ja grössere AVRs :-)

von Thomas B. (escamoteur)


Lesenswert?

Wenn ich also einen Pin für zwei Funktionen verwenden will, so muss ich 
wohl auf jeden Fall mittels Dioden dafür sorgen, dass sich die 
Funktionen icht in die Quere kommen, richtig?

Gruß

Thomas

von Karl H. (kbuchegg)


Lesenswert?

Thomas Burkhart wrote:
> Wenn ich also einen Pin für zwei Funktionen verwenden will, so muss ich
> wohl auf jeden Fall mittels Dioden dafür sorgen, dass sich die
> Funktionen icht in die Quere kommen, richtig?

Wenn Dioden reichen, ja.
Aber ich bezweifle mal, dass es mit ein paar Dioden getan ist.

Eine Schaltung die von einem Ausgangs-Portpin angesteuert wird,
reagiert nunmal darauf, dass der Pin entweder 0 oder 1 ist.
Der Pin kann entweder 0 oder 1 sein, weil der Pin (als
Ausgang geschaltet) auf 0 oder 1 geht, oder eben, weil
irgendeine Eingangsschaltung den Pin auf 0 oder 1 zieht.
Das kann die externe Schaltung aber so nicht unterscheiden.

Beispiel:

Du hast an einem Pin gleichzeitig eine LED und einen Taster
angehängt.
             +--------- Vcc
             |

             R

             |
            ---
            \ /
            ---
             |
   o---------+
             |
             |
               /
              /
             |
             +------- GND

Wenn du den Pin auf Ausgang schaltest, dann kannst du mit
0 oder 1 die LED ein/ausschalten. Du solltest dabei aber
tunlichst den Taster nicht betätigen, weil du sonst bei
einer 1 am Ausgang den Ausgang kurzschliest (nicht
gut, auch wenn der Tiny dabei nicht gleich kaputt geht).

Andererseits kannst du den Pin auch auf Eingang schalten
und so den Taster wie gewohnt abfragen. Nur: Wenn du
den Taster betätigst, dann wird auch die LED angehen. Da
kannst du gar nichts dagegen machen. Wenn der Taster nun
irgendeine harmlose Eingabe macht, und die LED einen Fehler-
zustand anzeigen soll, dann wird dein Benutzer wahrscheinlich
nicht so glücklich sein, wenn ihm die Maschine bei jedem
Tasterdruck einen vermeintlichen Fehler signalisiert.

Jetzt denk mal weiter und ersetze die LED durch zb. einen
Motor.

Daher: Wenn I/O Pins nicht reichen, ist ein etwas größerer
Prozessor wahrscheinlich oft die bessere Wahl, da weniger
Probleme zu bewältigen sind und man auch keine externe
Zusatzbeschaltung braucht.
Wenns tatsächlich nicht anders geht, oder man exzessiv viele
Pins mehr benötigen würde, kann man auch mal über einen Portexpander
a'la Schieberegister oder eine Matrixschaltung nachdenken.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

@ Thomas Burkhart

Deine Frage ist ziemlich pauschal. Es wäre einfacher, wenn du 
beschreibst was du machen willst.

Eine Lösung bei 2 LED an einem Pin ist z.B. hier (und den Referenzen 
dort) beschrieben
http://www.edn.com/article/CA6526819.html?spacedesc=designideas&industryid=44217

Andere Lösungen zum Einsparen von I/O-Pins können sein:

* Charlieplexing (bei LED-Matrizen gerne verwendet)
* Porterweiterung mit einem Schieberegister (s. AVR-Tutorial)
* Porterweiterung mit einem Bus (I2C oder SPI)

Das softwaregesteuerte Umschalten von einem Pin für Ausgabe und Eingabe 
habe ich selbst schon mal 
gemacht(http://www.mikrocontroller.net/articles/GPS-Platine_mit_Tyco-Modul#Verwenden_der_RXD0_Leitung_als_IO_Leitung)

von Thomas B. (escamoteur)


Lesenswert?

Wenn ich zum einen ein Schieberegister zum Ascnhluss von 7Segment 
anzeigen verwenden will, zum anderen aber ein Paar Taster überwachen 
möchte, so könnte ich doch einen MUX dazwischenhängen. Die Anzeige muss 
ich ja nur im Minutentakt ändern und die hält ja Ihre Ergebnisse auch 
wenn sie kein Signal vom µC hat oder.

Die Taster werden ja auch nicht nur ein paar ms gedrückt, so dass man 
doch problemlos von Zeit zu Zeit diese Pollen könnte.

Was meint Ihr?

Was gibt es denn an kleinen MUX, 2x4 oder 2x8 würden mir schon reichen, 
sollte aber ne kleinere Baugröße als DIL16 sein, da wenig Platz.

Gruß

Thomas

von Karl H. (kbuchegg)


Lesenswert?

Wenn du mit einem MUX die Eingabe von der Ausgabe trennen
willst, frage ich mich, warum du nicht gleich einen Mega8
benutzt. Der MUX verbraucht ja schliesslich auch Platinenplatz.

von Thomas B. (escamoteur)


Lesenswert?

hmmm, hast auch wieder recht....

Aber sag mal, wenn da nur ein Schieberegister dranhängt, müsste ich die 
Ausgänge doch wahlweise auch auf Eingang schalten können und pollen 
oder?

Gruß

Thomas

von ??? (Gast)


Lesenswert?

Wie schon gesagt wäre es sinnvoll mal die Anwendung anzugeben.
Für Tastatureingaben läßt sich z.B. wunderbar ein Pin für "beliebig" 
viele Taster verwenden indem man den als ADC nimmt und mit 
Spannungsteilern verschiedene Werte pro Taster erzeugt.
Hat allerdings den Nachteil das nur ein Taster gleichzeitig gedrückt 
sein darf.
Entprellung via Software.
Sonst sind ja schon gute Beispiele gebracht worden ;-)

von Thomas B. (escamoteur)


Lesenswert?

Naja,

an den Schiebregistern hängen 7-Segmentanzeigen und ich brauch zwei 
Taster die ich zum einstellen der Zeit plus einen Taster um einen Event 
auslösen zu können. Zusätzlich muss noch ein Piezio Beeper angeschlossen 
werden.

Aber das mit den Schieberegistern müsste doch klappen. Wenn die keine 
Clock bekommen sollte denen doch egal wenn man die Eingänge mit Diode + 
Pull Down Widerständen versieht. oder?

Gruß

Thomas

von Andreas K. (a-k)


Lesenswert?

Einen 8pin Zwerg mit Schieberegister zu erweitern weil die Pins nicht 
ausreichen, das klingt für mich etwas bizarr.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Burkhart wrote:

> an den Schiebregistern hängen 7-Segmentanzeigen und ich brauch zwei
> Taster die ich zum einstellen der Zeit plus einen Taster um einen Event
> auslösen zu können. Zusätzlich muss noch ein Piezio Beeper angeschlossen
> werden.
>
> Aber das mit den Schieberegistern müsste doch klappen. Wenn die keine
> Clock bekommen sollte denen doch egal wenn man die Eingänge mit Diode +
> Pull Down Widerständen versieht. oder?

Ja. Sollte gehen.
Das einzige was nicht sauber ist: Wenn jemand den Taster
betätigt, während der Pin auf Ausgang ist, hast du einen
Kurzschluss gebaut. Ist im Grunde die gleiche Situation
die ich oben geschildert habe. Sollte sich aber mit einem
Widerstand am Taster korrigieren lassen (aber unbedingt
vorher am Steckbrett ausprobieren!)

von Thomas B. (escamoteur)


Lesenswert?

@ Andreas Kaiser: Ich brauche insgesamt 4 Schieberegister kaskadiert, 
d.h. einen Winzling zu nehmen wenn der gesamte Platz beschränkt ist 
macht schon wieder Sinn.

Das mit dem Kurzschluss verstehe ich und auch ein Schalter gegen VCC 
macht keinen Sinn, da dann ja falsche Daten übertragen würden.

Aber den Ausgang den ich an den Piezo geht, kann ich auf jeden Fall als 
Eingang nehmen, der wird garantiert nicht gemeinsam mit der Ausgabe 
gedrückt.

Vielen Dank, hab dann doch genug Pins

Thomas

von AVRFan (Gast)


Lesenswert?

>d.h. einen Winzling zu nehmen wenn der gesamte Platz beschränkt ist
>macht schon wieder Sinn.

Die nächste Größe nach dem 8-pinnigen ATtiny13 ist 14 Pin, z. B. 
ATtiny25. Als zusätzlicher Platzbedarf auf der Platine ergibt sich bei 
DIP-Gehäusen genau 9 Rasterquadrate (1 Quadrat = 1/10 inch x 1/10 inch). 
Aber wieviel Platz braucht die notwendige Extrabeschaltung eines Pins, 
um eine Doppelfunktion zu realisieren?  Auf 9 Rasterquadraten kannst Du 
ca. drei Bauteile (Widerstände, Dioden) unterbringen.  Entscheide 
selbst, ob ein ATtiny25 die bessere Lösung ist oder nicht.

von Thomas B. (escamoteur)


Lesenswert?

Außer den Schieberegistern brauche ich jetzt keine weitere Externe 
Beschaltung und von denen brauch ich eh 4. Oder gibt es noch größere als 
die 74HC595D mit 8 Ausgängen und die Kaskadiert?

Wenn ich der Übersicht halber von den 4 Schieberegistern jeweils einen 
pro 7-Segmentanzeige nehmen will, habe ich ja immer einen PIN übrig. 
Kann ich dann einfach den zur weiterleitung an den nächsten 
Schieberegister nehmen? So dass halt das oberste Bit immer eine Stelle 
früher kaskadiert?

Gruß

Thomas

von AVRFan (Gast)


Lesenswert?

>Wenn ich der Übersicht halber von den 4 Schieberegistern jeweils einen
>pro 7-Segmentanzeige nehmen will, habe ich ja immer einen PIN übrig.

Ja, solange Du die Dezimalpunkte der Ziffern nicht beschaltest.

>Kann ich dann einfach den zur weiterleitung an den nächsten
>Schieberegister nehmen? So dass halt das oberste Bit immer eine Stelle
>früher kaskadiert?

Nein.  Sieh Dir das Logic Diagramm im Data Sheet an.  "Serial Out" = QH' 
(Pin 9) geht direkt vom letzten Schiebe-Flipflop ab, aber QH (Pin 7) ist 
damit nicht gleichwertig, denn da hängt noch das h-te Speicher-Flipflop 
dazwischen.  Für Deinen Zweck bräuchtest Du QG', aber das ist nicht 
zugänglich, nur QG vom g-ten Speicher-Flipflop.

von Thomas B. (escamoteur)


Lesenswert?

Ach so, Q7 würde erst übergeben wenn ich den Registerinhalt ausgebe,

danke ist klar.

Gruß

Thomas

von Michael U. (amiga)


Lesenswert?

Hallo,

was mich prinzipiell stören würde: ich will per Taster die Zeit 
einstellen.
Ich drücke den Taster und... nichts passiert, weil die Aktualisierung 
der Anzeige erst erfolgen kann, wenn ich den Taster wieder losgelassen 
habe.

Sowas führt zu Fehleingaben und nervt den Benutzer.
Ergonomie auf diesem Gebiet ist zwar meiner Meinugn nach ins 
Hintertreffen geraten, mich würde es trotzdem stören.

PS: es gab mal Untersuchungen, daß die Zeit zwischen einer Handlung und 
dem Begin der Reaktion (Lichtschalter betätigen -> Licht geht an z.B.) 
nicht länger als 0.5s sein soll, weil man sonst denkt, man hat nicht 
richtig gedrückt usw. usw.

Ich behaupte, wir haben es nur Windows zu verdanken, daß wir heute mit 
Engelsgeduld auf eine erkennbare! Reaktion warten, weil da gern diverse 
Sekunden vergehen, bis wenigstens vielleicht der Busypointer erscheint. 
:-(

Gruß aus Berlin
Michael

von Thomas B. (escamoteur)


Lesenswert?

Hallo Michael,

habe inzwischen eine bessere Lösung gefunden, ich nutze keinen Ausgang 
mehr als Eingang, sondern habe den dritten Taster als Zustand definiert, 
dass die beiden anderen Taster Zeitgleich gedrückt werden müssen, dafür 
gibt es aber einen eigenen Taster. Es ist nicht vorgesehen, dass die 
beiden Taster die Stunde und Minute einstellen zugleich gedrückt werden 
wie der Auslößer für den Event den ich brauche.

Gruß

Thomas

von AVRFan (Gast)


Lesenswert?

Du könntest auch alle drei Taster zusammen mit vier Widerständen an 
einen ADC-Pin hängen (ein Widerstand zwischen Pin und GND, von den 
anderen drei Widerständen je einer in Reihe zu einem Taster, Taster an 
VCC) und den durch einen Tastendruck erzeugten analogen Spannungswert am 
Pin auswerten.

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.