Forum: Mikrocontroller und Digitale Elektronik PIC 12F675 Eingänge


von Marco (Gast)


Lesenswert?

Hallo,

Ich bin gerade mit dem 12F675 und dem Buch PICs für Einsteiger 
angefangen.
Nun habe ich die Frage, ob ich auch anstatt des GPIO,3 auch z.B. GPIO,0 
mit dem Taster benutzen kann und wenn nicht warum das nicht geht.
Ich hoffe auf Hilfe ;-)
Wenn sowas schonmal erklärt wurde, könnt ihr auch einfach den link 
posten.

Danke der Marco

von gast (Gast)


Lesenswert?

Warum nicht. Wie kommst du darauf das es
nicht gehen soll ??????

von Marco (Gast)


Lesenswert?

:-) Ich habe aus dem Grunde geschrieben: "und wenn nicht warum das nicht 
geht".

Ich hab nicht geschrieben, dass es nicht geht.

von gast (Gast)


Lesenswert?

Warum probierst du es nicht einfach aus.
Wie schon geschrieben es geht.

von Marco (Gast)


Lesenswert?

Ich hab was einfaches:

    bsf     STATUS,RP0
    call   0x3FF
    movwf   OSCCAL

    movlw  B'00001111'
    movwf  TRISIO
    clrf  ANSEL
    bcf     STATUS,RP0

    clrf  INTCON
    clrf  GPIO

HAUPT
    btfsc  GPIO,0
    goto  HAUPT

    bsf    GPIO,4
WARTE0
    btfss  GPIO,0
    goto  WARTE0
WARTE1
    btfsc  GPIO,0
    goto  WARTE1

    bcf    GPIO,4
WARTE2
    btfss  GPIO,0
    goto  WARTE2

    goto  HAUPT

    end

Statt das die LED angeht, wenn ich den Taster gedrückt hab, leuchtet 
diese durchgehend.

von Joachim A. (joar50)


Lesenswert?

Hallo,
bin zwar nicht der PIC - Kenner, aber ich glaube der Fehler liegt in 
deiner Initialisierung.
Port 0 und 3 als Eingang (Port 3 kann nur Input) und restliche Ports als 
Ausgang würde ich so initialisieren.

bcf     STATUS,PRO    ;Bank 0
    clrf   GPIO      ;Initialisierung GPIO
    movlw  07h      ;GP 0-2
    movwf  CMCON    ;auf I/O setzen
bsf     STATUS,RPO    ;Bank 1
    clrf   ANSEL    ;Digital I/O
    movlw  09h      ;GP 0 und 3 als Input und
    movwf  TRISIO    ;restliche als Output

Ich hoffe es ist nicht totaler Mist den ich schreibe. Wie gesagt kein 
PIC - Profi und schon garnicht in Assembler.
Evtl. hilft es dir ja.

von Claus P. (claus)


Lesenswert?

mal so auf die schnelle:

- hast du den Watchdog deaktiviert?
- wie ist der Schalter am Port 0 angeschlossen? Hängt der evtl. in der 
Luft, wenn er nicht gedrückt ist? Dass du die weak-pullups an Port 0 
aktiviert hast, kann ich im Code nicht sehen.

von Marco (Gast)


Lesenswert?

@ Joachim:

Danke für die Antwort, werde ich morgen ausprobieren und werde dann noch 
mal posten.

@ Claus:

- WDT ist deaktiviert
- Der Port 0 wird mit Spannung versorgt und wird dann durch das Tasten 
auf Masse gezogen...also soll der auf eine abfallende Flanke reagieren.
So Funktioniert das mit dem Port 3 halt auch :-)

von chris (Gast)


Lesenswert?

Hallo, das geht, GP3 ist nur input, und wird deshalb gerne auch für 
Switches hergenommen. Nicht alle Pins gehe, GP0 geht, aber nicht alle 
Pins haben
einschaltbare pull-ups. Natürlich geht es sonst auch, aber nur mit 
externem
Widerstand.

von Marco (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab im Anhang mal meinen Quellcode. Ist mit MPLAB geschrieben.
Es soll so funktionieren:

Wenn ich den Taster am GP3 gedrückt halte soll LED1 blinken, drücke ich 
den Taster kurz blinkt die LED1 3 mal.

Wenn ich dann den anderen Taster an GP0 gedrückt halte soll LED2 
blinken, drücke ich den Taster kurz blinkt LED2 3 mal.

Wenn ich nur GP3 im Quellcode habe funktioniert es. Nehme ich den GP0 
mit rein blinkt LED2 durchgehend.

Vielleicht hat ja jemand eine Lösung :-).

von Marco (Gast)


Lesenswert?

Das ist übrigens nicht so leicht geschrieben, aber im Quellcode 
vereinfachen bin ich noch nicht so Fit ;-). Kritik ist aber gern 
gesehen, denn so kann ich mich ja verbessern :-D

von Michael L. (michaelx)


Lesenswert?

3.2.1 WEAK PULL-UP
Each of the GPIO pins, except GP3, has an individually
configurable weak internal pull-up.

D.h. du musst noch einen Widerstand von GP3 nach Vdd einlöten (ca. 4,7k 
ist ok).

von Marco (Gast)


Angehängte Dateien:

Lesenswert?

:-D Ich habe eine Platine erstellt. Im anhang enthalten :-D

von Gast XIV (Gast)


Lesenswert?

Deinen Relais fehlen die Freilaufdioden. So ist das ne Art elektrischer 
Stuhl für Halbleiter.

Sollen Ports digital sein müssen glaub ich die Komparator und 
Analogeingänge abgeschaltet werden.

