Forum: Mikrocontroller und Digitale Elektronik PIC 16 programmieren mit Hi-Tech C I/0


von Eee E. (snake4)


Lesenswert?

Hallo,

ich habe einen PIC16F688 und möchte da eigentlich nur lesen ob ein Pin 
High oder Low ist. Kann ja theoretisch nicht so schwer sein aber ich 
stehe ziemlich auf dem Schlauch, ich habe keine Ahnung was ich noch 
anderes machen könnte.
Hier der Versuch der mir am Besten scheint:
1
void main(void)
2
{ 
3
 
4
  CMCON0 = 7;
5
  ANSEL = 0;
6
7
  TRISC5 = 1;
8
  TRISC3 = 0;
9
   
10
  while(1)
11
  {
12
    RC3 = RC5;
13
  }     
14
}

An RC3 hängt eine LED die funktioniert und an RC5 hängt ein schalter der 
geht.
Vielleicht kann mir bitte jemand kurz helfen.

MfG

von usuru (Gast)


Lesenswert?

Welchen Oszillator nimmst Du? Intern, Quarz? Schwingt das Teil?

Wie sehen die config-bits aus?

Die LED hast Du sicher mit einem Vorwiderstand drangehängt.

von Eee E. (snake4)


Lesenswert?

Der PIC läuft, wenn ich RC3 = 1; mache geht die LED.

Wenn ich einen PIC18 mit dem MC18 programmiert dranhänge geht das ganze 
auch.

von ... (Gast)


Lesenswert?

und wo ist das Problem ???

von Eee E. (snake4)


Lesenswert?

Es passiert nix wenn ich auf den Schalter drücke. Das ist das Problem. 
Habe ich vielleicht irgendwie nicht so deutlich geschrieben.

Aber ich vermute mal es müsste theoretisch gehen? Also einen neuen PIC 
habe ich auch mal genommen, kaputt kann der also auch nicht sein.

Aber ich nehme dann mal an es stimmt, dass man RCx lesen und auch 
schreiben kann?

von Dirk F (Gast)


Lesenswert?

Hallo, hatt ähnliche Probleme beim 18F4580.
Versuch mal zuerst den Eingangspin auf eine Varriable zu lesen und dann 
um zweiten Schritt auf das Ausgangsbit zu schreiben.


 while(1)
  {
    unsigned char test;

    test = RC5;
    RC3 = test;
}

Gruß Dirk

von Eee E. (snake4)


Lesenswert?

Davon hatte ich auch schon gelesen, hat aber nichts gebracht.

Also der PIC läuft, ich kann die LED blinken lassen. Der Schalter 
funktioniert an einem anderen PIC18 auch.

Muss ich vielleicht noch irgendwelche anderen Einstellung machen, damit 
das Ganze funktioniert?

von ... (Gast)


Lesenswert?

Initialisiere mal den ganzen Port mit RC = 0; (am besten nach TRISC3 = 
0;), auch ein Eingangs-Pin muss erst mal mit einem Schreibvorgang 
initialisiert werden.

von Eee E. (snake4)


Lesenswert?

Ich hab jetzt am Anfang ein RC5 = 0; eingebaut und jetzt gehts. Muss 
Mann das verstehen ??

von ... (Gast)


Lesenswert?

Bei PICs müssen die Ports initialisiert werden. Auch wenn Pins als Input 
geschaltet sind, muss erst mal der gesamte Port einmal beschrieben 
werden. Ist halt so. Warum: frag Microchip.

von Eee E. (snake4)


Lesenswert?

Ich hätte da noch ein weiteres kleines Problem das jetzt aufgetaucht 
ist.

Der Eingang wird schon vom dranlangen High. Also von ca 0.01V Man kann 
ja irgendwo einstellen was die Reference Voltage sein soll? Aber wenn 
man nix eingestellt hat müsste er doch die +5V nehmen?

von -GastXIV (Gast)


Lesenswert?

Eee E. schrieb:
> Der Eingang wird schon vom dranlangen High.
Ist bei CMOS normal.


> Also von ca 0.01V Man

Du hast so ca. zwischen +/- 1000 Volt an den Fingern je nach Luftfeuchte 
ob du Wolle oder Leinen trägst Neonlampen in der Nähe sind usw.

> kann
> ja irgendwo einstellen was die Reference Voltage sein soll?

Ja, z.B. indem du die einen Masseanschluss zu deiner Haut machst und 
selbige Flächendeckend mit Salzwassser einsprühst ;-).

> Aber wenn
> man nix eingestellt hat müsste er doch die +5V nehmen?


Das ist bei TTL der Fall nicht bei CMOS.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Du sollst ja auch nicht "dranlangen" =)

von Eee E. (snake4)


Lesenswert?

Mir ist das auch ehr aufgefallen weil nebendran eine 230V Leitung liegt 
und wenn auf der Last ist wird mein Eingang high. Da habe ich dann auch 
die 0.01V gemessen. Aber normal wird das doch erst bei 2,5V oder sowas 
high?

von Dirk F (Gast)


Lesenswert?

Hallo, wie hast Du denn den Taster angeschlossen ?
Gegen Masso oder gegen +5V ?
Vergess auf keinen Fall den Pull-Up oder Pull-down Wiederstand.
Sonst hat der Pin bei offenen Schalter einen undefinierten Zustand.
Beim PortB kann man interne Pullups aktivieren.
Gruß Dirk

von Eee E. (snake4)


Lesenswert?

Der Widerstand ist da, allerdings hat er 30k. Das reicht wenn auf meiner 
230V Leitung keine Last ist, wenn ich ihn weglasse wird der Pin dann 
auch schon high. So wird er nur high wenn Last drauf ist.
Ich kann den aber nicht kleiner machen weil von meinem Schalter so wenig 
Strom kommt dass dann alles abfließt und er wird garnichtmehr high.

von -GastXIV (Gast)


Lesenswert?

Eee E. schrieb:
> Der Widerstand ist da, allerdings hat er 30k. Das reicht wenn auf meiner
> 230V Leitung keine Last ist,

Liegt das direkt nebeneinander?

> wenn ich ihn weglasse wird der Pin dann
> auch schon high.

Das ist normal

Eee E. schrieb:
> Da habe ich dann auch
> die 0.01V gemessen

Was nichts besagt da dein Messgerät
a.)eine anderen Eingangswiderstand hat
b.) das ganze eine Wechselspannung sein wird
    die dir nur als "high" erscheint

Eee E. schrieb:
> Ich kann den aber nicht kleiner machen weil von meinem Schalter so wenig
> Strom kommt dass dann alles abfließt und er wird garnichtmehr high.

"Zauberworte" sind dann  Schirmung und verdrillte Leitungen

von Eee E. (snake4)


Lesenswert?

(-: Ein geschirmtes 230V Kabel habe ich erst einmal in meinem Leben 
gesehen. Aber mir scheint es gibt nicht direkt eine einfachere Lösung 
für das Problem.

Danke für eure ganzen Antworten.

MfG

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.