• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Attiny13 input/output pins

#ammensleben

Geocacher
moin moin,
hab mich schon durch das forum geschlagen habe aber leider keinen Hinweis darauf gefunden.
Haben bestimmte Pins (ausser die 4 und 8) bestimmte Aufgaben im tiny und können deswegen nicht als Input/output definiert werden? hatte zunächst als output den pinb.5 und input den pinb.4 da hatte die LED durchgehend schwach geleuchtet auch ohne das anlegen von masse an pinb.4.
Hab dann mal das ganze mit pinb.3 als output und pinb.4 als input getestet. Hier klappte es das die LED leuchtet wenn Masse an pinb.4 liegt. Nun wollte ich es so haben, dass auf verschiedenen pins (moeglichst alle restlichen 5) masse angelegt werden kann und dann die LED leuchtet. Habe es im folgenden Code mal mit pinb.1, pinb.4 und pinb.5 probiert. Nun leuchtet die LED durchgehend hell :/
Hab ich in der IF-Anweisung irgendwas falsch gemacht oder sind wie oben angedeutet bestimmte Pins fuer bestimmte Aufgaben "reserviert"?
Der pinb.5 scheint der "uebeltaeter" zu sein der nich so will wie ich.

Der nachfolgende Code laesst die LED durchgehend an.
Code:
$regfile = "ATtiny13.DAT"
$crystal = 16000
Config Pinb.4 = Input
Config Pinb.1 = Input
Config Pinb.5 = Input
Config Pinb.3 = Output
Portb.4 = 1                                                 ' interner Pullup aktiviert
Portb.1 = 1                                                 ' interner Pullup aktiviert
Portb.5 = 1                                                 ' interner Pullup aktiviert

Do

If Pinb.4 = 0 Then ' Taste gedrueckt (nach GND schaltend)
Portb.3 = 1                                                 ' LED leuchtet
Elseif Pinb.1 = 0 Then                                      ' Taste gedrueckt (nach GND schaltend)
Portb.3 = 1                                                 ' LED leuchtet
Elseif Pinb.5 = 0 Then                                      ' Taste gedrueckt (nach GND schaltend)
Portb.3 = 1
Else
Portb.3 = 0
End If

Loop

End
 

DunkleAura

Geowizard
hier *klick* ist das datenblatt.

Code:
PB5   o 1   8 o   VCC
PB3   o 2   7 o   PB2
PB4   o 3   6 o   PB1
GND   o 4   5 o   PB0
PB5 ist z.B. reset, das heisst der ist reserviert ausnahme du stellst die fuses um (davon rate ich dir ab)
GND und VCC sind, rate mal...
rest kannst du eigentlich nach gutdünken verwenden
ps: rest steht auf seite 2

falls danach noch fragen offen sind, kannst nochmals fragen.

grüssle DunkleAura
 
OP
A

#ammensleben

Geocacher
Um den Pinb.5 mit in die Schaltung aufnehmen zu koennen muss also Fusebit High 3 auf 0 External Reset Disable wenn ich das richtig seh.
Auf welche Funktionen bzw Sicherheiten wuerde ich denn verzichten wenn ich eben diesen Fusebit umstell?
 

kirby27b

Geocacher
Hi,

sofern ich das bisher richtig verstanden habe brauchst Du den Resetpin um eine Programierung zu initialisieren ( WOW ein Wort mit 5 i ). Was also bedeuten würde wenn man das passende Fusebit umstellt ist eine weitere Programierung nicht mehr ohne weiteres möglich.

Aber das ist jetzt ohne Anspruch auf Richtigkeit :D

Grüße Olaf
 

Windi

Geoguru
In meinem "jugendlichen Leichtsinn" habe ich auch mal in meiner "Anfangsphase" den Reset-Pin disabled. Dnach ging nix mehr.
Das sollte man nur machen wenn das Programm fix und fertig ist und danach nicht mehr geändert werden muss.
Also erst das fehlerfreie Programm einspielen und dann das entsprechende Fusebit programmieren. Danach hat man mit einem einfachen ISP-Programmer keine Chance mehr den Chip nochmals zu programmieren.
Man muß ihn deshalb aber nicht wegwerfen. Mit einem sog. High-Voltage-Programmer kann man den Chip weiterhin programmieren. So ein HV-Programmer kostet aber deutlich mehr.
Wenn man unbedingt so viele Pins braucht würde ich mir einfach einen größeren Atmel besorgen.
 

DunkleAura

Geowizard
richtig kirby27b

und zu windi muss ich ja nichts sagen, der ist ja so wieso ein elektronik profi :pirate_wink:
 

stonewood

