Hallo ich bin am Verzweifeln: Ich habe eine folgende kleine Schaltung mit dem PIC16F628 aufgebaut: 3,3V SPG-Reg als Versorgung An RB0-RB3 je ein 1k Widerstand und dann eine LED auf Masse An RB4-RB7 je einen 4k7 Pullup und einen Schalter auf Masse So alles was ich (momentan noch) will, ist über die Schalter die LEDS an und aus zu schalten. Als Oszilator soll der Interne OSC des Pics verwendet werden. Hierzu habe ich ein kleines C-Programm (siehe ganz unten) für den CC5X-Compiler geschrieben mit MPLAB und dem CC5X das HEX-File generiert und dieses dann mit dem PIC Brenner5 Rev 5a von Sprut auf den PIC gebrannt. (Folgende Configuration: INTRC CLKOUT - Watchdog OFF - Power Up Timer OFF - Brown Out Enabled - Master Clear Enabled - Low Voltage Program Enabled - Data EE Read Protect Disabled - Code Protect OFF) Danach kommt der PIC auf die Schaltung aber irgendwie geht da nix an und aus. Ich kann mir nicht erklären warum nicht. Stimmen evtl. die Einstellungen nicht oder ist ein fehler im Programm? Es wäre nett wenn Ihr mir weiterhelfen könntet. Vielen Dank Jupp Hier noch schnell das Programm: /* Funktionsprototypen */ void Startup(void); /*--Globale Variablen---*/ /* Definitionen für die Belegung der IO-Ports */ #pragma bit S1 @ PORTB.7; /* Schalter 1 */ #pragma bit S2 @ PORTB.6; /* Schalter 2 */ #pragma bit S3 @ PORTB.5; /* Schalter 3 */ #pragma bit S4 @ PORTB.4; /* Schalter 4 */ #pragma bit L1 @ PORTB.3; /* LED 1 */ #pragma bit L2 @ PORTB.2; /* LED 2 */ #pragma bit L3 @ PORTB.1; /* LED 3 */ #pragma bit L4 @ PORTB.0; /* LED 4 */ /* Startup Code - Initialisierungen */ void Startup(void) PORTB = 0b.0000.0000; TRISB = 0b.1111.0000; /* Pin 4-7 als Eingang (1) Pins 0-3 als Ausgang (0) */ return; } /*===== Hauptprogramm ===== */ void main(void) { Startup(); /* Endlosschleife - Main Loop */ for(;;) { /* Schalter-Port ist pulled-up -> Wenn der Schalter betätigt ist, liegt der Port auf 0 = Low */ if (!S1) L1 = 1; else if (S1) L1 = 0; if (!S2) L2 = 1; else if (S2) L2 = 0; if (!S3) L3 = 1; else if (S3) L3 = 0; if (!S4) L2 = 1; else if (S4) L2 = 0; } }
Sorry hat sich ein kleier Fehler eingeschlichen: Der Brown Out Detect ist natürlich auf Disabled nicht auf Enabled gestellt. Sorry
Hi. Du solltest LVP deaktivieren! Denn du verwendest RB4. Dieser Pin wird bei bei Low voltage programming benötigt um in den Programmiermodus zu gelangen. Also einfach "Low Voltage Program Disabled". Brown Out solltest du auch deaktivieren wenn du den PIC mit geringerer Spannung betreibst. mfg Schoasch
LVP habe ich deaktiviert aber es geht immer noch nicht. Habe auch schon INTERC I/O und INTERC CLKOUT ausprobiert sowie Power UP on/OFF Hat alles nix gebracht die SCH... LEDS wollen einfach nicht leuchten
Hast du schon mal probiert, einfach nur ein LED zu toggeln?Genau mit den selben Einstellungen. Dann weist du ob es was bei den Fuses ist oder bei Software bzw Hardware.
Hallo Jupp! Eine Frage zu einer alten Baustelle von Dir. Wie hat es denn mit dem Compiler jetzt geklappt? Was war denn Schuld? Gruß, Rainer
Wenn ich im Hauptbrogramm L1 = 1; anstelle von: if (!S1) L1 = 1; else if (S1) L1 = 0; Leuchtet leider L1 auch nicht!
@Rainer Ich musste nur das #include "16F628" rausnehemen dann ging es.
Selbst folgendes Programm geht nicht: void main(void) // Start des Hauptprogramms { TRISB = 0b.0000.0000; // Alle Pins des Ports B sind Ausgänge PORTB = 0b.0000.1010; //Pins 6,8,10,12- 0V Pins 7,9,, - 5V } // Ende des Hauptprogramms Ich bin echt am Verzweifeln bitte helft mir was mache ich falsch?
Hallo Jupp! Mir fallen vielleicht noch zwei Fehlerquellen ein: a) Unter Umständen kann Dein Programm dadurch fehlerhaft werden, indem Du keine Endlosschleife am Ende hast. Das ist aber eher unwahrscheinlich. b) Vielleicht sind die LEDs falsch angeschlossen? Kannst Du mit Hilfe des Brenners feststellen, ob die Konfigurationsbits und das Programm korrekt übertragen worden sind? Schalte bei den Konfigurationsbits alles soweit wie möglich aus, sofern es sich mit dem Brenner verträgt; den kenne ich nicht. Gruß, Rainer
poste mal das Hex-file... bzw. schick es mal durch den Reassambler. vl compiliert ja dein Compiler einfach nur misst
Hallo Leute, ich habe das Programm mal für den mikroC Compiler umgeschrieben, also um genau zu sein nur die Definitionen für die Ports und natürlich die TRIS-Ports geändert. Damit hat es einwandfrei funktioniert. Also entweder compiliert der Compiler wie Schoaschi schon gesagt hat einfach nur mist oder die Definitionen der Ports stimmen nicht. Aber die habe ich mir aus einem Sample-Code rausgezogen. Hat noch einer eine Idee, bräuchte CCX5 da das End-Programm größer wird und man mit CCX5 ja mehrere Teile zusammenführen kann und so die 1k-Grenze umgehen.
Ist das jetzt das funktionierende Programm oder das falsche? Wenn ich es mit dem Brennprogramm aufmache, dann meldet er mir das keine Config-Daten vorhanden sind. Kannst du es in eine asm-Datei wandeln mit dem reassambler im Brennprogramm?
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.