Archiv verlassen und diese Seite im Standarddesign anzeigen : PCINT Frage
Hallo
Controller: ATMEGA168
Frage sind die PCINT pins jetzt normal Interrupt fähig, also wenn ich dort zb einen Sensor der sich mit fallender Flanke meldet anschließe lässt sich damit dann ein Interrupt auslösen?
edit:
Achja frohe Ostern..
lg manhunt
Hallo,
so pauschal? Ja, warum fragst du?
Gruß
Jens
linux_80
11.04.2009, 23:40
Hallo,
und PCINT bedeutet Pin Change Interrupt, ein IRQ wird deshalb bei beiden Richtungen einer Flanke ausgelöst. Wenn eine bestimmte Richtung gefragt ist, muss man erst das PIN in der ISR abfragen.
Danke sehr und wie Aktiviere ich diese Interrupts bzw wo finde ich das ISR define den in iomx8.h (interrupt.h) gibt es nur defines für PCINT0-2 von 3...23 ist keine Spur.
lg manhunt
linux_80
12.04.2009, 10:45
Moin,
PCINT geht nur Byte- bzw. Portweise, Du musst Dir den Port suchen an dem der gewünschte PCINT anliegt, und diese ISR aktivieren. Dann gibts noch eine Maske, in der man angeben kann welches Bit/Pin eines Ports den IRQ auslösen kann. Wenn man mehr als einen PCINT abfragen will, muss man in der ISR als erstes den Port(PIN) einlesen, um zu sehen welchen denn nun den IRQ ausgelöst hat, dann erst kommt das was man so in einer ISR macht ;)
Der Rest steht im DB des AVR :D
Frohes (Ostereier-) suchen :Ostern
Danke schon verstanden.....
Frohe Ostern
oberallgeier
12.04.2009, 10:51
Hi manhunt,
... wie Aktiviere ich diese Interrupts bzw wo finde ich das ISR define den in iomx8.h (interrupt.h) gibt es nur defines für PCINT0-2 von 3...23 ist keine Spur ...Hmmm, Deine Frage ging doch nach dem mega168 - oder nicht?
Du holst Dir bei Atmel (http://www.atmel.com/dyn/products/datasheets.asp?family_id=607)das entsprechende Datenblatt, also das vom mega168 (http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf). Dort ist im Kapitel 12. External Interrupts abgehandelt wie Du 1) entweder einen der beiden Pinne extINT0 oder ~1 für steigende oder fallende Flanke definierst in Table 12-1. Interrupt 1 Sense Control, oder 2) im Abschnitt 12.2.6 PCMSK2 – Pin Change Mask Register 2 ist beschrieben, wie Du die anderen Pinne für diesen PCI programmieren kannst. Es ist nicht schwer (sogar ich habs hingekriegt), musst halt ein bisschen durcharbeiten.
Viel Erfolg
Danke oberallgeier für die genaue Erläuterung, auch dir frohe Ostern...
lg
oberallgeier
12.04.2009, 16:35
Mist - ich versuche schon immer wieder diese automatischen Links auszutricksen - schreibe z.B. 5ervo (fünf ervo) für S ervo, damit nicht >> Servo << *) dasteht *gggg* - und nun habe ich diese automatische Verlinkung zu At mel - die ich garnicht wollte. Aber Du hast ja noch dieses "bei" dastehen, mit dem Link auf die Dok-Seite von At mel.
*) Anmerkung: .... da ich ja für ungewollt verlinkte Seiten nicht haften will *ggggg*.
Naja für die Umwandlungen kannst du ja nichts, dafür haften höchstens die Roboternetz Admins weil Sie diese [wissentlich] gesetzt haben...
lg manhunt
oberallgeier
13.04.2009, 18:36
Hallo Sportsfreund, manhunt,
wie kommst Du mit den Interrupts voran? Läuft schocn was?
Hi oberallgeier
Ja geschrieben hätte ich schon was nur fehlt mir Grad die Hardware es zu testen. (is a bissal schwer in den Osterfeiertagen was zu bekommen)
*/ALLES ohne gewähr und noch nicht getestet!!! */
#include <avr/io.h>
#include <avr/interrupt.h>
#define INTERN
#include "init.h"
#undef INTERN
#define START_PIN PINC
// Starting PIN, PINC5 or PCINT13
#define START PINC5
void init(void) {
PCICR |= (1<<PCIE1); //PCINT1 interrupt (for PCINT14...8
PCMSK1 |= (1<<PCINT13); // enables Interrupt trigger for PCINT13
return;
}
ISR(PCINT1_vect) {
if(!(START_PIN & (1<<START))) // For example do something if flag was falling....
RUN ^= 1; //Globale Variable
return;
}
edit: für andere um Kommentare und Defines erweitert
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.