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.
#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ß.
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 #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?

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