Guten Tag, ich versuche bei meinem dsPIC33fj12GP202 über einen Pin Spannungspegel digital (einfach low=0 und high=1) einzulesen. Ich wollte dies für einen Pin so lösen: C-Code: (...) TRISBbits.TRISB1=1; //PIN als Input konfigurieren x=PORTBbits.RB1; //Wert des Pins speichern (...) Jedoch möchte er nicht das Bit was am Pin anliegt speichern bzw. speichert es als low ab. Das Ziel ist es einen 1-Wire-Sensor, dessen low jedoch etwas mehr als GND ist (weiß nicht was nun konkret low bzw high für den PIC bedeutet), auszulesen. Nur scheitert es an dem lesen des Pegels. Ich bin schon recht am verzweifeln und habe alle Register im Datasheet gecheckt. Mit freundlichen Gruß, Heos
Hallo Im register AD1PCFG kannst du einstellen ob ein Pin Analog oder Digital ist. Im Datenblatt steht: "The AD1PCFGL register has a default value of 0x0000; therefore, all pins that share ANx functions are analog (not digital) by defaul" Hast du dran gedacht den auf Digital umzustellen? Falls nein, mach das mal. Dann dürfte es funktionieren. Heos schrieb: > dessen low jedoch etwas mehr als > GND ist (weiß nicht was nun konkret low bzw high für den PIC bedeutet), > auszulesen. Nur scheitert es an dem lesen des Pegels. Low = Logische 0 = GND (Zumindest bei Standard Schaltungen mit einem uC - Nicht zu verwechseln mit bspw. "Lowpegel bei RS232")
Pin als Eingang und als Digitalen Pin konfiguriert? Als Analog konfigurierte Pins werde low eingelesen.
Ich habe nun folgendes gemacht:
AD1PCFGL=0xFF; //Das Register mit Bits vollgehauen
while(1){
LATBbits.LATB0=1;
if(PORTBbits.RB1==1){ //Testweise an nem Pin anlegen
LATBbits.LATB2=1;}
else{LATBbits.LATB2=0;}
}
Ergebnis: Es lag wirklich dran vielen Dank! Ich dachte es wäre umgekehrt
in dem Register und hab es auch so ausm Datasheet entnommen. Anscheinend
saß der Fehler jedoch vorm Computer.
Ich checke mal was der zu dem Pegeln des DS1820 meint.
Aber vielen Dank! Ich saß Stunden vor diesem Problem.
Max H. schrieb: > Pin als Eingang Als Eingang hat er ihn, siehst du ja an seinem Code. Bin mir aber nicht sicher ob es, neben der Tatsache dass er wohl als Analog definiert ist, auch ein Problem darstellt dass er den Pin als Input definiert und direkt danach abfragt. Ich weiss nicht wie das bei den neueren Controllern ist, mir ist aber etwas im Kopf dass man das bei den zumindest etwas älteren nicht direkt tun konnte. Da musste dann ein paar Takte gewartet werden. Vielleicht weiss ja hier noch einer mehr dazu.
@San Lue: Man muss paar Takte warten bis man den einlesen darf. Ich wollte den Pegel per UART in ASCII ausgeben. UART und senden funktioniert, jedoch bekomme ich den Wert vom DS1820 als binäre Zahl zugesendet. Ich wollte die Zahl mit printf ausgeben, jedoch macht der Compiler den hier: Mein Code-Schnipsel: #include "stdio.h" (...) printf("TEXT"); Compilermeldung: (...) c:\programme\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified Link step failed. ---------------------------------------------------------------------- Debug build of project `C:\Dokumente und Einstellungen\Heos\Desktop\PIC Projekte\1-Wire.mcp' failed. Preprocessor symbol `__DEBUG' is defined.
Heos schrieb: > Ich wollte den Pegel per UART in ASCII ausgeben. UART und senden > funktioniert, jedoch bekomme ich den Wert vom DS1820 als binäre Zahl > zugesendet. Natürlich kriegst du den als Binäre Zahl, wie auch sonst? UART kennt auch nur logikpegel, sprich 0 und 1. Zu deinem Problem: MPLAB -> Build options -> MPLAB LINK30 Das dürfte es aus der Welt schaffen. :) Aber nicht zuviel printf benutzen, das füllt dir den Speicher schneller als dir lieb ist! :P Aber solange das nur für den Test ist, geht das klar.
Heos schrieb: > Jop klappt alles einwandfrei, nochmals vielen Dank! Supi ! :) Kein Problem ! Wüsste ich blos soviel über AVR's wie über PIC's könnte ich in diesem Forum vielleicht auch endlich mal jemandem bei seinen uC Problemen helfen :P
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.