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
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.
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
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.
@ 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)
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
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.
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
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 ;-)
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
Einen 8pin Zwerg mit Schieberegister zu erweitern weil die Pins nicht ausreichen, das klingt für mich etwas bizarr.
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!)
@ 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
>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.
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
>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.
Ach so, Q7 würde erst übergeben wenn ich den Registerinhalt ausgebe, danke ist klar. Gruß Thomas
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.