von Gast XIV (Gast)


Lesenswert?

und...

werden die Ports vermutlich nicht genug Power liefern um die Relais zu 
treiben.

Der Pic wird vermutlich ziemlich warm.

Warum nimmst du nicht einfach nen LED Verwiderstand (z.B. 330 Ohm gg 
Plus)?

Das spart die 3 Volt Versorgung und die Relais.

von Marco (Gast)


Lesenswert?

hmmm die Relais schalten und der PIC wird auch nicht sonderlich warm, da 
der die Relais ja kurz schaltet.

Das Stimmt schon das ich mir die Relais sparen kann aber wenn ich jetzt 
z.B. einen Lüfter mit 12V anschließen möchte geht das nicht mit dem PIC. 
Am Relais aber, kann ich bis zu ich weiß nicht wieviel Volt dran hängen. 
:-)
Deswegen die zusätzliche Versorgung ;-)

Aber trotzdem danke für den Tip

von Michael L. (michaelx)


Lesenswert?

Wo hast du denn diese Schaltung her?

Folgende Fehler springen sofort ins Auge:

1. Relais direkt am PIC
   - geht nur, wenn diese wenig Strom (<20mA) ziehen
   - besser IMMER (gerade als Anfänger!) einen Transistor
2. keine Freilaufdioden an den Relais
   - das zerschießt dir über kurz oder lang den PIC
3. Relais über 2 Port-Pins angestreuert
   - das ist Unfug!
4. Beschaltung der Taster
   - der Pull-Up (R gegen Vdd) ist viel zu niedrig nimm 4,7 kOhm
5. die Leuchtdioden
   - brauchen IMMER, (bis auf gaaanz wenige Ausnahmen) einen
     Vorwiderstand, auch 3 Volt sind schon zu viel, selbst wenn
     sie die vielleicht ein paar Minuten, höchstens wenige Stunden
     überleben sollten

Tip:

Schaue dir mal andere Schaltungen an, wie das so gemacht wird und welche 
Werte für die Bauteile dort verwendet werden.

http://www.sprut.de/
http://www.holger-klabunde.de/

Da findest du VIELE Tips um als Anfänger mit PICs nicht auf die Nase zu 
fallen, und auch ein paar Schaltungsbeispiele zur Orientierung.

HTH

von Marco H. (purzelbaum)


Lesenswert?

Die Schaltung hab ich in mühevollen 30 sekunden selbst entworfen ;-)

1. Das Relais hat einen ungefähren Schaltstrom von 10mA...Transistoren 
kann ich natürlich auch benutzen (werde ich auch machen)

2. Freilaufdioden: hab ich einfach nicht dran gedacht und ehrlich gesagt 
wollte ich einfach nur schnell testen :-) und hab die Platine dann 
geätzt :-)

3. Geht auch über einen ? Muss ich das andere Beinchen vom Relais dann 
an Masse hängen ?

4. Widerstand oder Widerstände lassen sich schnell umlöten zum test

5. Das ist auch richtig...ich hab die Dinger an einem Netzteil wo sich 
Spannung und Strom begrenzen lassen aber es ist auch kein problem welche 
vorzulöten :-)

Die links werde ich mir auf jeden Fall angucken.
Das problem, dass der Taster nicht Funktioniert besteht leider immer 
noch, aber ein GROßES DANKE an alle.

Gruß der Marco

von chris (Gast)


Lesenswert?

Dir ist schon bewusst, daß du dir da am GPIO3 einen Spannungsteiler 
gebaastelt hast, und die Spannung einfach zu schwach sein könnte, daß 
der
Controller ein high erkennen könnte.

von Marco H. (purzelbaum)


Lesenswert?

Es Funktioniert: Den Schaltplan den ich hochgeladen habe entspricht 
genau dem was ich als Layout vor mit liegen hab...mit den 100 Ohm 
Widerständen läuft das. Außerdem ist das so auch in dem PIC Buch das ich 
habe.

von Michael L. (michaelx)


Lesenswert?

Was funktioniert? Du meinst jetzt aber nicht die Steuerung über GP3 
oder?

BTW: Auch wenn etwas in einem Buch gedruckt ist, bedeutet das noch lange 
nicht, dass es immer richtig sein muss.

von Marco H. (purzelbaum)


Lesenswert?

Doch die Steuerung funktioniert auch mit den beiden 100 Ohm Widerständen 
und so wie jetzt bei mir mit dem 4,7k

von Marco H. (purzelbaum)


Lesenswert?

Hey ich habs hinbekommen :-)

bsf  STATUS,RP0

clrf  ANSEL

movlw  B'00001100'
movwf  TRISIO

bcf  STATUS,RP0

movlw  B'00000111'
movwf  CMCON

clrf  GPIO

Initialisiere den PIC so...so wie Joachim die schon weiter oben gepostet 
hat nur umgedreht wenn man so will.

Und um das Layout oder sonstige sachen auf der Platine kann ich mich 
jetzt kümmern ;-)

Nochmals VIELEN DANK für die HILFE

Gruß Marco

von Michael L. (michaelx)


Lesenswert?

Marco Hinrichs schrieb:
> Doch die Steuerung funktioniert auch mit den beiden 100 Ohm Widerständen
> und so wie jetzt bei mir mit dem 4,7k

Nur fließen bei 100 Ohm über den Taster, wenn er gedrückt wird, 50 mA 
nach Masse! Das ist einfach mal völlig falsch dimensioniert, ganz egal 
ob es nun in einem Buch steht! ;-)

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.