Hallo,
da ich Anfänger bin wollte ich mal um Unterstützung bitten. Und zwar wie
man folgendes am besten in der Regel umsetzt? Ich will an einem Eingang
PB2 (int0)einem High Low pegel auswerten. Wenn PB2(int0) High ist, soll
PB1 einschalten, nach kurzer verzögerung wieder aus. Dann soll PA7
einschalten, wenn jetzt der Pegel null wird, dann soll PA7 ausschalten,
und wieder PB1 einschalten, und nach kurzer verzögerung wiederaus. dann
soll PA3 einschalten, wenn jetzt der pegel wieder high wird, soll es
wieder von vorne mit PB1 losgehen. Jetzt dachte ich mir ob man das nicht
zb. mit einer Interrupt Service Routine lösen könnte.Allerdings als
Anfängergar nicht sooo easy.Oder vielleicht geht das auch ganz anders?
Wäre das nach folgende ansatzweise dafür geeignet?
1 | /*
|
2 | * Attiny24a_INT0.c
|
3 | *
|
4 | * Created: 10.08.2016 15:11:16
|
5 | * Author: Huber
|
6 | */
|
7 | #define F_CPU 1000000UL
|
8 | #include <util/delay.h>
|
9 | #include <avr/interrupt.h>
|
10 | #include <avr/io.h>
|
11 |
|
12 | ISR (EXT_INT0_vect)
|
13 | {
|
14 | PORTA^=(1<<);
|
15 |
|
16 |
|
17 |
|
18 | }
|
19 | int main(void)
|
20 | {//Ausgänge einstellen
|
21 | DDRA |= (1<<PA3)|(1<<PA7);
|
22 | DDRB |=(1<<PB1);
|
23 | //Eingänge einstellen PULLUPS
|
24 | PORTB|= (1<<PB2);
|
25 | //ISR interrupt service (INT0) routine einstellen
|
26 | MCUCR |= (1<<ISC01);
|
27 | GIMSK |= (1<<INT0);
|
28 | sei();
|
29 |
|
30 | while(1)
|
31 | {
|
32 |
|
33 | }
|
34 | }
|