Bits einlesen über PORT (dsPIC33fj12gp202)

Gast #3781934
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")
Gast
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.
Gast
@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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.