PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interne Pull-Up beim PIC (12F675) - WIE einrichten?



Radfahrer
14.10.2009, 11:17
Hallo und dies ist auch mein 1. Beitrag.

Ich habe mit PICs bereits ein wenig herumgespielt und die eine oder andere Schaltung damit realisiert.
Ich programmiere in Assembler, um die PICs besser kennenzulernen, auch wenns zeitaufwändig ist.
Allerdings immer auf einem sehr einfachen Niveau, ich erarbeite mir noch Grundlagen.
Wie z.B.:

Ich möchte die internen Pull-UP-Wiederstände an GPIO3&4 nutzen.


; Initialisierung des Controllers

Zeile 1 bsf STATUS,RP0 ; Auswahl Bank 1
Zeile 2 call 0x3FF ; Laden des Kalibrierungswertes aus der letzten Speicherstelle
Zeile 3 movwf OSCCAL ; Neuladen der Kalibrierungswerte für den internen Takt

Zeile 4 movlw B'00111000' ; 3,4,5 = Eingang 0,1,2 = Ausgang
Zeile 5 movwf TRISIO ; Schieben des geladenen Wertes in das Register TRISIO
Zeile 6 CLRF ANSEL ; Deaktivieren der A/D-Wandler


Zeile 7 bcf OPTION_REG, 7 ; pull-up master Ermöglicht Pull-Ups zu schalten

Zeile 8 movlw B'00110000' ; Bei GPIO4&5 int. Pull-Ups zuschalten
Zeile 9 movwf WPU ; WPU = WEAK PULL UP Register

Zeile 10 bcf STATUS,RP0 ; Auswahl Bank 0
Zeile 10 clrf GPIO ; Löschen aller Ausgänge
Zeile 11 clrf INTCON ; Abschalten aller Interrupts und Löschen der Flags



Das Programm als Ganzes läuft.
Ziehe ich (mit einem Schalter) GPIO3 (hat einen externen Pull-Up) auf "0", dann funktioniert die Schaltung wie gewünscht.

Zeile 7, 8 und 9 sind die entscheidenden, neuen Befehle.
Damit soll es möglich sein, wenn GPIO4 oder 5 auf "0" gezogen werden, dass das Programm so weiterarbeitet, als wenn GPIO3 auf "0" gezogen werde.

Mit GPIO3 gehts, mit GPIO4 oder 5 nicht.

Woran liegts?

Die Eingangsabfrage sieht übrigens so aus:


HAUPT
btfss GPIO,3 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"

btfss GPIO,4 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"

btfss GPIO,5 ; Abfragen des Einganges GPIO3, ob Taster gedrückt wird
goto HandyLöschen ; Wenn Taste gedrückt, springe zur Marke "HandyLöschen"


Nein ; Wenn nicht gedrückt, dann von Abfrage von vorne
goto HAUPT ; Und wieder von vorne!






Bis dann,

Peter W.

PICture
14.10.2009, 12:05
Hallo!

Leider konnte ich mich anhand deiner fragmentarischer Beschreibung die Abläufe deiner Programme nicht vorstellen um dir helfen zu können. Bitte, wenn möglich, poste nur das ganze Programm, das beim Ausführen Probleme macht. Die interne pull-ups sind in Zeile 7 richtig eingerichtet. :)

Wahrscheinlich geht´s dir um einlesen der Pins GPIO.

MfG

Radfahrer
14.10.2009, 18:14
Nein, es ging nicht um das Einlesen. GPIO3 (Eingang mit "echtem" PullUp-Widerstand) funktioniert, die beiden zusätzlichen Eingänge 4&5 hatten dagegen nicht funktioniert.

Ich habe das nochmal an einem Minimalstprogramm getestet und es geht.
Auf was es mir ankam war "wie sind PullUps richtig eingerichtet?" ist gelöst.

Und siehe da, nochmal eingelesen, auf einmal funktioniert auch das grosse Programm.

Eventuell ein unbemerkter, wiederkehrender Fehler/Handhabung beim PIC-Brennen. Keine Ahnung.

Danke für das draufschauen,

Peter

PICture
14.10.2009, 18:32
Es passiert bei mir manchmal auch, dass in meinen Gedanken in eine endlose Schleife reinfalle und blind bin... :(

Es freut mich sehr, dass es jetzt richtig funktioniert.

Weiter so, viel Spass ! :)

MfG