Forum: Mikrocontroller und Digitale Elektronik PIC 16F84A Auswertung von Signalen


von Töne (Gast)


Angehängte Dateien:

Lesenswert?

Hey, es ist bestimmt einfacher realisierbar aber hab mich wegen 
verscheidster Gründe so entscheiden. Bin bisschen ausführlich geworden..
also das Problem ist folgendes ... es liegt mal wieder an der 
programmierung.
Das Gesammtprojekt beinhaltet ein Raspberry Pi und eine Platine die ich 
selber entworfen hab (im Anhang).
Der Sinn ist es das ich über eine APP --> Raspberry Pi --> "meine 
Platine" --> Alle Lampen im Haus steuern.
Vom Raspberry Pi bekomm ich eine 5 bit anweisung (vom port vom Rasberry 
z.B GP IO 0-4)und der Pic soll mir das Signal aufschlüsselt und 
16,deshalb benutze ich zwei PIC 16f84a,  verscheidene Relais zu 
schalten.
Zusätzlich sind noch Taster vorhanden, um die Ausgänge nicht nur vom 
Raspberry Pi zu Steuern.
Außerdem bekommt der Raspberry Pi noch ein 3 Bit Code zurück, um zu 
erkennen welcher Taster benutzt wurde.
Ziel ist die Hauslichter mit einer APP zu steuern und das die APP weiß 
welche schon leuten (durch Taster aktiviert).
Die APP und das Programm für den Raspberry Pi hab ich schon.
Also eine Wahrheitstabelle, die bei code (z.B 00101) mir sagt Lampe 1 
soll leuchten etc.) ist vorhanden.

Meine Frage
Ich benutze MPLAP X IDE v2.05 als Oberfläche zum Programmieren.

Wollte
PortA (RA0,RA1,RA2,RA3,RA4) als Eingang
PortB (RB0...RB7) benutzen

Wie deklrier ich PA4 als eingang ??

und wie müss der "Head" aussehen das ich die Ports so bekomme
und wie sehen dann die if anweisungen aus das ich die Pins abfragen kann 
wenn....
Es ist kein stehendes Signal nur quasi ein "implus" normal ist 00000 
wenn jetzt
1x app benutzen (button Lampe 1)--> Raspberry Pi --> code ( 00001) --> 
eignen platine --> Lampe 1 leutet.
geht das Signal wieder auf 00000.

Jetzt soll die Lampe solange leuchten bis das bitmuster nochmal kommt.

habs schon mit probiert aber iwie gibs massig syntax fehler

while (PIN_B0_LOW)
{
if (!input PIN_A0 & !PIN_A1 & !PIN_A2 & !PIN_A3 & !PIN_A4)
{
    output_HIGH(PIN_B0);
}
}
while (PIN_B0_HIGH)
{
if (!input PIN_A0 & !PIN_A1 & !PIN_A2 & !PIN_A3 & !PIN_A4)
{
     output_LOW(PIN_B0;
}
}
etc..

kann mir einer mal ein kleines programm schrieben das ich das Muster 
sehe wie ich das zu machen hab ? ist dann ja auf die anderen Bitmuster 
zu übertragen.

Vielen Dank schonmal .. sry das es so viel text wurde ;)

mfg
Töne

von Max H. (hartl192)


Lesenswert?

Töne schrieb:
> Platine die ich
> selber entworfen hab (im Anhang).
Hast du auch einen Schaltplan, den du anhängen kannst?

Töne schrieb:
> Wie deklrier ich PA4 als eingang ??
Über das TRISA Register

Töne schrieb:
> while (PIN_B0_LOW)
Hast du aus Versehen das AVR Tutorial durchgearbeitet?
Bein PIC heiß das PINx Register PORTx.
Die while sollte dann so aussehen;
1
while(~PORTBbits.RB0)

Töne schrieb:
> output_HIGH(PIN_B0);
Das sollte so Aussehen:
1
PORTBbits.RB0=1;

Edit:
Wie wär’s mit dem kompletten Quellcode? Wie ist "output_HIGH()", 
"input", "PIN_A0",... definiert?

Falls du dein gesamtes Wissen in den Code gesteckt hast würde ich 
dringend ein PIC C Tutorial empfehlen: 
http://pic-projekte.de/wordpress/?p=133#comments

: Bearbeitet durch User
von Erich (Gast)


Lesenswert?

Nur so als Tip, ohne auf deine eigentlichen Fragen einzugehen:

Wir schreiben das Jahr 2014.
Da sollte man keinen 16F84(A) mehr einsetzen, der ist zwar noch 
lieferbar aber viel zu teuer weil 1/2 Fußballfeld grosses Silizium.
Im selben Gehäuse (18P) bekommt man einiges neuers Bauteile wie 
PIC18F1320 oder PIC16F1827.

Gruss

von Mr.T (Gast)


Lesenswert?

außerdem heist es:
if(a && b) und nicht if(a & b) !!!

von hinz (Gast)


Lesenswert?

Erich schrieb:
> Wir schreiben das Jahr 2014.
> Da sollte man keinen 16F84(A) mehr einsetzen,

Wenn man noch einen Sack voll aus den '90ern hat...

von Max H. (hartl192)


Lesenswert?

hinz schrieb:
> Wenn man noch einen Sack voll aus den '90ern hat...

Nach dem Eröffnungspost würde ich sagen, dass der TO erst 2014 mit dem 
PIC Programmieren angefangen hat.

: Bearbeitet durch User
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.