Forum: Mikrocontroller und Digitale Elektronik External Interrupts beim Tiny4313


von kurt (Gast)


Lesenswert?

Bisher habe ich mit dem AVR Tiny24/44/84 erfolgreich gearbeitet.
Da ich für mein neues Projekt ein paar mehr I/O-Ports, aber keinen
ADC brauche, erschien mir der AVR Tiny4313 als gute Wahl.

Schön ist auch, dass man den Tiny4313 im Gegesatz zu den Tiny24/44/84
direkt auf der STK500 testen kann:

Normale I/O-Verarbeitung, USART, Timer0 und Timer1 sind erfolgreich
getestet, aber ich kriege die external Interrupts nicht hin!
Nacheinander habe ich Ext-INT1 und den PC-Int2 getestet.

Nach den ersten Compiler-Errors habe ich schon gekuugelt, dass die
tn4313def.inc nicht ganz sauber ist, daher noch ein paar #DEFINEs:
1
; für GIMSK:
2
#define PCIE1 3
3
#define PCIE2 4
4
#define PCIE0 5
5
6
PortDini:
7
  ldi Tmp0, 0b00000010  ; PortD: 0/1: RXD/TXD,  
8
  out DDRD, Tmp0    ; 2...6: Input, 7 n/a
9
  ldi Tmp0, 0b00000000  ; 
10
  out PortD, Tmp0    ;
11
12
13
PCint2ini:
14
  in  Tmp0,  GIMSK
15
  ori  Tmp0,  1 << PCIE2   ; PCIE2 Enable = GIMSK-Bit4
16
  out  GIMSK,  Tmp0    ; PC-IRQ2 = ON
17
18
  in  Tmp0,  PCMSK2
19
  ori  Tmp0,  (1 << PCINT16) | (1 << PCINT15) | (1 << PCINT14) | (1 << PCINT13)      
20
  out PCMSK2, Tmp0    ; PCINT13...PCINT16 = ON
21
22
23
Eint1_ini:
24
  in  Tmp0,  MCUCR
25
  ori Tmp0,  1 << ISC11  ; fallende Flanke für INT1 (PinD3)
26
  out  MCUCR, Tmp0
27
28
  in  Tmp0,  GIMSK
29
  ori  Tmp0,  1 << INT1  ; INT1 Enable = GIMSK-Bit7 (0b10000000)
30
  out  GIMSK,  Tmp0    ; INT1-IRQ ON
31
32
  sei        ; Interrupts freigegeben!

Was fehlt denn noch, damit die Interrupts auch angesprungen 
werden???????

von Marcel (Gast)


Lesenswert?

Wenn es sich dabei um den gesamten Codee handelt:

Hauptprogramm, Int-Vektor-Tabelle

von Kurt (Gast)


Lesenswert?

Danke, manchmal haperts ja an den simpelsten Sachen...
Es ist natütlich nicht alles, sondern nur die Initialisierung
der Interrupts gezeigt.
Ich schrieb doch, dass ich ähnliche Sachen mit dem Tiny24
schon gemacht habe.

- Und: Ja, ich habe u.a. auch S. 48 bis 54 des 2313A/4313-
Datenblatts gelesen und angewandt...

Entweder muss ich also was übersehen haben, oder da ist
vielleicht NOCH ein Fehler in der "tn4313def.inc" ???

Der Chip müsste i.O. sein, da ich per Polling-Schleife die
Daten von PinD (Tastenzustände) nach PortB (LEDs) übertragen
konnte.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Kurt schrieb:
> Entweder muss ich also was übersehen haben, oder da ist
> vielleicht NOCH ein Fehler in der "tn4313def.inc" ???

Die tn4313def.inc ist fehlerfrei. Wenn es Fehler beim Assemblieren gibt, 
dann rufst Du Register- oder Variablennamen auf, die es in dem 
Controller nicht gibt oder die woanders als in Deinem alten Controller 
liegen. Dann funktioniert´s freilich nicht. Nimm Dich mal der 
Fehlermeldungen an und versuche nicht, diese durch fiktive Defines zu 
umgehen.

von Kurt (Gast)


Lesenswert?

Knut Ballhause schrieb:
> Die tn4313def.inc ist fehlerfrei.

Da hängt sich aber jemand weit aus dem Fenster!!!

Woher weißt du das? Funktionierende Code-Beispiele?

Die Frage ist: Warum wird genau die Bitposition PCIE2 im
GIMSK-Register vom Compiler bemängelt, die es nach Datenblatt
beim Tiny4313 geben muss? (Und die es beim tiny24 nicht gibt)

Ich vermute mal: Weil der Compiler in der offensichtlich NICHT
so "fehlerfreien"  tn4313def.inc  danach gesucht hat...
(Ich finde PCIE2 dort auch nicht.)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ja du hast Recht, in der tn4313def.inc fehlen tatsächlich die 
Bitpositionen. Ich hatte die Sache mit dem Tiny461 verwechselt. Selbst 
in der Migration Note T2313 -> T2313A sind die 3 neuen Bits in GIMSK 
nicht vermerkt. Jetzt müsste ich nur noch testen, ob die Interrupte 
selber funktionieren.

BTW: hast Du die komplette (neue) Vektorentabelle mit den neuen Vektoren 
für PCInt0, PCInt1 und PCInt2 in Dein Programm übernommen?

von Kurt (Gast)


Lesenswert?

> ...komplette (neue) Vektorentabelle... ?

Da ich öfter mit t24, t25, mega8 arbeite, habe ich mir
jeweils ein "Grundgerüst" mit den spezifischen, immer
wiederkehrenden Code-Teilen aus dem Datenblatt erstellt.
Dazu gehört natürlich auch die jeweilige IRQ-Tabelle ohne
die führenden Zeilennummern...

War auch mein erster Schritt beim t4313.

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.