AVR - T0 mit Taster nutzen?

Gast #7232681
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?
Beitrag #7232713 wurde von einem Moderator gelöscht.
Gast #7232818
Lesenswert?

c-hater schrieb im Beitrag #7232713:
> 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.
Gast #7233398
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ß
#7233412
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.

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