Hallo, in einem anderen Thread hatte ich ja gefragt, wie ich die Geschwindigkeit eines Motors mit einem Taster regulieren kann. Also ich wollte irgendwelche PWM Werte haben und jeder Tastendruck sollte zum nächsten Wert wechseln. Dann hat mich jemand auf diesen Thread hingewiesen: Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." Habe dann also den Code übernommen und wollte ihn auf meinen Attiny flashen, aber dabei bekam ich folgende Fehler: Error 5 'PCIE' undeclared (first use in this function) Error 1 'PCIF' undeclared (first use in this function) Message 3 each undeclared identifier is reported only once for each function it appears in C/User.... Message 2 in definition of macro 'BIT' Message 4 in definition of macro 'BIT' Message 6 in definition of macro 'BIT' Kann mir jemand erklären, was diese zwei Fehler und die anderen Meldungen bedeuten? Scheinen auf jeden Fall wichtig zu sein, denn wenn ich die beiden Zeilen auskommentiere, dann läuft das Ganze nicht. :-D Und brauche ich in der Schaltung eigentlich zwangsläufig einen Kondensator wenn ich ein MOSFET benutze?
Du meinst diese beiden Zeilen: GIFR = BIT(PCIF); // flag löschen GIMSK |= BIT(PCIE); // PCINT PORTB zulassen Dazu muß der richtige µC eingestellt sein, in Deinem Fall also der ATtiny2313. Dann sind diese Bits auch bekannt.
m.n. schrieb: > Du meinst diese beiden Zeilen: > GIFR = BIT(PCIF); // flag löschen > GIMSK |= BIT(PCIE); // PCINT PORTB zulassen > > Dazu muß der richtige µC eingestellt sein, in Deinem Fall also der > ATtiny2313. Dann sind diese Bits auch bekannt. Okay, mal eine doofe Frage: Wo finde ich jetzt das, was ich stattdessen dort eintragen muss? Die Hilfe vom Atmel Studio bringt nichts und im Datenblatt meines Attinys finde ich auch irgendwie nichts.
Max Muster schrieb: > m.n. schrieb: >> Du meinst diese beiden Zeilen: >> GIFR = BIT(PCIF); // flag löschen >> GIMSK |= BIT(PCIE); // PCINT PORTB zulassen >> >> Dazu muß der richtige µC eingestellt sein, in Deinem Fall also der >> ATtiny2313. Dann sind diese Bits auch bekannt. > > Okay, mal eine doofe Frage: Wo finde ich jetzt das, was ich stattdessen > dort eintragen muss? Gar nichts anderes. Die Bits heissen beim 2313 genau gleich wie beim 25. Du musst nur bei der Generierung des Projekts im Atmel Studio den richtigen Prozessortyp auswählen.
> Gar nichts anderes. > Die Bits heissen beim 2313 genau gleich wie beim 25. > > Du musst nur bei der Generierung des Projekts im Atmel Studio den > richtigen Prozessortyp auswählen. Habe doch den Richtigen ausgewählt, oder?
Welches Studio benutzt du genau? Hintergrund: Ich hab den Code mal probehalber in mein (schon älteres) Studio 6 geworfen. Und kriegte prompt einen undeclared identifier für GIFR. Eine Kontrolle im Include File 'iotn2313.h' erbrachte dann, dass GIFR jetzt EIFR heisst. Warum auch immer. Im Datenblatt heisst das Register immer noch GIFR. Die Namen 'PCIE' und 'PCIF' existieren aber.
Karl Heinz schrieb: > Welches Studio benutzt du genau? > > Hintergrund: > > Ich hab den Code mal probehalber in mein (schon älteres) Studio 6 > geworfen. > Und kriegte prompt einen undeclared identifier für GIFR. > > Eine Kontrolle im Include File 'iotn2313.h' erbrachte dann, dass GIFR > jetzt EIFR heisst. Warum auch immer. Im Datenblatt heisst das Register > immer noch GIFR. > > Die Namen 'PCIE' und 'PCIF' existieren aber. Ich benutze das Atmel Studio 6.2. Also soll ich jetzt GIFR durch EIFR ersetzen?
Max Muster schrieb: > Ich benutze das Atmel Studio 6.2. > Also soll ich jetzt GIFR durch EIFR ersetzen? ? Deine Fehlermeldung handelt nicht von GIFR. Deine Fehlermeldung handelt von den Namen PCIE und PCIF. Wie wärs mal mit ein bischen nachdenken und nicht nur hirnlos alles übernehmen? Kommentier die Zeile mal aus, damit das Programm übersetzt wird. Im Projektbaum taucht dann unter 'Dependencies' eine Datei 'iotn2313a.h' auf. Die kannst du aufmachen und da drinn müsste sich eigentlich PCIE und PCIF wiederfinden. Der entsprechende Abschnitt sieht bei mir so aus
1 | ....
|
2 | #define OCIE1B 5
|
3 | #define OCIE1A 6
|
4 | #define TOIE1 7
|
5 | |
6 | #define EIFR _SFR_IO8(0x03A)
|
7 | #define PCIF 5
|
8 | #define INTF0 6
|
9 | #define INTF1 7
|
10 | |
11 | #define GIMSK _SFR_IO8(0x03B)
|
12 | #define PCIE 5
|
13 | #define INT0 6
|
14 | #define INT1 7
|
15 | |
16 | #define OCR0B _SFR_IO8(0x03C)
|
17 | #define OCR0_0 0
|
18 | #define OCR0_1 1
|
19 | #define OCR0_2 2
|
20 | #define OCR0_3 3
|
21 | #define OCR0_4 4
|
22 | ....
|
Wenn du in deinem Include File das nicht findest, dann such zb nach 'GIMSK'. So wie hier, musste dann direkt darunter die Definition für 'PCIE' zu finden sein. Wenn du raus hast, was da los ist, korrigierst du den Code entsprechend und entfernst die Kommentare wieder, die du gesetzt hast um compilieren zu können.
:
Bearbeitet durch User
Karl Heinz schrieb: > Wenn du raus hast, was da los ist, korrigierst du den Code entsprechend > und entfernst die Kommentare wieder, die du gesetzt hast um compilieren > zu können. Das wird wohl noch etwas dauern. Habe den Abschnitt gefunden, aber bisher sagt mir das noch gar nichts. :-D
Max Muster schrieb: > Karl Heinz schrieb: > >> Wenn du raus hast, was da los ist, korrigierst du den Code entsprechend >> und entfernst die Kommentare wieder, die du gesetzt hast um compilieren >> zu können. > > Das wird wohl noch etwas dauern. Habe den Abschnitt gefunden, aber > bisher sagt mir das noch gar nichts. :-D Und? Wie sieht er aus? Welche Namen werden benutzt?
Karl Heinz schrieb: > Max Muster schrieb: >> Das wird wohl noch etwas dauern. Habe den Abschnitt gefunden, aber >> bisher sagt mir das noch gar nichts. :-D > > Und? Wie sieht er aus? Welche Namen werden benutzt?
1 | #define EIFR _SFR_IO8(0x03A)
|
2 | #define GIFR _SFR_IO8(0x03A)
|
3 | #define PCIF1 3
|
4 | #define PCIF2 4
|
5 | #define PCIF0 5
|
6 | #define INTF0 6
|
7 | #define INTF1 7
|
8 | |
9 | #define GIMSK _SFR_IO8(0x03B)
|
10 | #define PCIE1 3
|
11 | #define PCIE2 4
|
12 | #define PCIE0 5
|
13 | #define INT0 6
|
14 | #define INT1 7
|
Ist das der Abschnitt, den du meinst?
ATtiny2313/V http://www.atmel.com/images/doc2543.pdf ATtiny2313A ATtiny4313 http://www.atmel.com/images/doc8246.pdf Es gibt Unterschiede zwischen den beiden Datenblättern, eben auch beim Interrupt-Flagregister. Beim ATtiny2313A heist es GIFR, beim anderen EIFR.
Norbi schrieb: > ATtiny2313/V > http://www.atmel.com/images/doc2543.pdf > > ATtiny2313A > ATtiny4313 > http://www.atmel.com/images/doc8246.pdf > > Es gibt Unterschiede zwischen den beiden Datenblättern, eben auch beim > Interrupt-Flagregister. Beim ATtiny2313A heist es GIFR, beim anderen > EIFR. GIFR habe ich ja so im Code, aber das geht ja eben nicht. Bzw. was muss dann in die Klammern bei GIFR?
Max Muster schrieb: > Norbi schrieb: >> ATtiny2313/V >> http://www.atmel.com/images/doc2543.pdf >> >> ATtiny2313A >> ATtiny4313 >> http://www.atmel.com/images/doc8246.pdf >> >> Es gibt Unterschiede zwischen den beiden Datenblättern, eben auch beim >> Interrupt-Flagregister. Beim ATtiny2313A heist es GIFR, beim anderen >> EIFR. > > GIFR habe ich ja so im Code, aber das geht ja eben nicht. Bzw. was muss > dann in die Klammern bei GIFR? Nochmal GIFR ist nicht dein Problem. Wie man im Ausschnitt (und Datenblatt des Tiny2313A) sehen kann, gibt es nicht einfach nur ein PCIE, sondern ein PCIE0 PCIE1 und PCIE2 Auch gibt es nicht wie beim Tiyn2313 ein PCIF, sondern ein PCIF0, PCIF1, PCIF2 Aber ehrlich gesagt hab ich jetzt auch keine Lust den Code zu analysieren und das Datenblatt zu studieren, welcher Interrupt jetzt für den Pin mit dem Taster zuständig ist. Das darf ruhig der 'Taster werden per Interrupt abgefragt'-Verfechter tun.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.