Forum: Mikrocontroller und Digitale Elektronik PIC16F628 Programm läuft nicht


von Jupp (Gast)


Lesenswert?

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;

  }
}

von Jupp (Gast)


Lesenswert?

Sorry hat sich ein kleier Fehler eingeschlichen:

Der Brown Out Detect ist natürlich auf Disabled nicht auf Enabled
gestellt.
Sorry

von Schoaschi (Gast)


Lesenswert?

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

von Jupp (Gast)


Lesenswert?

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

von Schoaschi (Gast)


Lesenswert?

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.

von Rainer S. (Gast)


Lesenswert?

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

von Jupp (Gast)


Lesenswert?

Was meinst Du mit den Fuses?

von Jupp (Gast)


Lesenswert?

Wenn ich im Hauptbrogramm

L1 = 1;

anstelle von:

if (!S1)
      L1 = 1;
  else if (S1)
      L1 = 0;

Leuchtet leider L1 auch nicht!

von Jupp (Gast)


Lesenswert?

@Rainer

Ich musste nur das #include "16F628" rausnehemen dann ging es.

von Jupp (Gast)


Lesenswert?

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?

von Rainer S. (Gast)


Lesenswert?

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

von Schoaschi (Gast)


Lesenswert?

poste mal das Hex-file... bzw. schick es mal durch den Reassambler. vl
compiliert ja dein Compiler einfach nur misst

von Jupp (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Schoaschi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.