Forum: Mikrocontroller und Digitale Elektronik PIC16F887 HILFEE Pull up


von Wichtig (Gast)


Lesenswert?

Hallo,

mache grade eine schaltung mit pic16f887
doch ich kann nicht die pull up widerstände einschalten!
also schalte die an aber habe nicht 5V liegen an dem PIN
kann mir jemand weiter helfen
wei0 echt nicht weiter

von holger (Gast)


Lesenswert?

>kann mir jemand weiter helfen

Der Hellseher an der nächsten Strassenecke kann das wohl.
Kleb doch einfach extern Pullups dran;)

von Johannes R. (johannes_r29)


Lesenswert?

Quelltext?

Auch in die richtige Bank vorher gewechselt?

MFG Johannes

von Ottmar K. (wil1)


Lesenswert?

Also im Datenblatt steht:
The weak pull-up is automatically turned off when the port
pin is configured as an output.
Die PullUp können also nur aktiviert werden wenn die/der PortB-Pin(s= 
als Eingang konfiguriert ist.

Also mit
banksel TRISB
movlw   0x0F
movwf   TRISB
banksel OPTION_REG
bcf     OPTION_REG,7
banksel PORTB        ;zurüch zu bank 0
müsste doch das Umschalten auf die pullUps an den Inputs funktionieren.
mfG Ottmar

von Wichtig (Gast)


Angehängte Dateien:

Lesenswert?

jetzt geht nur die  1.spalte, obwohl alle bin 5V haben also Pull ab ist 
eingeschaltet!
bitte guckt mal alle rüber

von Wichtig (Gast)


Lesenswert?

Also zur funktion nochmal:

es  soll eine tastaturabfrage
Tastatur ist mit hilfe litzen  an
RBa0- RBA2 und  an
RB0-RB3, wo auch pull ab ist
angeschlossen.

ausgabe soll über eine led anzeige gehen
Die ist an PortD angeschlossen.

Das ist meine erste projekt und  habe wirklich keine ahnung und bin am 
durchdrehen!
bitte wirklich um hilfe!

An port B ist  mein 5V vorhanden!

von Wichtig (Gast)


Lesenswert?

Kannst du mal  auf mein asm. rüber gucken?!? bitte

von Johannes R. (johannes_r29)


Lesenswert?

Nimm für den Quelltext bitte einen Dienst ala pastebin, Bilder sind für 
sowas nicht gut geeignet, denn hier kann man nicht schön scrollen 
geschweige denn etwas zitieren bzw. markieren.

Bei Zeile 7 kann etwas nicht stimmen, du lädst 0xFF rein willst aber nur 
4 Pins als Eingang setzen (laut Kommentar), du setzt hier aber alle Pins 
als Eingang, wobei diese sowieso schon als Eingang gesetzt sind (war 
zumindestens beim 16F84 so). Das gleiche machst du später noch einmal.

von Michael S. (rbs_phoenix)


Lesenswert?

Also es sieht zu Anfang schon etwas wirr aus...

Zuerst gehst du zur bank 1 und machst alle PORTD als Ausgang. Dann gehst 
du zu Bank0 und setzt die Ausgänge auf 0. Dann gehst du wieder zu Bank 1 
und machst alle PORTB auf Eingang, wechselst wieder zu bank0 und danach 
gleich wieder zurück auf bank1, überschreibst das vorher gesetzte TRISB 
register. Dann "wechselst" du zu Bank1, wo du aber schon bist. Schaltest 
die Pullups ein, wechselst zu Bank0, gleich danach zu Bank3, Bank1, 
Bank0, Bank1 (hier schreibst du 0xFF ins W-Register aber machst danach 
nichts mit), Bank3...

Wieso nicht so:
1
Banksel TRISB      // Bank1
2
movlw 0xFF
3
movwf TRISA        // Ich denke so sollte das sein, 
4
                      wobei dann dein Kommentar nicht stimmt
5
movlw 0x0F
6
movwf TRISB
7
clrf TRISD
8
bcf OPTION_REG, 7
9
clrf IOCB
10
11
Banksel ANSEL      // Bank3
12
clrf ANSEL
13
clrf ANSELH
14
15
Banksel PORTB
16
clrf PORTA         // Bringt bei Eingängen nicht viel
17
clrf PORTB
18
clrf PORTD

Später kannst du das ganze "banksel PORTB" und "banksel PORTD" auch 
weglassen, weil das alles in der gleichen Bank ist...

von Wichtig (Gast)


Angehängte Dateien:

Lesenswert?

Also im moment funktioniert alle spalten doch

-wenn ich egal welche zahl in der selben zeile drücke leuchten immer die 
gleichen leds!

Hier:
zeichen 1 oder 2 oder 3 drücke
leuchten PortD 0 1 4  5

wenn ich 4 oder 5 oder 6 drücke
leuchten PORTD 1 2 4  5

wenn ich 7 oder 8 oder 9 drücke
leuchten an PORTD 0 3 4 5

wenn ich * oder  0 oder # drücke
leuchten 0 1 5


- und die binär anzeige von led stimmen auch nicht!

Toll! Wir als ladys bekommen immer solche dumme aufgaben rrrrrrrr

bitte hilft uns :(

von Michael S. (rbs_phoenix)


Lesenswert?

Aaallso..

1. Ist der Code wieder als Bild(er). Es gibt hier doch die ASM oder 
CODE-Formatierung.

2. PortA ist so wie es da steht als Output und nicht Input, wie in den 
Kommentaren steht. Ist aber auch egal, da du es eh nicht benutzt.

3. Machst du immernoch viel unnützes Bankgewechsel.

4. In den Kommentaren steht, dass wenn keine Taste gedrückt wurde, Taste 
= 0 sein soll. Was soll denn in Taste sein, wenn die 0 gedrückt wurde? 
Ich hätte eher gesagt, wenn 0 dann 0, 1 dann 1, ... 9 dann 9, * dann 10, 
# dann 11, keine Taste dann 255 bzw. 0xFF. So kann man dann auch gleich 
einfach mit einem btfss/btfsc das Bit 2^4 auswerten. Wenn es gesetzt 
ist, wurde keine Taste gedrückt.

5. Ganz oben weist du Spalte 1 0x20 zu. Weiter unten steht dann "bsf 
PORTB, Spalte1". Wie soll das gehen? Nach dem Komma kann nur eine Zahl 
von 0 bis 7 stehen, 0x20 ist aber 32.

Zeig mal den Schaltplan, wenn vorhanden. Wenn es keinen gibt, dann kann 
man sich das ja auch aussuchen.

Ich hätte das so gemacht:

- TrisB ist 0011 1000:
PORTB.0-2 ist Ausgang, das sind die 3 Zeilen. PORTB3-5 ist Eingang, wo 
die Spalten via DropDown-Widerstände angeschlossen sind.

- PORTB auf 0:
So sind erstmal alle Zeilen auf Low.

- Sprungmarke für die Schleife

- 0xFF ins W-Register
Das ist der Standardwert, sprich keine Taste wurde gedrückt. Hiernach 
werden jetzt die Tasten geprüft und wenn eine gedrückt wurde, wird der 
Wert geändert.

- Die 3 Zeilen nacheinander durchgehen:
1
start
2
     movlw 0xFF
3
4
     bsf PORTB.0       // 1. Zeile auf High
5
     btfsc PORTB.3     // Ist die Spalte 1 auf High, wurde die 1 gedrückt.
6
     movlw 0x01        // Dann 1 ins W-Register schreiben
7
     btfsc PORTB.4     // Wenn nicht, dann nächste Spalte prüfen.
8
     movlw 0x02
9
     btfsc PORTB.5
10
     movlw 0x03
11
     bcf PORTB.0       // 1. Zeile auf Low
12
13
     bsf PORTB.1       // Das gleiche mit Spalte 2 und 3
14
     ...
15
     ...
16
     bcf PORTB.2
17
18
     movwf PORTD       // Hier wird das W-Register zu PortD geschrieben
19
                       // Wenn keine Taste gedrückt wurde, steht da noch
20
                       // 0xFF drin. Wenn ja, steht dieser Wert drin.
21
22
     goto start


So wird auf PORTD solange die gedrückte Zahl binär angezeigt, wie sie 
gedrückt wird.

von Christina März (Gast)


Lesenswert?

Funktioniert nicht! ganz viele fehlern!

achja zu
2. PortA ist so wie es da steht als Output und nicht Input, wie in den
Kommentaren steht. Ist aber auch egal, da du es eh nicht benutzt.

im datenblatt steht drin wenn es als input benutzt werden soll dann 0 
und als output dann 1. deswegen habe ich alles auf 0!

Schaltplan habe ich nicht!

Kannst du mit auch Initialisierung auch schreiben!
:(

bitte um verständnis :)

von Pic T. (pic)


Lesenswert?

Christina März schrieb:
> im datenblatt steht drin wenn es als input benutzt werden soll dann 0
> und als output dann 1. deswegen habe ich alles auf 0!

LOL, Datenblatt von einem anderem Hersteller gelesen ?

von Michael S. (rbs_phoenix)


Lesenswert?

Christina März schrieb:
> im datenblatt steht drin wenn es als input benutzt werden soll dann 0
> und als output dann 1. deswegen habe ich alles auf 0!

Nö:
http://ww1.microchip.com/downloads/en/DeviceDoc/41291F.pdf
z.B. Seite 39, ganz unten.


Christina März schrieb:
> Funktioniert nicht! ganz viele fehlern!

Ohne Schaltplan hab ich auch kp ob das überhaupt die richtigen Pins 
waren. Aber da du den ja nicht raus rückst, kann ich nur raten bzw dir 
einen Anstoß geben. Du hast aber die Schaltung schon aufgebaut, sonst 
würdest du ja nicht sagen können, welche LED leuchtet und welche nicht. 
Dann kannst du das ja kurz aufm Blatt malen und einscannen oder 
Fotografieren oder mit Paint malen etc.
Abgesehen davon ist "Funktioniert nicht" eine Aussage zum 
philosophieren.


Christina März schrieb:
> Kannst du mit auch Initialisierung auch schreiben!
> :(

Das Forum hier ist zum Helfen da und nicht um von anderen das komplette 
Programm zu schreiben. Abgesehen davon hab ich das Programm schon zu 80% 
geschrieben. Die fehlenden 20% sind ein Bereich markieren, 2 mal zu 
kopieren und da dann jeweils 4 Zahlen zu ändern. Ich hab sogar schon 
hingeschrieben, was kopiert werden soll/muss. Welche 4 Zahlen geändert 
werden müssen, sollte man schon erkennen. Wenn nicht, wird es sowieso ab 
dem Punkt scheitern, wenn du es jemanden erklären sollst oder Änderungen 
machen musst.

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.