Forum: Compiler & IDEs io-Headerfiles lückenhaft? (PCINT3)


von Jan R. (janra)


Lesenswert?

Hallo,
beim Programmieren des ATtiny85 fiel mir auf, daß der gcc herummault, 
ich hätte mich beim PCINT3_vect vertippt:

1
beispiel.c:254:5: warning: 'PCINT3_vect' appears to be a misspelled signal handler [enabled by default]
2
 ISR(PCINT3_vect) {

Habe ich nicht, denn den PCINT3 (und andere, die er auch anmeckert) gibt 
es laut Datenblatt sehr wohl. Den PCINT0 hingegen läßt der gcc 
durchgehen. Den kann ich aber nicht gebrauchen ...

Daraufhin grub ich mal etwas in den Includes. Für den ATtiny88 zB ist 
der PCINT3, um bei dem Beispiel zu bleiben, in dessen iotn88.h 
vorhanden.

Ist das bekannt? Bin ich der erste, der drüber stolpert? Oder nur der 
erste, der das Stolpern dokumentiert?

VG, Jan.

von Bastler (Gast)


Lesenswert?

Ein PCINT ist für bis zu 8-PortPins zuständig. Es gibt auf dem Tiny85 
schlicht nur PCINT1.

von Jan R. (janra)


Angehängte Dateien:

Lesenswert?

Im Datenblatt wird der PCINT3 (und andere) in Text und Bild beworben.

von Martin (Gast)


Lesenswert?

Im Prinzip richtig, aber eine Klarstellung:
PCINT0

Blöderweise sind die Pins m.E. wirklich etwas mißverständlich benannt.
Sie teilen sich alle einen Interruptvector, eben den PCINT0.

Sagt das Datenblatt auch so, Seite 48, da sind die Interruptvektoren 
gelistet.

von Bastler (Gast)


Lesenswert?

Ja das 3te Bit aus der Familiy der PinChange-Bits.
Im Rest des DBs steht was dir noch an Info fehlt. (unter External 
Interrupts)

von Martin (Gast)


Lesenswert?

Nein, werden sie nicht. Das bedeutet nur, das jeder Pin einzeln für die 
Interrupt-Auslösung freigeschaltet werden kann, nicht das jeder einen 
eigenen Interruptvektor hätte.

von Martin (Gast)


Lesenswert?

Sry, meine Beiträge bezogen sich natürlich auf den OP.

von Bastler (Gast)


Lesenswert?

Ups, zuviel nicht-C gemacht, wo Arrays mit 1 statt 0 anfangen:
Klar PCINT0

von Rene H. (Gast)


Lesenswert?

Ich weiss nicht wie es auf dem Tiny85 ist, aber beim Tiny13 gibt es nur 
eine ISR für pcint. In der muss man dann die Eingänge selber prüfen.

Grüsse,
René

e.g.
1
ISR (PCINT0_vect)
2
{
3
    uint8_t changedbits;
4
5
    changedbits = PINB ^ portbhistory;
6
    portbhistory = PINB;
7
8
    if(changedbits & (1 << PB0))
9
    ...

von Martin (Gast)


Lesenswert?

Ist auf dem 85 auch so. Auf anderen Tinies mit mehr Ports gibts dann 
auch PCINT1 und teils auch 2 usw. Die dann aber immer für alle Pins 
eines Ports zuständig sind.

von Jan R. (janra)


Lesenswert?

Jepp, die Tabelle unter Kap. 9.1 sagt es implizit:

1
rjmp RESET           ; Address 0x0000
2
rjmp INT0_ISR        ; Address 0x0001
3
rjmp PCINT0_ISR      ; Address 0x0002
4
rjmp TIM1_COMPA_ISR  ; Address 0x0003
5
rjmp TIM1_OVF_ISR    ; Address 0x0004
6
:
7
:

Und der Text danach erläutert. Es gibt bei dem t85 nur einen Vektor für 
PCINT0.

Aaach, es ist doch immer dasselbe: kaum schaut man mal richtig im 
Datenblatt an den relevanten Stellen, schon lüften sich Mysterien ;-)

Danke fürs Hinschubsen an alle schnellen Erläuterer hier!

VG, Jan.

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.