Hallo, ich bin ziemlich neu in µC-Programmierung, darf mich aber in PICs einarbeiten. Ich habe das MPLAB, PICDEM 2 Plus und CCS Compiler. Die mirgelieferten Testprogramme laufen, LCD-Display und LED kann ich ansteuern. Leider klappt der externe Interrupt an RB0 nicht. Die routine wird scheinbar gar nicht durchlaufen. Zur Vereinfachung habe ich das Programm minimal reduziert, sollt aber so doch laufen, oder? An B1 und B2 sind LED , an B0 ist ein Taster angeschlossen Code: #include<18F452.h> #fuses HS,NOWDT #use delay(clock=4000000) #include<display.c> boolean a = 0; #INT_EXT void ext_isr(void) { output_high(PIN_B2); a = !a; } void main(void) { enable_interrupts(INT_EXT); enable_interrupts(GLOBAL); while(1) { if(a) output_high(PIN_B1); else output_low(PIN_B1); } } Hat jemand einen Rat für mich? Vielen Dank! Gruss Christoph
intern ist nix aktiviert und extern auch nichts dran. ich habe die Verschaltung auf dem PICDEM- bord genutzt.
Wie weisst Du, dass die ISR nicht aufgerufen wird? Hast Du einen ICD2 zum Debuggen? Ich kenne zwar CCS nicht, aber müsstest Du die LED-Anschlüsse nicht als Output konfigurieren, irgendwie mit TRIS? Und Achtung! Dein Taster wird prellen und die ISR wird wohl sogar mehrmals durchlaufen. Severino
Beim CCS kann man zwischen "manual I/O" und "auto I/O" wählen (heisst da aber anders). Beim auto-IO generiert der CCS die TRIS-Befehle gleich mit.
Achso, ich sehe gerade deinen Oszillator: Brauchst du bei 4MHz wirklich HS, oder nimmst du nicht besser XT?
Ich kenne das PICDEM Board nicht, aber Pull-UP Wiederstände solltest Du schon haben. Wenn das PICDEM keine externen hat, am besten die internen aktivieren.
Auf dem PICDEM 2 Plus ist für RB0 ein Pullup bestückt. Aber ist ev. Jumper J6 nicht gesteckt? Der schliesst die Leds and GND an. Und funktioniert das wirklich mit dem "auto I/O". Bei so Automatismen habe ich immer etwas gesunde Skepsis (Vertrauen ist gut, Kontrolle ...) Severino
Hi Das "auto-I/O" sollte in eurem Fall aktiviert sein. Deaktivieren tust du es mit der Zeile.
1 | #use fast_IO;
|
Ich rate dir aber stark davon ab, dem CCS-Compiler die Steuerung der Tris-Register zu überlassen. Also füg die oben genannte Zeile ein und setze die Tris-Register immer selbst. Denn dann weist du auch immer welchen Zustand ein Pin gerade hat. Ich persönlich benutze auch sehr selten die CCS-Internen Befehle, sondern setzte meist die Register selbst. Dazu muss man sich zuerst zwar eine eigene Header mit den diversen Register Adressen bauen, aber dadurch kann man sich dann acuh einiges erleichtern (zb.: Pin toggeln). Hat bei dir das LED-Blink-Programm funktioniert? Achja.. wenn du LVP nicht unbedingt brauchst, solltest du es ausschalten oder sonst den entsprechenden Pin auf Masse ziehen. Kennst du die Seite von Sprut? Sie ist zwar für ASM-Programmierung, aber dort sind sehr viele nützliche und interessante PIC-Spezifische Sachen erklärt. www.sprut.de WEiters gibts auf der Seite von Fernando Heitor ein Tutorial für den CCS-Compiler, sowie ein sehr empfehlenswertes Forum(wo man als PIC Programmierer nicht immer dumm angemacht wird ;-)) http://www.fernando-heitor.de/ Und hier gleich ein Link zum externen Interrupt: http://www.fernando-heitor.de/component/option,com_openwiki/Itemid,123/id,tutorials:ccs:kapitel_2/ mfg SChoasch
Ich habe mit eurer Hilfe weiter probiert: Den Jumper J6 habe ich entfernt und statt der Ausgabe auf die LED (PIN_B1) habe ich die Ausgabe auf den Buzzer (PIN_C2) gelegt. Das funktioniert! Sobald ich dann den Jumper J6 wieder stecke, sehe ich, dass meine Kontroll-LED (PIN_B2) ebenfalls an ist, aber erst bei dann wieder gestecktem J6. Die ISR wurde also durchlaufen und mein Buzzer hat ja auch auf die Taste reagiert. Die LEDs an Port B mit der Beschaltung machen da die Probleme auf dem PICDEM 2 Plus. Danke fuer die Hilfe und die Link-Infos! Grüsse Christoph
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.