Geowizard
#ammensleben schrieb:
Um den Pinb.5 mit in die Schaltung aufnehmen zu koennen muss also Fusebit High 3 auf 0 External Reset Disable wenn ich das richtig seh.
Auf welche Funktionen bzw Sicherheiten wuerde ich denn verzichten wenn ich eben diesen Fusebit umstell?
Dann kann nur noch ein 'High voltage' programmer den Tiny beschreiben. Wie windi schon sagte, da geht dann gar nix mehr mit einem normalen Programmer. Außerdem muß die Schaltung dann mit +12V auf dem Pin umgehen können falls der in der Schaltung programmiert wird. Damit bekommt dann der Tiny das Programmiersignal.

Übrigens wundere ich mich ein wenig über das hier:
Code:
Config Pinb.4 = Input
Config Pinb.1 = Input
Sollte das nicht eigentlich
Code:
Config Portb.4 = Input
Config Port.1 = Input
heißen?

Oh, gerade gefunden, PORTx meint die ganzen 8 Bit, PINx.y meint ein Bit ...
 

DunkleAura

Geowizard
stonewood schrieb:
Übrigens wundere ich mich ein wenig über das hier:
Code:
Config Pinb.4 = Input
Config Pinb.1 = Input
Sollte das nicht eigentlich
Code:
Config Portb.4 = Input
Config Port.1 = Input
heißen?

Oh, gerade gefunden, PORTx meint die ganzen 8 Bit, PINx.y meint ein Bit...
nahe dran, so in etwa (jetzt nicht getestet)
Code:
Config PortB.1 = Input     ' PB1 als input
Config PortB.4 = Input     ' PB4 als input
PortB.1 = 1     ' PB1 pullup aktivieren
PortB.4 = 1     ' PB4 pullup aktivieren

if PinB.1 = 1 then...
soweit ich das verstanden habe ist:
PortX da um den port zu setzen oder eben ein einzelnes bit
PinX um den status eines ports oder eben eines bits abzufragen...

z.B.
Code:
PortB = &B00011111     ' setzt 5 bits also die bits 0-4 auf 1
PortB.1 = 0     ' setzt nur PB1 auf 0
und bei obigem beispiel würde (dummycode achtung beide zeilen einzeln nicht im selben ablauf):
Code:
print PinB     ' 00011111 ausgeben und
print PinB.1     ' 0 ausgeben

ich hoffe ich habe alles korrekt wiedergegeben und falls ja, dass es hilft.

grüssle aus der
smileyschweiz57fcf.gif
 
OP
A

#ammensleben

Geocacher
moin allerseits,
irgerndwie steh ich grad aufn schlauch. Ist es möglich mit dem Attiny13 Masse zu schalten. Also nen Pin für ne bestimmte Zeit Masse schalten lassen und dann "nichts"?
 

DunkleAura

Geowizard
#ammensleben schrieb:
moin allerseits,
irgerndwie steh ich grad aufn schlauch. Ist es möglich mit dem Attiny13 Masse zu schalten. Also nen Pin für ne bestimmte Zeit Masse schalten lassen und dann "nichts"?
klar.
nur normalerweise wenn du nach GND (0, low) ziehst geht etwas an :pirate_wink: da der uC dann so weniger belastet wird.
und wenn du den uC auf VCC (1, hugh) ziehst geht es aus.

bei tastern und schaltern ist es dann meist gerade umgekehrt. die werden meist mittels internem pull-up oben gehalten und dann beim drücken auf GND gezogen.
natürlich kann man wenn man lieber mag mit einem widerstand einen pull-down bauen...

HTH grüssle aus der
smileyschweiz57fcf.gif
DunkleAura
 

Windi

Geoguru
#ammensleben schrieb:
moin allerseits,
irgerndwie steh ich grad aufn schlauch. Ist es möglich mit dem Attiny13 Masse zu schalten. Also nen Pin für ne bestimmte Zeit Masse schalten lassen und dann "nichts"?
"Nichts" geht nicht. Da bräuchtest Du einen sog. Tri-State-Ausgang.
Du kannst bei den Ausgangspins wählen ob sie Low (0 Volt) oder High (Vcc) sein sollen.
Je nachdem wie Du Deinen "Verbraucher" an die Pins angeschlossen hast schaltet es bei Low oder High.
 

fekon

Geocacher
Windi schrieb:
"Nichts" geht nicht. Da bräuchtest Du einen sog. Tri-State-Ausgang.
Du kannst bei den Ausgangspins wählen ob sie Low (0 Volt) oder High (Vcc) sein sollen.
Wenn man den PIN auf Eingang (und den Pullup aus) schaltet, dann ist er "offen", wie ein Tri-State-Ausgang. Wirklich "nichts" ist das aber auch nicht, weil es noch die Schutzdioden gibt.
 
OP
A

#ammensleben

Geocacher
danke fuer die antworten. werde mal sehn ob ich damit weiter komme. nun hab ich wieder nen brett vor dem kopf.

Code:
$regfile = "ATtiny13.DAT"
$crystal = 128000
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Portb.4 = Output
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0

Stop Adc
Stop Ac

Dim A As Byte
Dim B As Byte
B = 0

Do

If B = 0 Then
  If Pinb.0 = 1 Then
    Gosub Blinken4
  Elseif Pinb.1 = 1 Then
    Gosub Blinken15
  Elseif Pinb.2 = 1 Then
    Gosub Blinken3
  Elseif Pinb.3 = 1 Then
    Gosub Blinken8
  Else
    Portb.4 = 0
  End If
End If

Loop

Blinken3:
For A = 1 To 3
Portb.4 = 1
Waitms 50
Portb.4 = 0
Waitms 500
Next A
B = 1
Return

Blinken4:
For A = 1 To 4
Portb.4 = 1
Waitms 50
Portb.4 = 0
Waitms 500
Next A
B = 1
Return

Blinken8:
For A = 1 To 8
Portb.4 = 1
Waitms 50
Portb.4 = 0
Waitms 500
Next A
B = 1
Return

Blinken15:
For A = 1 To 15
Portb.4 = 1
Waitms 50
Portb.4 = 0
Waitms 500
Next A
B = 1
Return

End

das sollte doch wenn nichts gedrueckt ist und nur masse/vcc dran sind an pinb.4 nicht blinken oder seh ich da was falsch? zurzeit blinkt er auch wenn keiner der anderen pins an vcc liegt. Es soll nur blinken sobald einer der pins 0-3 gegen vcc geschalten wird und das genau einen durchlauf lang.
 

Windi

Geoguru
Hast Du denn auch Pulldown-Widerstände eingelötet?
Also an jedem Eingang einen Widerstand nach Masse?
 
OP
A

#ammensleben

Geocacher
Ne :eek:ps:
Ich hab aber so eben ne andere Lösung gefunden, dass ich die Schalter auf Masse legen kann.
Was für Widerstände muessten es denn sein damit es funktioniert?
 

Windi

Geoguru
Ich würde mal 1 kOhm probieren.
Wenn Du Deine Taster gegen Masse schaltest dann kannst Du auf externe Widerstände verzichten. Dazu musst Du dann nur die internen Pullups aktivieren und bei der Taster-Abfrage auf "0" und nicht auf "1" testen.
 
OP
A

#ammensleben

Geocacher
kann man irgendwie verhindern das der tiny anspringt wenn zb vcc immer dran haengt und nun ein eingang gegen masse geschalten wird obwohl masse noch garnich an pin 4 liegt?
 

DunkleAura

Geowizard
also das ist das beste, was ich dir so kurzfristig anbieten kann:



ein passendes programm dazu:
Code:
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "attiny13.dat"
$crystal = 960000                                           'Frequenz des internen Oszillators

Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
Stop Adc                                                    'A/D-Wandler abschalten, um Strom zu sparen

Config Portb = &B00000011                                   'PortB auf 'Ausgang'

' PORTB
Portb.0 = 1                                                 ' 0 = LED 0 auf Vcc = aus
Portb.1 = 1                                                 ' 1 = LED 1 auf Vcc = aus
Portb.2 = 1                                                 ' 2 = Taster 0 mit pullup
Portb.3 = 1                                                 ' 3 = Taster 1 mit pullup
Portb.4 = 1                                                 ' 4 = Taster 2 mit pullup

Do

If Pinb.2 = 0 Then
   Portb.0 = Not Portb.0
Elseif Pinb.3 = 0 Then
   Portb.1 = Not Portb.1
Elseif Pinb.4 = 0 Then
   Portb.0 = Not Portb.0
   Portb.1 = Not Portb.1
End If

Loop

End
das macht nichts anderes als bei:
taster 0, led 0 umschalten
taster 1, led 1 umschalten
taster 2, led 0 und led 1 umschalten

mit umschalten meine ich einfach den aktuellen status umschalten.
hoffentlich veranschaulicht dies das ganze ein wenig.

grüssle aus der
smileyschweiz57fcf.gif
DunkleAura
 
OP
A

#ammensleben

Geocacher
Vielen dank für die mühen. Werde mir das mal sichern, wenn ich das nochmal brauche. Sehr gute Leute hier im Forum. Danke :gott:
 

DunkleAura

Geowizard
bitte.
ach ja vergiss einfach bitte die widerstände für die LEDs nicht (sollte selbstverständlich sein), die habe ich in der hitze des gefechts vergessen... ;-)

grüssle DunkleAura
 
Oben