Pins mehrfach belegen

Gast #1464763
Lesenswert?

Hallo,

ich hab ein Problem.. Ich muss an einem ATtiny13 Pins mehrfach belegen.
Die Schaltung hab ich hier:
1
                             R1 10k                                 
2
                      +----[____]-----+                             
3
                      |               |           +-----+           
4
        +-------++    |               |           |     |           
5
   LDR [ ]       |    |  +-------+    |           |  +--+--+        
6
       [_]       |    +--|1     8|----+           |  |     |        
7
        +----+   +-------|2     7|----|---[____]--+  \/   /\ Duo-LED
8
R2 10k [_]   +-----------|3     6|----|-+            |     |        
9
        +-------------+--|4     5|    | +---------+  +--+--+        
10
                      |  +-------+    |           |     |           
11
                      |               |           +-----+           
12
                      |               |                             
13
                      |        |      |                             
14
                      +------| |------+                             
15
                           -   | +

Jetzt möchte ich noch an Pin 7 Rx und an Pin 8 Tx unterbringen.
Ich denk mal, dass die LED da stören wird. Ich könnte den LDR-Teil an 
den Pins 2, 3, 4 auch auf die Pins 4, 6, 7 legen und die LED an 2 und 3.
Der LDR zwischen Rx und Tx würde doch sicher stören, oder?

Ist es möglich, dass ich die Bauteile so tauschen kann, dass ich Rx und 
Tx an den Pins 7 und 8 nutzen kann?

Vielen dank und viele Grüße
Gast #1464811
Lesenswert?

Tx Rx? ich sehe keinen uart beim attiny13.
ansonsten schauts so aus als ob du pin 5 noch frei hast.

scheint so als ob du den uart in software bauen willst, dann kannst du 
pin 5 als Rx nehmen. Rx braucht einen pin einzeln, weil du den zustand 
an diesem pin nicht steuern kannst. das pfuscht dir also ständig 
zwischen wenn du mit dem pin was steuern willst.

pin 6/7 kannst du so wie einen einzelnen pin benutzen, die led leuchtet 
nur wenn einer der beiden pins high ist, der andere low. wenn beide low 
oder beide high sind leuchtet die LED nicht. ich würds mit einem 
UND-gatter an pin 6 und 7 probieren, dann kann das zwischen den beiden 
aus-zuständen unterscheiden und wenn du schnell zwischen beide pins high 
und beide pins low schaltest bekommst du am ausgang des gatters ein 
signal was du für Tx verwenden kannst. du mußt nur darauf achten, daß 
beim LED-betrieb niemals beide high sind, sprich du mußt die LED immer 
mit einem pin sicher low steuern. und während des LED-betriebes ist 
natürlich kein Tx möglich und anders herum genauso kein LED-leuchten bei 
Tx.
Gast #1465147
Lesenswert?

Danke für die Antwort.

An ein UND-Gatter hab ich noch garnicht gedacht..
Die LED wird softwareseitig eh nur low/low, high/low und low/high 
geschalten, also kann ich high/high super für tx verwenden..

Wichtig ist nur, dass ich während Rx die LED steuern kann, aber dem 
steht ja in dem Fall nichts im Wege ;)
Gast #1465212
Lesenswert?

Ok, ich hab grad nach UND-Gattern bei Reichelt geschaut und dabei den 
MOS 4081 entdeckt.. Würde ja prima passen..

Jedoch sind haben dort alle Gatter-Bausteine 14 Pins.. Da ist der 
Platzvorteil durch den Attiny13 natürlich wieder dahin.. Gibts da nich 
kleinere?
Gast #1465296
Lesenswert?

> 2 Dioden ?
> Und einen Widerstand.

aber dann hab ich ja keine vollen 5V mehr..

> in dem man dem Port als TriState nutzt.
ok ich hab grad nachgelesen, was es mit tri-state aufsich hat..
das wär natürlich auch genial, aber wie setz ich sowas softwareseitig 
um?
Gast #1465311
Lesenswert?

> > in dem man dem Port als TriState nutzt.
> ok ich hab grad nachgelesen, was es mit tri-state aufsich hat..
> das wär natürlich auch genial, aber wie setz ich sowas softwareseitig
> um?
als output kannst du ja 0 oder 1 setzen, wenn du ihn als Input (ohne 
Pullup) machst hast du Undefiniert
#1465313
Lesenswert?

> wie setz ich sowas softwareseitig um?

Na mit dem Datenrichtungsregister schaltest du die LED ein und aus und 
mit dem Ausgangsregister bestimmst du die Farbe. Also angenommen die LED 
hängt an A0:

DDRA |= 0x01; // LED einschalten (A0 = Ausgang)
DDRA &= ~0x01; // LED ausschalten (A0 = Eingang)

PORTA |= 0x01; // LED rot
PORTA &= ~0x01; // LED grün

