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
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.
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...
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)?
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.
Hallo Schoaschi kannst du mir zeigen(Programm),wie du das programmiert hast.vielleicht kann mir das weiter helfen. Danke.
Hallo Schoaschi kannst du mir zeigen(Programm),wie du das programmiert hast.vielleicht kann mir das weiter helfen. Danke
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.
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 ;-)
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
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
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
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.
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?
Hi! Versuchs mal anstatt SET_TRIS_B(0); mit SET_TRIS_B(15); Ich glaube, dann sollte das gehen.
ä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
Das mit der 15 soll wohl heissen, das die 4 niederwertigsten Bits (0-3) auf logisch 1 gesetzt werden sollen ...
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.
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?
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
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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.