Forum: Mikrocontroller und Digitale Elektronik Bits einlesen über PORT (dsPIC33fj12gp202)


von Heos (Gast)


Lesenswert?

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

von San L. (zwillingsfreunde)


Lesenswert?

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")

von Max H. (hartl192)


Lesenswert?

Pin als Eingang und als Digitalen Pin konfiguriert? Als Analog 
konfigurierte Pins werde low eingelesen.

von Heos (Gast)


Lesenswert?

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.

von San L. (zwillingsfreunde)


Lesenswert?

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.

von Heos (Gast)


Lesenswert?

@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.

von San L. (zwillingsfreunde)


Lesenswert?

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.

von Heos (Gast)


Lesenswert?

Jop klappt alles einwandfrei, nochmals vielen Dank!

von San L. (zwillingsfreunde)


Lesenswert?

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
Noch kein Account? Hier anmelden.