Muss dann natürlich eine LED mit 3 Beinchen sein.

Update: Ich glaube zum Ausschalten muss man zusätzlich noch das Bit in 
PORTA auf 0 setzen (also in dem Fall die LED auf grün schalten), da 
ansonsten der Pullup aktiv ist und die LED dann noch schwach leuchten 
könnte.
#1465471
Lesenswert?

> das was ich grad gezeichnet hab is ned wirklich ratsam xD

Heh, hast recht, so hatte ich mir das vorhin zwar auch vorgestellt, 
jedoch ohne das Ganze zu Ende zu denken...

Hier wurde das schonmal diskutiert und da wird auch ne Lösung 
vorgestellt, wie es doch geht (mit dem Nachteil, dass ständig ein Strom 
fließt): Beitrag "Re: Duo Led mit einem Pin"

Update: Ich glaub die Schaltung dort wird auch nix. Zwar würde sie 
prinzipiell funktionieren, aber bei 2V/20mA-LEDs müsstest du zwei 100 
Ohm-Widerstände verwenden, da wäre mir der Verlust zu groß.
#1465482
Lesenswert?

> bei 2V/20mA-LEDs müsstest du zwei 100 Ohm-Widerstände verwenden

...bevor sich einer beschwert, dass man durch eine 20mA-LED nicht 
zwangsweise 20mA fließen lassen muss ;) - mir würde dieser Ansatz 
prinzipiell nicht gefallen.

Dann schon lieber mit zwei Transistoren... Hättest du dafür Platz?
Gast #1465608
Lesenswert?

>Da ist der Platzvorteil durch den Attiny13 natürlich wieder dahin.

Das ist er immer. Der nächstgrößere Controller ATtiny24/44/84 hat 6 Pins 
mehr als der ATtiny13. Es wird schwierig sein, eine pinsparende 
Peripherieschaltung zu ersinnen, die weniger Platz benötigt als diese 6 
zusätzlichen Pins. Der Platz wäre z. B. schon mit nur einem einzigen 
externen UND-Gatter ausgeschöpft, denn das hat ja auch schon mindestens 
6 Pins (VCC, GND, 2 Inputpins, 1 Outputpin plus ein unbenutzter Pin um 
auf gerade Pinzahl zu kommen) und dazu kommen noch die Leiterbahnen. Bei 
irgendwelchem Veranstaltungen mit mehreren Transistoren/Dioden wäre die 
Platzbilanz eher noch negativer. Die beste Lösung für dieses Problem 
besteht praktisch immer darin, schlicht den nächstgrößeren Controller zu 
nehmen - dafür sind sie ja da.
Gast #1466172
Lesenswert?

> Muss der LDR am Pin 2 hängen, oder kannst du den auch auf Vcc legen?
Pin 2 wird nur für die Messung HIGH geschalten, damit ned die ganze Zeit 
Strom über den LDR und den Widerstand verbraten wird..

> Nimm Pin 1 und 5, die sind doch noch frei.
Pin 1 ist doch der Reset-Pin?
Gast #1466247
Lesenswert?

>Pin 1 ist doch der Reset-Pin?

Man kann bei allen neueren AVRs über die Fuse RSTDISBL die 
Reset-Funktionalität des Reset-Pins deaktivieren und ihn dann als 
zusätzlichen I/O-Pin nutzen (mit gewissen Einschränkungen). Der 
Nachteil: Der µC ist dann nicht mehr per ISP, sondern nur noch per 
HV-Programming programmierbar (es sei denn, Du gönnst dem µC einen 
Bootloader. Das ist die elegante Lösung). Hardware-resetten kann man 
über den Pin dann natürlich auch nicht mehr.

Also VORSICHT, wenn Dein Programmer nur ISP kann, dass Du Dich mit der 
Fuse nicht aus Deinem Controller aussperrst.

Lies mal ein wenig im Datenblatt, da steht ne Menge interessanter Sachen 
drin :-)
Gast #1466324
Lesenswert?

> Der µC ist dann nicht mehr per ISP, sondern nur noch per
> HV-Programming programmierbar
>
> Also VORSICHT, wenn Dein Programmer nur ISP kann, dass Du Dich mit der
> Fuse nicht aus Deinem Controller aussperrst.

hm.. ok, dann fällt das weg..

Wie sähe denn die oben angesprochene Transistorlösung zur Ansteuerung 
der Duo-LED mit nur einem Pin aus?
Gast #1466539
Lesenswert?

>und dürfte vor allem bei Rx wesentlich zuverlässiger funktionieren.

Sogar Tx wird dann zuverlässiger funktionieren :-), nämlich dann, wenn 
er den größeren Controller mit einem Quarz taktet und dadurch die engen 
Timingtoleranzen erfüllt, die RS232 erfordert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren