Forum: Mikrocontroller und Digitale Elektronik PIC 16f84a Programmieren


von Yassine Ouledrahi (Gast)


Lesenswert?

Hallo

Ich muss einen PIC 16f84a in Assembler programmiern und das habe ich
noch nie gemacht.
Der PORTA ist mit einem Schalter(4er) angeschlossen.und PORTB als
Ausgang.
es muss so programmiert werden dass beim schalten von  zb:(A0 und A3)
dh (PORTA.0 und PORTA.3) der Ausgang PORTB an bleibt und nach einer
wait wieder aus. Die Warteschleife Wait liegt schon vor.
Danke
mfg

von Schoaschi (Gast)


Lesenswert?

warum muss es in Assembler sein? Kann es nicht auch in C sein?

Ich hab erst gestern mit meinem PIC16LF84A die steuerung meines
Belichtungsgerätes gebaut. Und da hab ich auch die Taster an
PORTA(A0-A3) hängen und an PORTB hängen meine Leds.

von Rooney (Gast)


Lesenswert?

Willst jetzt den Code dafür haben oder wie?

Aber abgesehen davon, warum nimmst nicht PORTB als Eingang und PORTA
als Ausgang? Port B Pins RB7..RB4 können als Interruptquelle (interrupt
on change feature) verwendet werden, sobald sich etwas am Eingang ändert
wird ein Interruptflag gesetzt, also ideal für das was du eigentlich
machen willst. Ersparst dir somit das Pollen...

von Yassine Ouledrahi (Gast)


Lesenswert?

Danke für den Antwort.
''Kann es nicht auch in C sein?''
Ich wolte das eigentlich in C programmieren, hat aber nicht geklapt.
hast du eine Idee wie ich das machen kann(in C)?

von Yassine Ouledrahi (Gast)


Lesenswert?

das mit der Steurung von Belichtungsgerät ist genau was ich machen
soll.Ich habe die Platine fertig gebaut und muss jetzt den PIC
programmieren.und da ich fruher nicht viel programmiert habe. bekomme
ich ein paar Probleme.

von Yassine Ouledrahi (Gast)


Lesenswert?

Hallo Schoaschi

kannst du mir zeigen(Programm),wie du das programmiert hast.vielleicht
kann mir das weiter helfen.

Danke.

von Yassine Ouledrahi (Gast)


Lesenswert?

Hallo Schoaschi

kannst du mir zeigen(Programm),wie du das programmiert hast.vielleicht
kann mir das weiter helfen.

Danke

von Schoaschi (Gast)


Angehängte Dateien:

Lesenswert?

Ja kann ich gerne... WElchen Compiler benutzt du?

von Schoaschi (Gast)


Lesenswert?

achja... ich weis nicht obs du auch den PIN RA4 benutzt. Falls du diesen
doch benutzt, dann beachte das das ein Open-Drain ausgang ist. Hat bei
mir schwierigkeiten geben, da ich das übersehen habe.

von Schoaschi (Gast)


Lesenswert?

PS.: bei mir reicht der Zeitbereich von 0sec bis 255sec und die
eingestellte zeit ist an den Leds die am Port B angeschlossen sind
abzulesen.

Ich wollte kein LCD dafür verbrauchen ;-)

von Schoaschi (Gast)


Lesenswert?

achja... ein paar kommentare sind falsch ;-)

von Yassine (Gast)


Lesenswert?

Danke Schoaschi.
Ich wolte am Anfang auch mit CCS Compiler,da ich nur eine Dimo
version hab,war die Datei '16f84a.h' nicht dabei.ist diesen Compiler
nur für bestimmte Controller geeignet?
mfg

von Schoaschi (Gast)


Lesenswert?

Auf der folgenden Seite sind die unterstützten Chips aufgelistet:
http://www.ccsinfo.com/devices.shtml

Und hier noch ein Link zur übersicht welche Compailer das es gibt.
http://www.the-starbearer.de/Praxis/Microkontrollerpraxis/PIC/PIC%20Hochsprachen/PICHochsprachen.htm

von Yassine (Gast)


Lesenswert?

Ya da ist PIC16f84a auch dabei.Ich arbeite mit einem Demo Version aber
er meldet viel Fehler da er vielleicht die Datei '16f84a.h'nicht
hat.und auch 'Belichtung.h'kann er nicht erkennen.
hast eine Idee?
mfg

von Schoaschi (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist mal die header. wobei du diese selbst auch erstellen hättest
können. und wenn du die Header für deinen PIC nocht hast, dann wirds
auch nicht hinhaun ;-).diese kannst du dir aber relativ leicht selbst
schreiben. vorallem brauchst du bei meinem Programm eh nur geringfügige
änderungen machen, dann kommst du ganz ohne aus.

von Schoaschi (Gast)


Lesenswert?

Und was gibts? tut sich schon was?

von Yassine (Gast)


Lesenswert?

ya Ich habe ein kleines Programm probiert:

#include <16F84A.h>
#use delay(clock=4000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT
#byte  PORTA   =   0x05
#byte  PORTB   =   0x06

int x;

void main()
{
   SET_TRIS_A(15);
   SET_TRIS_B(0);


   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);






while(1)
  {
  if(x=1)
  {
    x=0;
    if(!input(PIN_A0))
    {
      output_HIGH(PIN_B0);
      Delay_ms(5000);
      output_Low(PIN_B0);
         }


  }//Ende while-Schleife
} //Ende main
}

aber wenn ich A0 schalte dann bleibt Led(B0)ganz Zeit an.musste
eigentlich nur 5sec leuchten.
woran könnte das liegen?

von Simon (Gast)


Lesenswert?

Hi!

Versuchs mal anstatt

SET_TRIS_B(0);

mit

SET_TRIS_B(15);

Ich glaube, dann sollte das gehen.

von schoaschi (Gast)


Lesenswert?

ähm... das ganze programm würde ich nicht so schreiben ;-) denn das
funktioniert nur zufäll irgendwie :D

zuerst musst du mals x initialisieren, weil sonst steht in x irgendein
wert drinn und er spring nie ins if rein. ausserdem musst
du schreiben x==1 ( mit = wird ein wert auf die variable gschrieben und
nicht verglichen ;-))
und wie kommst du bitte auf 15? A0 ist doch an stelle 0 also müsste es
1 sein oda nicht?!

void main()
{
   SET_TRIS_A(1);
   SET_TRIS_B(0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

while(1)
  {
    if(!input(PIN_A0))
    {
      output_HIGH(PIN_B0);
      Delay_ms(5000);
      output_Low(PIN_B0);
    }
  }//Ende while-Schleife
} //Ende main

wenn ich mich nicht irre sollte es vl so funktionieren.. kanns momentan
aber leider nicht überprüfen, da ich nicht zu hause bin.

mfg schoasch

von Ich (Gast)


Lesenswert?

Das mit der 15 soll wohl heissen, das die 4 niederwertigsten Bits (0-3)
auf logisch 1 gesetzt werden sollen ...

von schoaschi (Gast)


Lesenswert?

Beim PIC wird aber empfohlen, dass alle PINs die nicht benutzt werden,
als ausgang definiert werden sollen wenn ich mich recht entsinne. Denn
es kann zu problemen kommen wenn unbeschaltene PINS als eingang
definiert sind.

von Yassine (Gast)


Lesenswert?

Ich hab jetzt ein PIC16C554 programmiert.hat das erste mal
funktioniert,dann bekomme ich beim Brennen des Programms(2.mal) einen
Fehler:

Device is not Blank:
Program memory
Configuration Bits

und dann kann das Brennen nicht bis zu Ende gehen?

von dds5 (Gast)


Lesenswert?

Alle PIC mit einem "C" in der Typenbezeichnung (ausser 16C84) haben
einen sogenannten OTP-Speicher und lassen sich nicht mehr löschen.
Einmal programmiert, kann man sie nur benutzen oder wegwerfen, neu
programmieren ist nicht möglich.

Dieter

von Schoaschi (Gast)


Lesenswert?

Das stimmt was dds5 sagt. Wenn du eine Programm fertig hast und es nicht
mehr verändern willst, dann kannst du einen C-Typ verwenden. aber das
ist alles aus dem Informationen auf der Microchip seite und aus dem
Datenplatt und von www.sprut.de oder www.fernando-heitor.de zu
entnehmen ;-)

von edouin (Gast)


Lesenswert?

Guten Tag allerseits,
ich suche die datei 16F84A.h und 16F877.h für den CCS-Compiler.
Ich muss in der Schule einen solchen PIC in C programmieren, leider hab
ich nur die Demo-version vom CCS-Compiler.
Danke für jede Hilfe
Gruss Edouin

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.