Forum: Mikrocontroller und Digitale Elektronik AVR - T0 mit Taster nutzen?


von Lukas (Gast)


Lesenswert?

Hallo zusammen,

ich habe da eine Platine mit einem Atmega2560 drauf, die ich jetzt super 
für ein anderes Projekt nutzen könnte, wenn mir nur kein Interrupt 
fehlen würde.

Ich brauche einen Eingang als Interrupt, der einige der aber noch frei 
ist, ist der PD7 (externer Timer0 Pin, T0).

Könnte ich den nicht nutzen und dann einen Timerinerrupt bei steigender 
Flanke auslösen? Oder habe ich einen Denkfehler?

: Verschoben durch Moderator
von c-hater (Gast)


Lesenswert?

Lukas schrieb:

> ich habe da eine Platine mit einem Atmega2560 drauf, die ich jetzt super
> für ein anderes Projekt nutzen könnte, wenn mir nur kein Interrupt
> fehlen würde.
>
> Ich brauche einen Eingang als Interrupt, der einige der aber noch frei
> ist, ist der PD7 (externer Timer0 Pin, T0).
>
> Könnte ich den nicht nutzen und dann einen Timerinerrupt bei steigender
> Flanke auslösen? Oder habe ich einen Denkfehler?

Ganze drei sogar.

Der erste ist: jeder Pin kann einen Interrupt auslösen. Den sog. 
Pin-Change-Interrupt.

Der zweite ist: der Takteingang eines Timers kann direkt keinen 
Interrupt auslösen, sondern höchstens indirekt (durch geeignete 
Programmierung des Timers und Benutzung von dessen Interrupts). Aber das 
klappt höchstens bei jeder zweiten Taktflanke und auch nur, wenn der 
entsprechende Timer unbenutzt ist. So, wie du fragst, bist du Arduidiot. 
Dann kannst du aber getrost davon ausgehen, dass der Timer0 benutzt 
ist...

Der dritte ist: Du bist in diesem Subforum vollkommen falsch.

von Oliver S. (oliverso)


Lesenswert?

Lukas schrieb:
> Oder habe ich einen Denkfehler?

Der erste ist schonmal, einen Taster unbedingt per Interrupt abfragen zu 
wollen. Das geht viel besser ohne,  und damit löst sich dein Problem 
ganz von alleine.

Oliver

von Lukas (Gast)


Lesenswert?

c-hater schrieb:
> Lukas schrieb:
>
>> ich habe da eine Platine mit einem Atmega2560 drauf, die ich jetzt super
>> für ein anderes Projekt nutzen könnte, wenn mir nur kein Interrupt
>> fehlen würde.
>>
>> Ich brauche einen Eingang als Interrupt, der einige der aber noch frei
>> ist, ist der PD7 (externer Timer0 Pin, T0).
>>
>> Könnte ich den nicht nutzen und dann einen Timerinerrupt bei steigender
>> Flanke auslösen? Oder habe ich einen Denkfehler?
>
> Ganze drei sogar.
>
> Der erste ist: jeder Pin kann einen Interrupt auslösen. Den sog.
> Pin-Change-Interrupt.
Das bezweifle ich...
>
> Der zweite ist: der Takteingang eines Timers kann direkt keinen
> Interrupt auslösen, sondern höchstens indirekt (durch geeignete
> Programmierung des Timers und Benutzung von dessen Interrupts).
Ja das ist mir schon klar..

> Aber das
> klappt höchstens bei jeder zweiten Taktflanke und auch nur, wenn der
> entsprechende Timer unbenutzt ist.
Unbenutzt ist der.. Aber warum bei jeder zweiten?

> So, wie du fragst, bist du Arduidiot.
> Dann kannst du aber getrost davon ausgehen, dass der Timer0 benutzt
> ist...
>
> Der dritte ist: Du bist in diesem Subforum vollkommen falsch.

von c-hater (Gast)


Lesenswert?

Lukas schrieb:
> c-hater schrieb:

>> Der erste ist: jeder Pin kann einen Interrupt auslösen. Den sog.
>> Pin-Change-Interrupt.

> Das bezweifle ich...

Dann lies' einfach das verdammte Datenblatt und nerv' hier nicht weiter 
rum.

von Dyson (Gast)


Lesenswert?

Lukas schrieb:
> Das bezweifle ich...

Querdenker?

von Michael M. (Gast)


Lesenswert?

jo hast recht wär es Port B , würde es gehen. Bei Port D nicht.

Table 13-12. Port D Pins Alternate Functions
Port Pin Alternate Function
PD7 T0 (Timer/Counter0 Clock Input)
PD6 T1 (Timer/Counter1 Clock Input)
PD5 XCK1 (USART1 External Clock Input/Output)
PD4 ICP1 (Timer/Counter1 Input Capture Trigger)
PD3 INT3/TXD1 (External Interrupt3 Input or USART1 Transmit Pin)
PD2 INT2/RXD1 (External Interrupt2 Input or USART1 Receive Pin)
PD1 INT1/SDA (External Interrupt1 Input or TWI Serial DAta)
PD0 INT0/SCL (External Interrupt0 Input or TWI Serial CLock)

Gruß

von Peter D. (peda)


Lesenswert?

Lukas schrieb:
> Könnte ich den nicht nutzen und dann einen Timerinerrupt bei steigender
> Flanke auslösen?

Ja, das geht:
1
void T0_init(void)
2
{
3
  TCCR0A = 0;
4
  TCCR0B = 1<<CS02 | 1<<CS01 | 1<<CS00;
5
  TIFR0 = 1<<TOV0;
6
  TCNT0 = 0xFF;
7
  TIMSK0 = 1<<TOIE0;
8
}
9
10
ISR(TIMER0_OVF_vect)
11
{
12
  TCNT0 = 0xFF;
13
  // other stuff
14
}

Wird T0 schon verwendet, kannst Du dessen Funktionen auf T2 verschieben.

von Peter D. (peda)


Lesenswert?

c-hater schrieb:
> Der erste ist: jeder Pin kann einen Interrupt auslösen. Den sog.
> Pin-Change-Interrupt.

Nö, nicht beim ATmega2560.

von Peter D. (peda)


Lesenswert?

Oliver S. schrieb:
> Der erste ist schonmal, einen Taster unbedingt per Interrupt abfragen zu
> wollen. Das geht viel besser ohne

Das stimmt.

von EAF (Gast)


Lesenswert?

c-hater schrieb:
> Dann lies' einfach das verdammte Datenblatt und nerv' hier nicht weiter
> rum.

Was bist du doch für ein arroganter und dabei doch so dämlichier und 
Kenntnis freier Schwachkopf.

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.