Benötigen Sie Hilfe mit 16F887 und Microchips 44-Pin-Demoplatine

Ich brauche Hilfe bei der Verwendung eines PIC16F887 und der mitgelieferten 44-Pin-Demoplatine von Microchip. Es wird mit einem PicKit2 programmiert.

Auf diesem Demoboard ist ein Taster so mit RB0 verbunden, dass der Pegel am Pin die ganze Zeit hoch ist und durch Drücken des Tasters der Pegel niedrig wird. Der Taster dient dazu, ein externes Interrupt-Signal zu simulieren. Ich versuche, mit Interrupts auf diesem Chip zu experimentieren, kann aber keine Statusänderung an diesem Pin lesen.

Ich habe einen einfachen Code, der den Status von RB0 testet und RD0 entsprechend einstellt. Es passiert jedoch nichts, egal ob die Taste gedrückt wird oder nicht.

Kann jemand hier etwas falsch sehen? Ich weiß, dass der IC selbst in Ordnung ist, da ich andere Programme ausführen kann, die diesen Eingangspin nicht verwenden.

Hier ist ein PDF auf dem Demoboard, falls jemand interessiert ist. http://ww1.microchip.com/downloads/en/devicedoc/41296b.pdf

#include <pic16f887.h>
#include <htc.h>

__CONFIG (0x20E4);
__CONFIG (0x2EFF);

void main(void){

 int i;
 int k;
     TRISB = 0xff; //set PORTB as inputs
     TRISD = 0x00;        // Set PORTD as an Output
     while(1)
 {
    RD0=RB0;
 }

Ich habe die folgenden Änderungen gemäß der Lösung von Dave unten ohne Änderung vorgenommen.

void main(void){

 int i;
 TRISB = 0xff; //set PORTB as inputs
 TRISD = 0x00;        // Set PORTD as an Output
 while(1)
 {
     i=PORTB;
     PORTD=i;
 }

}

Wenn Sie die Verbindung entfernen, bedeutet das, dass nichts mit dem Pin verbunden ist? In diesem Fall kann der gelesene Wert unbestimmt sein, es sei denn, es gibt einen internen Pullup- oder Pulldown-Widerstand oder ein vergleichbares Verhalten, das im Design der Eingangsstufe enthalten ist. Versuchen Sie, einen Widerstand (beliebiger Wert zwischen 1K und 10K) zwischen einen Eingangsstift und VCC zu legen und dann einen Draht zu berühren und zu entfernen, der den Eingangsstift mit Masse verbindet. Wenn das Programm funktioniert, sollte sich der Ausgang, in den Sie es kopieren, sofort ändern, da der Stift in beiden Zuständen angesteuert und nicht schwebend gelassen wird.
Sie haben natürlich recht. das hat funktioniert. Ich werde das Problem aus meinem ursprünglichen Thread löschen.

Antworten (2)

Ich habe meine Antwort auf diese Frage gefunden. Ich musste ANSEL und ANSELH auf 0 setzen, um digitale E/A zu ermöglichen

Danke für alle Vorschläge.

Großartig! Schön, dass es funktioniert. Sie können jedoch immer noch auf dieses RMW-Problem stoßen, also denken Sie daran.
@Michael, akzeptiere deine eigene Antwort, damit die Frage aus der Liste der unbeantworteten Fragen entfernt wird.

Anstatt Bit 0 auf Port B in Bit 0 auf Port D zu schreiben, schreiben Sie den gesamten Port B in eine Variable und schreiben Sie dann die Variable in Port D. Wenn dies funktioniert, liegt es wahrscheinlich am Problem "Lesen, Ändern, Schreiben". Ich hatte ein ähnliches Problem und mir wurde durch diese Antwort geholfen: https://electronics.stackexchange.com/a/7686/1900

Das hat nicht geholfen. Änderungen wie oben angegeben ohne Änderung vorgenommen.
Entschuldigung, es ist ein Jahr her, seit ich mich mit diesem Problem befasst habe. Nachdem ich jedoch nach altem Code gesucht hatte, stellte ich fest, dass ich verschiedene Datentypen verwendete. Sie können dies versuchen, wenn Sie dazu geneigt sind: Ändern Sie "int i;" zu "statisch unsigned char i;" in Ihrem neuen Codesegment. Tut mir leid, wenn das nicht funktioniert.
Nein das hat auch nicht funktioniert. Ich glaube, mit meinem Board stimmt etwas grundlegend nicht. Danke aber für die Hilfe. Keine schlechten Vorschläge.
Gern geschehen. Tut mir leid, ich konnte nicht helfen. Ich bin mir nicht sicher, aber vielleicht möchten Sie dort in Ihren _config( )-Code schauen. Es ist ziemlich ungewöhnlich, dort nur einen Hex-Wert zu haben, anstatt etwas, das ein Mensch leichter lesen kann. Vielleicht ist das Mikro nicht richtig eingestellt. Wie auch immer, ich bin sicher, jemand anderes hier wird dir erfolgreicher helfen. Wenn Sie das RMW-Read-Modify-Write-Problem genauer verstehen möchten, fand ich dies die zugänglichste und vollständigste Erklärung: cornerstonerobotics.org/curriculum/lessons_year2/…
Als nächstes werde ich mir die _config-Register ansehen. Aber schau dir doch mal mein neustes Update an. Etwas wirklich sehr seltsames geht vor sich.
Ich denke, zwei Aufrufe von _config() werden nicht den Effekt haben, den Sie wahrscheinlich suchen. Entweder nur der erste oder der zweite funktioniert. Aber das musst du noch genauer untersuchen. Was Ihr Experiment betrifft, bin ich mir nicht sicher, was ich denken soll, aber ist es möglich, dass am PORTD-Pin eine große Kapazität vorhanden ist, die einen langsamen Spannungsabfall verursacht?