Atmega16: Gibt es etwas ähnliches wie TSCR0 nur für PinA7?

OP #7445317
Lesenswert?

Hallo, ich möchte auf einem Atmgea16 die Eingabe an PinA7 zählen, nun habe ich nach ersten recherche festgestellt, das das nicht so einfach geht wie mit z.B. PinB0, wo ich ja TSCR0 verwenden kann. Habe ich da bei meiner recherche etwas übersehen und es gibt doch so etwas ähnliches? Oder wie sonst könnte ich das Lösen.

Konkret soll das Assembler Programm die Fallende flanke eines Buttons an PinA7 zählen, ist es 5 mal vorgekommen, so soll er eine ISR ausführen und danach wieder in die Main loop springen.

Dies währe eine Beispiel Implementierung mit PinB0 als Eingabe:

1
.nolist
2
.include "m16def.inc"
3
.list
4

5
.def Temp = R16
6
.equ Anz  = 5
7

8
.CSEG        
9
.ORG $0000                    
10

11
; Init Counter 0 and Port B
12
INIT:  ldi Temp,(1<<CS02)|(1<<CS01)|(0<<CS00)
13
  out TCCR0, Temp     ; Mode: Event Counter T0 L/H
14
  ldi Temp, Anz-1     ; Set Compare Value of
15
  out OCR0, Temp      ; Counter to ANZ-1
16
  ldi Temp, (1<<PB3)  
17
  out DDRB, Temp      ; as Outp., others Inp./Hi-Z
18
  clr Temp            
19
  out PORTB, Temp     
20
  
21
; Reset Counter
22
START:  clr  Temp           
23
  out  TCNT0, Temp    
24

25
; Polling Loop until Anz Events Counted
26
POLL:  in   Temp, TIFR   ; Read Timer-Flags
27
  sbrs Temp, OCF0       ; Skip if Output Compare set
28
  rjmp POLL          
29

30
; Invert Bits 
31
  in   Temp, PORTB       ; Get value of Port B
32
  com  Temp                ; Invert Bits
33
  andi Temp, (1<<PB3)    ; Write inverted
34
  out  PORTB, Temp        
35
; Clear Flag and Start Next Counting Round
36
  ldi  Temp, (1<<OCF0)     ; Clear Compare Flag
37
  out  TIFR, Temp         
38
  rjmp START

Dankeschön schonmal im Voraus für die Hilfe und Anregungen.

#7445352
Lesenswert?

Peter schrieb:

z.B. PinB0, wo ich ja TSCR0 verwenden kann.

Das ginge eh nicht. Du zählst damit die Preller und Störungen, aber nie nur die echten Tastendrücke. Nimm einfach eine Entprelllib und damit zählst Du die Drücke in der Mainloop oder gleich mit im Entprelltimerinterrupt.

Willst Du wirklich noch mit Assembler einsteigen?

#7445421
Lesenswert?

die Fallende flanke eines Buttons an PinA7 zählen

'Button'? Also ohne Entprellung wird das wohl nichts, notfalls in Hardware per RC-Glied.

... noch mit dem Interrupt Controller verbunden

Das stimmt so nicht - wenn auf den ADC verzichtet werden kann, geht das per Analog-Comparator, d.h. einzeln zählen in ISR wäre sehr wohl möglich.

(Firma: Funkenflug Industries) #7445446
Lesenswert?

Entprellung in Hardware ist doch kein Problem. Wenn man den internen PullUp des AVR benutzt, 22..47nF parallel zum Taster (oder "Button") und alles wird gut. Wenn es ein anderes Signal von einer Logik oder so ist, bleibt die Frage, ob es überhaupt entprellt werden muss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren