Forum: Mikrocontroller und Digitale Elektronik AVR PCINT17-PCINT20 aktivieren


von Theater s. (kosti)


Lesenswert?

Hallo ich brauche mal wieder Hilfe,

bin vor kurzen mal wieder dazu gekommen meine Motorsteueung weiter zu 
entwickeln.

Ich habe 2 Liniarantrieb (M1, M2) , bei welchen jeweils 2 Hall sensoren 
zur bestimmung der Schrittwiete ausgelesen und gezählt werden.

Benutze eine Atmega88

Mein Problem ist das der der M1 an PIN INTO(PD2) und PCINT17(PD1) hängt.
Der Motor 2 benutzt für die Hall sensoren PIN INT1(PD3) und 
PCINT20(PD4).

INTO und INT1

kann ich mitlerweile super auslesen.
1
void count_HALLSENSOR () 
2
{
3
//M1_H1--> PD2; M1_H2-->PD1; M2_H1-->PD4; M2_H2-->PD3
4
hall_count_buff_1 = 0x00;
5
hall_count_buff_2 = 0x00; 
6
7
EICRA |= (1<<ISC11) | (1<<ISC01);   // INT1(PD3)+INT0(PD2) on falling edge
8
EIMSK |= (1<<INT1) | (1<<INT0);    // Enable INT1+INT0
9
10
}

Aufgerufen habe ich es über.
1
//ISR(INT0_vect)  { hall_count_buff_1++; }  //  INT0 (M1_H1-->PD2)
2
//ISR(INT1_vect)  { hall_count_buff_2++; }  //  INT1 (M2_H2-->PD3)

Meine Frage wie nutze ich die PCINT17 und PCINT20

meine Anfänge:
1
void count_HALLSENSOR_2 () 
2
{
3
hall_count_buff_1 = 0x00;
4
hall_count_buff_2 = 0x00; 
5
6
7
PCICR |= (1<<PCIE2);      //Anschalten
8
PCMSK2 |= (1<<PCINT17)|(1<<PCINT17);      //Definiren
9
}

Bloss beim Aufruden mekert er rum.
1
ISR(PCINT17_vect)  { hall_count_buff_1++; }  //  INT0 (M1_H1-->PD2)

Vielen Danke für eure Hilfe im voraus

von Matthias L. (Gast)


Lesenswert?

>Bloss beim Aufruden mekert er rum.

Steht doch in der Fehlermeldung, das der Wert in Zeile 42 um 42 zu klein 
ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matthias Lipinsky schrieb:
> Steht doch in der Fehlermeldung, das der Wert in Zeile 42 um 42 zu klein
> ist.

Hier passt Douglas Adams wirklich nicht.

Theater sucht schrieb:
> PCMSK2 |= (1<<PCINT17)|(1<<PCINT17);      //Definiren

Du hast aber hier zweimal PCINT17? Und das hier
1
ISR(PCINT17_vect)  { hall_count_buff_1++; }  //  INT0 (M1_H1-->PD2)
gibt es gar nicht. Es gibt nur
1
ISR(PCINT2_vect)
2
{
3
}
D.h. nur jede Gruppe von PC Interrupts hat einen Vektor, nicht jeder 
einzelne Pin.

von Peter D. (peda)


Lesenswert?

Theater sucht schrieb:
> Bloss beim Aufruden mekert er rum.

Ein Compiler "mekert" nicht, er gibt eine Fehlermeldung aus.
Und es ist überhaupt nicht zielführend, diese vor uns geheim zu halten. 
Schonmal was von Copy&Paste gehört?

von Theater s. (kosti)


Lesenswert?

""PCINT2_vect"


Das wars, vielen Dank für die schnelle und Kompetente Hilfe.
Sorry das nächste mal werde ich die Fehlermeldung mit Kopieren.

Danke

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.