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
versuch mal eine 1 nach PORTB PIN5 zu schreiben. Desweiteren ist ein externer Pullup nötig wenn ich das Datenblatt richtig verstehe.
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.
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
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...
Ist der Open-Drain Output vielleicht nur für den debugWire(tm) Link gut, und garnicht einzeln Programmierbar? /Ernst
"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 :-)
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.