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
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.
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.
@ 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 :-)
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.
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 :-).
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
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).
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.
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.
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
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
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
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.
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.
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.
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
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! ;-)