Not logged in. · Lost password · Register

The_Tricker
Member since Jul 2013
12 posts
Subject: Inialisierungsfunktion
Klausur Juli 2012

Meine Initialisierungsfunktion schaut wie folgt aus. Wäre super wenn ihr da mal drüber schaut, ob ich das alles so richtig verstandne hab:

static void init (void) {
    DDRA = 255;                                // LEDs ; auf ausgang
    PORTA = 255;   
    DDRB |= (1<<5);
    PORTB &= ~(1<<5);
    DDRD &= ((1 << 2) | (1 << 3));        // P2 Nulltaster, P3 eins-taster
    PORTD |= ((1<<2) | (1<<3));
    MCUCR |= (1<<ISC11);    // fallende flanke
    MCUCR &= ~(1<<ISC10);
    GICR |= (1<< INT0);    // setze INT0
    GICR |= (1<< INT1); // setze INT1
}
killermiller
Member since May 2011
41 posts
Quote by The_Tricker:
Klausur Juli 2012

Meine Initialisierungsfunktion schaut wie folgt aus. Wäre super wenn ihr da mal drüber schaut, ob ich das alles so richtig verstandne hab:
Ohne die Angabe vor mir zu haben versuch ichs mal...
Quote by The_Tricker:
static void init (void) {
    DDRA = 255;                                // LEDs ; auf ausgang
    PORTA = 255;   
    DDRB |= (1<<5);
    PORTB &= ~(1<<5);
    DDRD &= ((1 << 2) | (1 << 3));        // P2 Nulltaster, P3 eins-taster
Das für DDRD sollte entweder ein oder-Strich sein oder es fehlt die Tilde. Zum Ändern von Bits immer |=, &=~ oder ^= .
Wenn du B5 als Ausgang mit Masse anliegend haben wolltest, passt das.
Quote by The_Tricker:
    PORTD |= ((1<<2) | (1<<3));
    MCUCR |= (1<<ISC11);    // fallende flanke
    MCUCR &= ~(1<<ISC10);
MCUCR für Interrupt-Quelle 0 fehlt noch.
Quote by The_Tricker:
    GICR |= (1<< INT0);    // setze INT0
    GICR |= (1<< INT1); // setze INT1
}
Rest sieht sinnvoll aus. Obs richtig is, kommt drauf an, was in der Angabe steht ;)
ingonör
Member since May 2013
67 posts
Jetzt von mir nochmal eine Frage für Dumme:

Taster gegen Masse verbunden: Interrupt bei fallender Flanke.
Taster mit Masse verbunden: Interrupt bei steigender Flanke.

Richtig?
The_Tricker
Member since Jul 2013
12 posts
In reply to post #2
Die Tilde hab ich beim abschreiben vergessen danke :)

Hier die Angabe:

Information über die Hardware
LEDs:
PORTA, Pins 0-7, Start bei LED 1 an Pin 0, eingeschaltet bei low-Pegel
- Pin als Ausgang konfigurieren: entsprechendes Bit in DDRA-Register auf 1
Schloss:
PORTB, Pin 5, offen bei high-Pegel, geschlossen bei low-Pegel
- Pin als Ausgang konfigurieren: entspr. Bit in DDRB-Reg. auf 1
Taster:
PORTD, "Null"-Taster (Taster 0) = Pin 2, "Eins"-Taster (Taster 1) = Pin 3
- Pin als Eingang konfigurieren: entsprechendes Bit in DDRD-Register auf 0
- externe Interruptquellen INT0 und INT1, ISR-Vektor-Makros:
INT0_vect und INT1_vect
- Aktivierung der Interruptquellen erfolgt durch Setzen des INT0 - bzw. INT1 -Bits im Register GICR
- die Taster verbindeen den Pin mit Masse, es müssen die internen Pullup-Widerstände
verwendet werden (entsprechende Bits in PORTD-Register auf 1 setzen).
- Konfiguration der externen Interruptquellen 0 und 1 (Bits in Register MCUCR)

Interrupt 0                     Beschreibung                    Interrupt 1
ISC01 ISC00                                                        ISC11 ISC10
0 0 Interrupt                   bei low Pegel                    0 0
0 1 Interrupt                   bei beliebiger Flanke           0 1
1 0 Interrupt                   bei fallender Flanke            1 0
1 1 Interrupt                    bei steigender Flanke        1 1


meine neue Init:

static void init (void) {
    DDRA = 255;        // LEDs ; auf ausgang
    PORTA = 255;   
    DDRB |= (1<<5);
    PORTB &= ~(1<<5);
    DDRD &= ~((1 << 2) | (1 << 3));        // P2 Nulltaster, P3 eins-taster
    PORTD |= ((1<<2) | (1<<3));
    MCUCR |= (1<<ISC11);    // fallende flanke
    MCUCR &= ~(1<<ISC10);
    MCUCR |= (1 << ISC01);
    MCUCR &= ~(1 << ISC00);
    GICR |= (1<< INT0);    // setze INT0
    GICR |= (1<< INT1); // setze INT1
}
The_Tricker
Member since Jul 2013
12 posts
In reply to post #3
Quote by ingonör:
Jetzt von mir nochmal eine Frage für Dumme:

Taster gegen Masse verbunden: Interrupt bei fallender Flanke.
Taster mit Masse verbunden: Interrupt bei steigender Flanke.

Richtig?

Das würde mich auch interessieren :)
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
In reply to post #3
Quote by ingonör:
Jetzt von mir nochmal eine Frage für Dumme:

Taster gegen Masse verbunden: Interrupt bei fallender Flanke.
Taster mit Masse verbunden: Interrupt bei steigender Flanke.
?!??!
Pullup: Zieht den Pin auf 5V (mit einem ca 33kOhm Widerstand) -> high 
Taster drücken: Pin wird mit Masse verbunden -> 0V -> low
Wann du jetzt triggern musst kommt auf die Aufgabenstellung an.
ingonör
Member since May 2013
67 posts
Tut mir leid:
Ich muss zugeben, für einen Maschinenbauer, der wenig bis gar nichts mit Elektrotechnik am Hut hat, war dieser Beitrag leider nicht sehr informativ. :-/
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
....da gibt's nur eins: http://bit.ly/1bZkY80 ;)
FanFan
FSI EEI & FSI Mechatronik
(Moderator)
Member since Oct 2010
76 posts
Pin gegen bzw. mit Masse verbunden bedeutet das selbe.

Sobald du den Taster drückst liegt Masse an!
Du musst also (wenn der Tastendruck gefragt ist) auf fallende Flanke reagieren.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen