PORTA als analoger Input (PIC16F887)

OP #3305377
Lesenswert?

Hallo, ich brauche mal wieder eure Hilfe ^^

Ich habe ein Thermometer gebaut mit einer Ausgabe an fünf 
7-Segment-Anzeigen.
Die Hardware habe ich getestet und sie funktioniert einwandfrei.

Allerdings kann mein PIC16F887 die analogen Eingänge, die ich an PORTA 
angeschlossen und programmiert habe nicht lesen bzw. verarbeiten.
Da muss irgendwas in der Konfiguration fehlgeschlagen sein.
Ich habe die Spannungen mit einem Oszilloskop nachgemessen und kann 
sicherstellen, dass +5V an den Pins von PORTA anliegen.
Ich habe das Datenblatt und andere Internetseiten durchgelesen aber 
nichts der vorgeschlagenen Lösungen klappt.

Anbei mein C-Programm, dass ich mit MPLAB und dem Compiler CC5X 
geschrieben habe.
PORTE = 3 LEDs
PORTD = 7-Segment-Anzeigen ansteuern
PORTC = Zeichen der 7-Segment-Anzeige

Bei der switch-case Abfrage erhalte ich den default-Befehl.

Vielen Dank schonmal für eure Hilfe.
Angehängte Dateien:
OP #3305415
Lesenswert?

Chris B. schrieb:
> OK, PortA ist auf Analog geschaltet.
> Wenn du mit "a = PORTA" diesen einliest, dann steht in "a" 0x00 drinnen.
> -->> Datenblatt,, PortA:
> <...Pins configured as analog inputs will read ‘0’....>
> Oder was erwartest du??

Oh mein Fehler, ich habe vergessen zu erwähnen, dass ich am PORTA vier 
Schalter eingebaut habe.
Und mit dem switch-case-Befehl würde ich dann gerne verschiedene 
Programme aufrufen.
An den Pins von PortA messe ich auch ca 5V Spannung. Der PIC reagiert 
darauf aber nicht.
#3305428
Lesenswert?

Dann solltest du aber PORTA - oder zumindest die Pins mit den 
angeschlossenen Schaltern - auf DIGITAL und nicht auf ANALOG stellen.
Denn wie schon oben zitiert, werden bei einem "Port read" die als ANALOG 
definierten Eingänge als "0" gelesen - egal welche Spannung da anliegt.

Ein "switch(PORTA)" liest auch nur den Port ein, also ändert das nichts!
OP #3305559
Lesenswert?

Chris B. schrieb:
> Und wiederum KEIN Wunder ;-)
> In ANSEL steht nach einem Reset 0xFF drinnen.
> Um den Port auf DIGITAL zu schalten musst du in ANSEL 0x00 schreiben!
> Datenblatt lesen - Kapitel 3 !!
>
> Ausserdem dürfte "PORTA = a" etwas verdreht sein...

Danke erstmal für deine Mühe ;D

Also ich habe jetzt in Ansel 0x00 geschrieben und den PORTA=a Befehl 
rausgelöscht. Das Datenblatt habe ich durchgelesen
Nachwievor liest der PIC leider nicht die Eingänge ein.

Das Datenblatt habe ich mehrmals durchgelesen, aber laut dem Satz dachte 
ich man kann die Eingänge auch analog nutzen: "The user should ensure 
the bits in the
TRISA register are maintained set when ->using them as
analog inputs<- ."

Ich hoffe ich habe deine Ratschläge jetzt nicht missverstanden. Ich habe 
das Gefühl ich steh teilweise auf dem Schlauch. Falls doch wäre es nett, 
wenn du direkt im C-Code die falschen Befehle/Direktiven korrigierst :D



PS: Die ANSELH und TRISB Befehle spielen erstmal noch keine Rolle. Aber 
später soll PORTB auch als Eingang dienen. Darum schreib ich sie 
schonmal hin um dann in Zukunft nicht das gleiche Problem nochmal zu 
haben^^
Angehängte Dateien:
#3305582
Lesenswert?

Die Initialisierung ist korrekt.

Aber: du hast 4 Schalter an deinem PortA hängen. Was ist mit den 
restlichen 4 Pins? Sind die auf GND, auf +5V oder hängen die in der 
Luft.

Also: PortA einlesen, die Bits an den die 4 Schalter hängen Maskieren 
(UND-Verknüpfen). Denn wenn auch nur einer der nicht benutzten Pin eine 
"1" liefert, werden deine "case"-Bedingungen (0...7) nie erfüllt.
OP #3305626
Lesenswert?

Chris B. schrieb:
> Die Initialisierung ist korrekt.
>
> Aber: du hast 4 Schalter an deinem PortA hängen. Was ist mit den
> restlichen 4 Pins? Sind die auf GND, auf +5V oder hängen die in der
> Luft.
>
> Also: PortA einlesen, die Bits an den die 4 Schalter hängen Maskieren
> (UND-Verknüpfen). Denn wenn auch nur einer der nicht benutzten Pin eine
> "1" liefert, werden deine "case"-Bedingungen (0...7) nie erfüllt.

An RA6/RA7 ist mein Quartz und an RA4 ein Pull-Up. Ich nehme Ra0 - Ra3 
her.
Aber trotz maskieren und löschen der vier höherwertigen Bits erhalte ich 
wieder den "default"-Befehl.
Es ist wie verhext ;(
Angehängte Dateien:
OP #3305872
Lesenswert?

Chris B. schrieb:
> .....a = PORTA & 0x0F;.....
> Und welchen Zustand hat RA3??
> Ist der "0"?? Denn nur dann trifft case 0: ... case 7: zu!

Ja, der ist 0V.
Ich werd Wohl oder Übel noch einige Pull-Ups einlöten müssen auch wenn 
dadurch meine Platine verunstaltet wird -.-.
Nachdem ich die Pins mit ANSEL=0x00 auf digital geschalten habe, führt 
das Störsignal beim Messen trotz 1:10-Tastkopf nun zu einem Umschalten.
Darum wollte ich auch ursprünglich analoge Eingänge weil da der 
Spannungsbereich, in dem der PIC noch ein Hgh-Signal erkennt, größer ist 
soweit ich weiß.
Nächstes Mal muss ich das Datenblatt vorher genau durchlesen, aber 
darauf wäre ich im Traum nicht gekommen, dass manche PORTs einfach nicht 
als analoge Eingänge nutzbar sind.

Hoffentlich klappt es dann besser.
#3305894
Lesenswert?

>Nächstes Mal muss ich das Datenblatt vorher genau durchlesen, aber
>darauf wäre ich im Traum nicht gekommen, dass manche PORTs einfach nicht
>als analoge Eingänge nutzbar sind.

Die sind als Analoge Eingänge nutzbar. Dazu musst den den internen ADC 
aber konfigurieren und regelmäßig samplen lassen.

Die Sache ist die: Wenn du Taster an Ports anschließt, dann sind das 
digitale Signale. Ergo brauchst du die Eingänge im digitalen Modus.

Und gib uns mal einen Schaltplan. Wenn die Schalter den Pegel nicht 
halten können, läuft was schief. Und zwar nicht im PIC.
OP #3305950
Lesenswert?

Ich kann euch leider bloß eine Schaltskizze in JPG.-Format geben. Ich 
habe sie zwar mit Eagle entworfen aber auf diesem PC habe ich Eagle 
leider nicht.
Da ich etliche Bauteile aus der "Restekiste genommen habe, waren sie 
nicht in der Bibliothek und ich habe danach noch diese Sachen 
aufzeichnen müssen^^
Angehängte Dateien:
OP #3307048
Lesenswert?

Sebastian H. schrieb:
> S1 ist wahrscheinlich gemeint.
>
> Andere Frage: Warum nimmst Du ein 8051 als Bauteil (und hast den Namen
> geändert) und keinen aus der Microchip-Bibliothek?

Den Plan habe ich vor paar Monaten, als ich noch nicht wusste, dass man 
die Bauteilbibiliothek erweitern kann, mal skizzenhaft entworfen und 
jetzt wieder Zeit gefunden weiterzuarbeiten.

Die Pull-Downs und das Konfigurieren von PORTA als digitaler Input waren 
letztendlich die Lösung.
Danke für eure Hilfe :D

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren