Hallo, ich beschäftige mich kürzlich mit dem PIC 24E USB Starterkit und habe erstmal versucht LEDs zum leuchten zu bringen. Dies hat auch funktioniert, nur das Abfragen der Taster funktioniert nicht wie gewünscht. Wie im Forum schon mal beschrieben kann es auch nix mit der "Analogpin-Falle" zu tun haben, da die PIN kein ANI sind, also digitale Ausgänge sein müssten. Bin Anfänger vermute mal, dass der Fehler einfach zu finden ist, aber ich komme nicht drauf :( Hier mal der kurze Code: #include <p24EP512GU810.h> #define OUTPUT 0 #define INPUT 1 #define LED_AN 1 #define LED_AUS 0 int main(void) { TRISDbits.TRISD0 = OUTPUT; LATDbits.LATD0 = LED_AN; Nop(); Nop(); Nop(); TRISDbits.TRISD6 = INPUT; // Taster auf INPUT setzen while (1) { if (PORTDbits.RD6 == 0) {LATDbits.LATD0 = LED_AUS;} else {LATDbits.LATD0 = LED_AN;} } } Laut Datenblatt sind die Taster wenn "idle: pulled high" und wenn "pressed: grounded". Ich hätte also erwartet, dass die LED blinkt und bei drücken des Tasters erlischt. Das Ergebnis ist, dass die LED GAR nicht leuchtet. Erst wenn ich die Anweisung in der Endlosschleife auskommentiere leuchtet SIe wieder. Gruss
Du musst es ja wissen...es sind also externe pull-ups? Ich kenne das board nicht. Hab aber auch keine große Lust mehr zu helfen
Sorry Alex, den Eintrag hat wohl irgend nen Witzbold geschrieben! Ich jedenfall nicht!
Ok, dann schau dir mal die CNPUx und CNPDx register an. Vielleicht musst du sie auch noch global aktivieren. Habe bisher nur einen einzigen PIC programmiert, dort war es nötig (pic12lf1501) Im Datenblatt solltest du ja alles finden
Gisti schrieb: > Erst wenn ich die Anweisung in der Endlosschleife > auskommentiere leuchtet SIe wieder. Welche Anweisung kommentierst du aus? Da deine Led ja vorher ging kann es nur am Eingang liegen Da sind beim Pic mehrere Funktionen multiplexed. Angewöhnt habe ich mir da erst sämtliche Funktionen zu prüfen ob Sie das einlesen als normalen Input verhindern. 1. Beim Taster auf RD6 sind das PMPD14 und CN15. 2. An RD6 am uP steht noch C3INB und siehr da: 3. C3INB ist lt Pinout description der 2 Eingang des comparators nummer 3 4. Comparatoren sind analoge Funktionen die nach power on und reset sinnvollerweise aktiv sind. 5. Also: prüfen ob comparator 3 disabled
OK vielen Dank schon mal! Am RD7 hängt in der Tat noch C3IN2-, also Comparator 3. Dies erklärt auch warum das Programm mit Taster RD13 reibungslos funktioniert, da dort kein Comparator angeschlossen ist. Den Comparator 3 disablen funktioniert mit dem COMPARATOR x CONTROL REGISTER CMxCON, wobei das CON Bit auf 0 gesetzt werden muss (also disabled). Wenn genau sähe jetzt der Programmcode aus? Wie gesagt bin Anfänger. Es muss ja in etwas dies hier implementiert werden: CM3CONBITS.CON = 0; Mit diesem Code leuchtet die LED wiederum gar nicht und erst wenn ich //if (PORTDbits.RD6 == 0) //{LATDbits.LATD0 = LED_AUS;} //else //{LATDbits.LATD0 = LED_AN;} in der Endlosschleife wieder auskommentiere leuchtet LED1 wieder. Wie gesagt mit LED3, also Taster RD13 funktioniert es wunderbar. Meine Frage also nach dem korrekten Code um den Komparator 3 (bzw. nur C2IN2-) zu disablen??? Muss ich wenn ich dieses Regsiter nutze noch Comparator.h includen? Danke!
Gisti schrieb: > OK vielen Dank schon mal! Gern > Am RD7 hängt in der Tat noch C3IN2-, also Comparator 3. Dies erklärt > auch warum das Programm mit Taster RD13 reibungslos funktioniert, da > dort kein Comparator angeschlossen ist. das ist bei PIC so > > Den Comparator 3 disablen funktioniert mit dem COMPARATOR x CONTROL > REGISTER CMxCON, wobei das CON Bit auf 0 gesetzt werden muss (also > disabled). ... Eine Vermutung die > Mit diesem Code leuchtet die LED wiederum gar nicht und erst wenn ich offenkundig falsch ist > > //if (PORTDbits.RD6 == 0) > //{LATDbits.LATD0 = LED_AUS;} > //else > //{LATDbits.LATD0 = LED_AN;} > > in der Endlosschleife wieder auskommentiere leuchtet LED1 wieder. da Sie ja vorher eingeschaltet wird. > > Wie gesagt mit LED3, also Taster RD13 funktioniert es wunderbar. Was zeigt das der C-code korrekt ist. Damit kann es nur mit dem Port Pin zu tun haben. > > Meine Frage also nach dem korrekten Code um den Komparator 3 (bzw. nur > C2IN2-) zu disablen??? Muss ich wenn ich dieses Regsiter nutze noch > Comparator.h includen? Nein, die Register werden imho in p24xyz.h vollständig beschrieben, alles andere ist unnötig. Der bessere Ansatz: Erstmal keine neue Baustelle aufzumachen. Dein Code funzt bei anderen Ports, das "disablen" hat so erstmal nichts gebracht und es liegt auch keine andere Funktion auf diesem Port. Da muss noch etwas anderes falsch sein. > > Danke! Gern, auch wenn das jetzt keine große Hilfe ist da ich den Pic24 nicht kenne.
Du musst den eingangs-Pin noch auf Digital schalten. http://ww1.microchip.com/downloads/en/DeviceDoc/70616g.pdf 11.2 The ANSELx register has a default value of 0xFFFF; therefore, all pins that share analog functions are analog (not digital) by default.
Hallo, Ich habe eben den Schaltplan vom Board angeschaut und habe eine Vermutung: Die Taster werden über einen weiteren Regler Ein und Aus geschaltet. Dieser Pin wird via PullDown abgeschaltet (Enable). Welche Spannung liegt bei deinen Tastern an? Meine Vermutung: Je nachdem, wie der Pin F1 initialisiert wird, kann es sein, dass dein Programm mal mit dem Eingang funktioniert und mal nicht. Da die Pins der Taster digital sind (hattest Du ja schon geschrieben => Analog-Falle), kann es sonst nur sein, dass die Probleme durch interne PullUp kommen, die ausgeschaltet wurden. Füge einmal in deinen Code ein, dass F1 eingeschaltet werden soll (digital-Output).
Vielen Dank bei Allen nochmal fr die freundliche Hilfe. Das manche PINs erst auf digital umgestellt werden müssen war mir durchaus beweusst. Da im Datenblatt bei RD6 und RD7 jedoch nichts von AN steht bin ich davon ausgegangen dass es sich um reine digital PINs handelt und erst bei der Durchfortsung der REGISTER MAP von PORTD bin ich auf ANSD7 bzw. ANSD6 gestossen. Funktioniert jetzt wie gewünscht. Letzte Frage: ich will gerne mit Delays arbeiten. z.B. Delay1KTCYx(1000) Dachte ich müßte nur include "delay.h" mit einbeziehen und es würde funktionieren. Leider meckert der COMPILER. Wie binde ich die Library richtig ein? Gruss
Gisti schrieb: > Letzte Frage: ich will gerne mit Delays arbeiten. > z.B. Delay1KTCYx(1000) C30 und XC16 kennen keine <Delay1KTCYx(1000)> (uns selbst wenn, ist das ne Krücke!) Die Takfrequenz muss definiert werden und die Lib eingebunden werden (unbedingt FCY vor der Lib definieren): #define FCY 8000000UL #include <libpic30.h> Es gibt 3 Funktionen __delay_32(unsigned long cycles) __delay_ms(unsigned int time) __delay_us(unsigned int time) Genaueres im "16-Bit Language Tools Libraries Manuaol"...
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.