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
>kann mir jemand weiter helfen
Der Hellseher an der nächsten Strassenecke kann das wohl.
Kleb doch einfach extern Pullups dran;)
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
jetzt geht nur die 1.spalte, obwohl alle bin 5V haben also Pull ab ist eingeschaltet! bitte guckt mal alle rüber
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!
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.
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...
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 :(
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.
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 :)
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.