Forum: Mikrocontroller und Digitale Elektronik Zweitfunktion Resetpin ATtiny15


von Stefan Kneller (Gast)


Lesenswert?

Tag zusammen,

heute hat es mich erwischt, grrr.
Auf dem Tiny15 habe ich ein Programm zur Lichtsteuerung im Flugmodell
geschrieben. Alle Pins werden dafür benötigt, auch die
Alternativfunktion des Resetpins (PortB5). Weil ich per ISP
programmiere steht der Pin B5 während der Programmentwicklung nicht zum
Testen zur Verfügung. Zur Überprüfung der Funktion musste ich das Signal
temporär auf einen anderen Portpin routen. Soweit so gut. Als dann heute
die Software zur Zufriedenheit lief habe ich B5 mit Setzen der Fuse
RSTDSBLE freigegeben. Wie erstaunt war ich, als dort jedoch kein Signal
zu messen ist. Nichts als 0.
Die Recherche hier im Forum ergab lediglich den Hinweis, dass das Bit
PortB5 read-only ist, aber mir ist jetzt überhaupt nicht klar, wie ich
denn dann den Port ansprechen kann. Auch im Datenblatt kann ich nichts
dazu finden, ausser der Information, dass der Ausgang ein open-Drain
Treiber besitzt.

Muss ich die Daten für B5 nach PinB5 (einen PullUp hat der Port B5 ja
nicht) schreiben oder was ?

Ich weiß nicht weiter. Danke für eure Mühe.
Stefan Kneller

von Jörg B. (joerg_b)


Lesenswert?

versuch mal eine 1 nach PORTB PIN5 zu schreiben. Desweiteren ist ein
externer Pullup nötig wenn ich das Datenblatt richtig verstehe.

von Winfried (Gast)


Lesenswert?

Würde nochmal im Datenblatt schauen. Wenn Read-Only, dann ist er nur als
Eingang nutzbar. Wenn Open-Drain, dann auch als Ausgang, ähnlich wie
OpenKollektor ähnlich wie ein Transistor, wo Drain/Kollektor = Portpin
ist. Du brauchst dann auf jeden Fall einen externen Pullup. Oder du
treibst damit gegen Masse eine LED, dann kannst du die direkt
anschließen, natürlich Widerstand in Reihe.

von Stefan Kneller (Gast)


Lesenswert?

Deinen Vorschlag verstehe ich nicht. Es gibt keine I/O-Adresse PORTB
oder PIN5.
Es gibt PORTBn, PINBn ( für n=0 bis 5) und DDRB

Bisher spreche ich die Ports z.B. wie folgt an:

ldi temp,0b00100000
out portB,temp

oder

ldi temp,(1<<n)
out portB,temp

oder

sbi portB,n

Das klappt natürlich auch bei allen PortsPins, nur nicht bei PORTB5,
dem verflixten ehemaligen ResetPin.
Pullup-Widerstand habe ich versucht, ohne Erfolg.
Da ich keinen Parallelprogrammer besitze, kann ich mir auch keine
langwierigen Experimente erlauben, das wird zu teuer :-(
Hoffe auf weitere Tips.

Stefan Kneller

von crazy horse (Gast)


Lesenswert?

ich hab mir gerade das Datenblatt angeschaut, das ist in der Tat
verwirrend/widersprüchlich.
sinngemäss steht da: entweder Reset oder input oder open-drain-output.
DDRB.5 gibts (Umschaltung Eingang oder Ausgang, wie üblich), PortB.5
allerdings existiert nicht, bräuchte man ja, um den als Ausgang
konfigurierten Pin nach Masse zu schalten bzw. zu sperren. Weder bei
der   Portbeschreibung noch bei register summary existiert allerdings
dieses PORTB.5, AVR-Studio kennt PORTB.5 auch nicht.
Beim Tiny12-Datenblatt ist es dasselbe...

von Εrnst B. (ernst)


Lesenswert?

Ist der Open-Drain Output vielleicht nur für den debugWire(tm) Link gut,
und garnicht einzeln Programmierbar?

/Ernst

von crazy horse (Gast)


Lesenswert?

"When the RSTDIBL Fuse is unprogrammed, this pin serves as External
Reset."
Soweit so gut.
"When the RSTDIBL Fuse is programmed, this pin is a general input pin
or a open out-put pin. If DDB5 is cleared (zero), PB5 is configured as
an input pin. If DDB5 is set (one), the pin is a open-drain output."

Die einzige (wenn auch unlogische) Funktion, die ich mir vorstellen
kann:
DDRB.5=1 -> Ausgang, aktiv nach Masse geschaltet
DDRB.5=0 -> Eingang=deaktivierter Ausgang, der Zustand kann über PINB.5
gelesen werden, falls es als Eingang verwendet werden soll.

Die Änderung im Programm wäre dann:
Statt
DDRB.5=1 //init as output
PORTB.5=0 //output low
PORTB.5=1 //output open

müsste man dann schreiben
DDRB.5=1 //output low
DDRB.5=0 //output open

Gemacht habe ich noch nie was mit dem letzten Notpin :-)

von Stefan Kneller (Gast)


Lesenswert?

Ich hab auch nochmal nachgedacht:

Mal angenommen der Pin ist extern mit einem PullUp-Widerstand
(Größenordnung ca. 1K bis 10K, je nach weiterfolgender Schaltung)
beschaltet.
Nun konfiguriere ich den Pin per DDRB5 als Eingang.
Als Eingang ist der Pin hochohmig und wird wegen des PullUp H-Potential
annehmen.
Als Ausgang konfiguriert wird der open-Drain-Treiber immer
durchgeschaltet sein (das ist meine Vermutung, die ich experimentell
bestätigten konnte, die sich aber aus dem Datenblatt nicht ableiten
lässt) und mir am Pin immer low-Potential ausgeben.
Letztendlich gelangen meine Nutzdaten auf diese Weise invertiert über
das DDRB5 an den Ausgang.
Kann diese Vermutungen jemand betätigen.
Ich werde das mal ausprobieren und einen Tiny15 opfern.

In meinen Augen sehr verwirrend und eine echte Notlösung.

von peter dannegger (Gast)


Lesenswert?

Man kann sich das so vorstellen, als wenn PORTB.5 konstant auf 0 gesetzt
ist.
Um nun eine 0 auszugeben, muß man DDRB.5 auf 1 setzen.


Peter

von Winfried (Gast)


Lesenswert?

Ah ja, interessant und gut zu wissen, wenn sowas nicht im Datenblatt
steht.

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.