Forum: Mikrocontroller und Digitale Elektronik portb.2 vom atmega32


von roboterheld (Gast)


Lesenswert?

der portb.2 vom atmega hat 3 (normal/int2/ain0)funktionen. wie wird da 
der int2 aktiviert?

mffg

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Oben links unter AVR ist ein Link zum avr-gcc Tutorial.

von Karl H. (kbuchegg)


Lesenswert?

Was auch nicht zu verachten ist:
Bei Atmel gibt es ein umfangreiches Datenblätt zum Mega32.
Da steht das alles drinnen.

Verblüffend, gelle?
Ein Hersteller, der seinen Chip dokumentiert!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Mit dem Datenblatt ist das manchmal so eine Sache...

Ich z.B. hatte gestern das Datenblatt zum Attiny2313 in den Fingern und 
richtig lange versucht genau das Thema Mehrfachbelegung nachzuschlagen.
(Ging um den Thread Beitrag "Interrupt beim AVR" 
und ich hatte AT90S2313 überlesen)

Ich habe es schäm nicht geschafft. Auch im AVR-GCC-Tutorial springt 
mir dazu ehrlich gesagt nichts ins Auge.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das schäm kann ich jetzt streichen ;-) Die Einstellerei geht beim 
Atmega32 über die Special Function Register (SFR) MCUCSR und GICR.

Hier das Beispiel für Oilaf aus obigem Thread angepasst an den Atmega32:
1
; ################
2
; ### Includes ###
3
; ################
4
.include "m32def.inc"
5
; TARGET ATMEGA8
6
7
; ####################
8
; ### Definitionen ###
9
; ####################
10
.def    temp    =r16
11
.def    temp2   =r17
12
13
; #####################
14
; ### Vektortabelle ###
15
; #####################
16
; Hier verkürzt für Demozwecke.
17
; Komplette Vektortabelle ist sicher!
18
.org 0x0000
19
  rjmp  Reset
20
.org INT2addr
21
  rjmp  INT2_Handler
22
23
; #####################
24
; ### Hauptprogramm ###
25
; #####################
26
Reset:
27
    ; ########################
28
    ; ### Stack einrichten ###
29
    ; ########################
30
  ldi temp, high(RAMEND)
31
  out SPH, temp
32
  ldi temp, low(RAMEND)
33
  out SPL, temp
34
35
    ; ############################################
36
    ; ### LOW ACTIVE LED an PB0 initialisieren ###
37
    ; ############################################
38
    ; Toggelt später in INT2_Handler
39
  ldi temp, 0b00000000  ; PB0 LOW (LED_AN)
40
  out PORTB, temp
41
  ldi temp, 0b00000001  ; PB0 Ausgang
42
  out DDRB, temp
43
         
44
    ; #############################
45
    ; ### Interrupts einstellen ###
46
    ; #############################
47
    ; FALLENDE Flanke von INT2 soll Interrupt erzeugen
48
  in  temp, MCUCSR
49
  andi temp, 0b10111111  ; ISC2 löschen => fallende Flanke
50
  out MCUCSR, temp
51
52
  in  temp, GICR
53
  ori temp, 0b00100000  ; INT2 external interrupt request 2 enable
54
  out GICR, temp
55
56
  sei            ; Interrupts allgemein aktivieren
57
  
58
    ; #######################
59
    ; ### Arbeitsschleife ###
60
    ; #######################
61
loop:
62
  rjmp loop       ; loop forever
63
64
; ########################
65
; ### Interrupthandler ###
66
; ########################
67
    ; ############
68
    ; ### Int2 ###
69
    ; ############
70
INT2_Handler:
71
  push temp
72
  in   temp,sreg
73
  ; Anfang Nutzcode
74
  ; => PB0 toggeln
75
  push temp
76
  push temp2
77
  ldi  temp2, 0b00000001
78
  in   temp, PORTB
79
  eor  temp, temp2
80
  out  PORTB, temp
81
  pop  temp2
82
  pop  temp
83
  ; Ende Nutzcode
84
  out  sreg,temp
85
  pop  temp
86
  reti
87
88
; Simulation in AVR Studio
89
;
90
; !/ Keine Breakpoints
91
; 2/ Step (F11)
92
; 3/ PINB2 manipulieren und PORTB0 beobachten
93
;    PORTB0 toggelt, wenn PINB2 von HIGH => LOW wechselt
94
;.
95
; ENDE

Der komische Abschnitt Overriding Signals for Alternate Functions hat 
mich verwirrt, weil die dortigen Signale sonst im Datenblatt nicht 
vorkommen.

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.