Forum: Mikrocontroller und Digitale Elektronik Atmega16: Gibt es etwas ähnliches wie TSCR0 nur für PinA7?


von Peter (peter_37)


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.

von Steve van de Grens (roehrmond)


Lesenswert?

PA7 kannst du so nicht verwenden. Er ist weder mit einem Timer, noch mit 
dem Interrupt Controller verbunden.

von Oliver S. (oliverso)


Lesenswert?

Timer 0 zählt halt externe Impulse an PB0, Timer 1 an PB1. Andere 
Hardwarezähler gibts da nicht.

Oliver

von Peter D. (peda)


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?

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Peter D. schrieb:
> Nimm einfach eine Entprelllib

welche denn ? :-)

Sei nicht so bescheiden, du kannst ruhig auf dein Werk verweisen.
https://www.mikrocontroller.net/articles/Entprellung#Debounce-Makro_von_Peter_Dannegger

Am besten den ganzen Artikel lesen, damit verstanden wird, warum der 
Code aussieht, wie er aussieht. Dann kann man das ggf. 1:1 in Assembler 
umsetzen.

: Bearbeitet durch User
von S. L. (sldt)


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.

von S. L. (sldt)


Lesenswert?

> PA7 ... ist weder mit einem Timer noch ... verbunden.

Auch dies stimmt so nicht - zumindest Input-Capture auf Timer1 ginge.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

von S. L. (sldt)


Angehängte Dateien:

Lesenswert?

> Oder wie sonst könnte ich das Lösen ... Anregungen

Um eine gegebenenfalls nötige Entprellung müssen Sie sich selbst 
kümmern.
  ("Oh, da gibt es viele Wege", sagte der Blaue Geist)

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.