PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pin anders belegen bei Tiny25 (alternate functions of PORTB)



JoeA
31.10.2009, 11:59
Hallo,

Ich versuche z.Zt. in die AVR Programmierung einzusteigen.
Mein erstes Projekt war ein Einschaltzeitbegrenzer mit dem Attiny25.

Der Aufbau ist recht simpel:
PB4: BC337 schaltet ein Relais
PB1: LED für Status
PB3: Taster für Programmierung

Wird der Taster gedrückt Zählt eine Schleife wie lange das geschieht und schreibt beim loslasen den wert in den Eeprom.
LED gibt Blinkcodes beim Tastedrücken, EEPromschreiben, Standby bzw. Relais an.
Nach dem Einschalten wird der Eeprom Wert gelesen und, das Relais angeschaltet, runtergezählt und ausgeschaltet.
Soweit funktioniert das auch perfekt.

Für diese Schaltung brauchte ich keine Fuses ändern, die Pins konnten auch einfach als Output definiert werden.

Nun zu meinem Problem:


Da ich in der Schaltung keinen SPI habe, wollte ich gern (nur zum probieren) zwei weitere LEDs ergänzen und an PB0 und PB2 hängen.

Leider machen die LEDs an PB0 und PB2 überhaupt nicht was ich erwarte.
Sie machen exakt das gleiche wie die LED an PB1. (sobald ich sie als Output definiert habe)

Die LED sind wie folgt angeschlossen:
PBx -> LED ->1k ->Gnd

Ich vermute das ich beim Attiny25 PB0 und PB2, die ja normalerweise für SPI verwendet werden, erst Umdefinieren muss.
Das Datenblatt beschreibt da was von "Override Signals", aber ich werd da einfach nicht schlau draus.

Vielleicht hat ja jemand ein kleines Code Sample oder sowas.
Hab mich schon dumm und dämlich gesucht.

Viele Dank & Grüße
Joe

sternst
31.10.2009, 13:04
Es liegt einfach nur daran, dass deine ganze binäre Logik verquer ist.

#define LEDOFF PORTB &= (1<<LED)
-> alle Ausgänge an PORTB auf 0, außer LED, der Ausgang behält seinen aktuellen Wert

#define LEDON PORTB |= ~(1<<LED)
-> alle Ausgänge an PORTB auf 1, außer LED, der Ausgang behält seinen aktuellen Wert

JoeA
31.10.2009, 16:00
Oh nein !

Da mach ich jetzt seit Tagen dran rum aber das ich gerade da einen Fehler mache hatte ich nicht erwartet.
Na ja, das letzte mal das ich Binärverknüpfung benutzt habe ist einige Jahre her.

Es muss natürlich so sein:

#define LEDON PORTB |= (1<<LED)
#define LEDOFF PORTB &= ~(1<<LED)

Und auf einmal gehts mit allen PINs.

Vielen Dank für diese Augenöffnung.

Grüße
Joe