www.mikrocontroller.net

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


Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

  }
}

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry hat sich ein kleier Fehler eingeschlichen:

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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rainer S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst Du mit den Fuses?

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich im Hauptbrogramm

L1 = 1;

anstelle von:

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

Leuchtet leider L1 auch nicht!

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rainer

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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rainer S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schoaschi (Gast)
Datum:

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

Autor: Jupp (Gast)
Datum:
Angehängte Dateien:
  • LED.hex (279 Bytes, 156 Downloads)

Bewertung
0 lesenswert
nicht 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.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.