Forum: Mikrocontroller und Digitale Elektronik PIC16F676 Programmierproblem


von Lukas L. (lukas_lieb)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe ein kleines Problem.
Und zwar get es um einen Pic16F676, denn ich gerne in C programmieren 
würde.

Ich programmiere mit der MPLAB-Entwicklungsumgebung v.8.50 und mit dem 
CCS-Compiler (3.5.0.92). Als Programmer benutze ich den ICD3-Debugger.

Vorläufig, um den Pic mal richtig einzustellen, habe ich eine sehr 
einfache Schaltung aufgabaut (mit Pic und LED), da ich im Pic 
programmieren noch fast keine Erfahrung habe.

Ich habe inzwischen schon mehrere Stunden damit verbracht, in Foren nach 
einer Lösung zu suchen und bin langsam am verzweifeln...

Ich habe auch schon mehrere Konfigurationen mit den fuses ausprobiert.

Ich möchte gerne mit dem Internen Osccilator arbeiten.

Hier ist mal mein C-Code:
1
#include <16F676.h>  
2
3
#fuses INTRC_IO, NOWDT, NOPROTECT, BROWNOUT, PUT, NOCPD,MCLR
4
#use delay (clock=4000000)
5
6
#define PTC  PIN_A0
7
#define SF  PIN_A1
8
#define SG  PIN_A2
9
#define SE  PIN_A4
10
#define Pow  PIN_A5
11
#define SA  PIN_C0
12
#define SB  PIN_C1
13
#define SC  PIN_C2
14
#define SD  PIN_C3
15
#define S1  PIN_C4
16
#define S2  PIN_C5
17
18
void main(void){
19
  
20
  SETUP_TIMER_1(T1_DISABLED);      //Timer ausschalten
21
  DISABLE_INTERRUPTS(GLOBAL);      //Interrupts ausschalten
22
  setup_adc(NO_ANALOGS);        //AD-Wandler ausschalten
23
    setup_comparator (NC_NC_NC_NC);    //Comparator-Modul ausschalten
24
  set_tris_a(0x08);          //Port A als Ausgang definieren
25
    set_tris_c(0x00);          //Port C als Ausgang definieren    
26
27
  while(1){
28
    output_high(PIN_A5);
29
    delay_ms(500);
30
    output_low(PIN_A5);
31
    delay_ms(500);
32
  }
33
}

Der Compiler gibt zwar keinen Error aus, aber wenn ich das Programm auf 
den Pic laden will, kommt eine Warnung (Screenshot). Wenn ich dann auf 
OK klicke wird das Programm auf den Pic geladen. Wenn ich dann aber das 
Programm starten möchte, passiert rein gar nichts.


Hat irgendjemand eine Idee, an was das liegen könnte?
Ich habe auch schon über einen anderen Theard in diesem Forum einen 
Beitrag gefunden über ein Head Interface 
(http://de.farnell.com/microchip/ac162052/head-interface-for-16f676-630/dp/4300841). 
Würde das Funktionieren?

Vielen Dank für eure Hilfe.

Gruss Lukas

von M. J. (manfred-64)


Angehängte Dateien:

Lesenswert?

Gugst Du Anhang
(Steht aber eigentlich schon in der Warnung!)

von Lukas L. (lukas_lieb)


Lesenswert?

Hallo

Was meinst du damit? Ich habe ja schon MCLR auf den Pin gezogen (und 
nicht intern auf Vdd). Oder muss man den anderst ausschalten?

von Frank K. (fchk)


Lesenswert?

Ganz einfach: Du darfst MCLR nicht abschalten.

von Lukas L. (lukas_lieb)


Lesenswert?

Das Problem ist, dass ich beides schon ausprobiert habe MCLR und NOMCLR 
und beides funktioniert nicht.

von Lukas L. (lukas_lieb)


Lesenswert?

Habe nochmals ein wenig geschaut, ob ich noch was finde...

Hier im CCS-Forum hatte einer ein ähnliches Problem:
http://www.ccsinfo.com/forum/viewtopic.php?t=32914&highlight=16f676

Darin geht es hauptsächlich, dass wenn man den Pic vollständig löst, 
dass danach das OSCCAL Value für die interne Oscillator Konifiguration 
mit gelöst wird. Und wie man es manuel wieder hinzufügt.

Ich habe jetzt nach diesem Theard mal meinen Code angepasst.
1
#include <16F676.H>
2
#fuses INTRC_IO, NOWDT, NOPROTECT, BROWNOUT, PUT
3
#use delay(clock = 4000000)
4
#rom 0x3FF = {0x3480}
5
//===================================
6
void main()
7
{
8
9
while(1)
10
  {
11
   output_high(PIN_C4);
12
   delay_ms(500);
13
   output_low(PIN_C4);
14
   delay_ms(500);
15
  }
16
}

Und es dürfte auch nicht an irgendwelchen comperator intialisierungen 
liegen, da der Ausgang C4 keine andere Funktion ausser IO hat.

Allerdings glaube ich nicht, dass das der Haupgrund ist, das es nicht 
funktioniert. Warum? Weil wenn ich die Speisung immer wieder Ein- und 
Ausschalte, funktioniert der Code etwa jedes 20mal durchschnittlich. 
Also vermute ich langsam, das der Pic wirklich nicht mehr richtig 
zurückgesetzt wird. Also müsste es tatsächlich etwas mit dem MCLR zu tun 
haben. Da es aber wie schon gesagt mit NOMCLR und MCLR fuses nicht 
funktioniert. Weis ich langsam nicht mehr weiter...

Hat irgend jemand vielleicht noch eine Idee was ich gegen dieses Problem 
unternehmen könnte?

Gruss Lukas

von Holger W. (holgerw)


Lesenswert?

Wie hast du denn MCLR beschaltet ? Der sollte mit ca. 10k Widerstand 
gegen +
Holger

von Lukas L. (lukas_lieb)


Lesenswert?

Habe ich gemacht ja.

von M. J. (manfred-64)


Lesenswert?

Lukas Lieb schrieb:
> Darin geht es hauptsächlich, dass wenn man den Pic vollständig löst,
> dass danach das OSCCAL Value für die interne Oscillator Konifiguration
> mit gelöst wird. Und wie man es manuel wieder hinzufügt.

Jo wen der Programmer das nicht berücksichtigt wir das auch gebügelt :)
Macht aber nich wirklich was, nur der interne OSC is halt nicht mehr 
kalibriert (ungenauer). Laufen tut er aber trotzdem.

Lukas Lieb schrieb:
> Da es aber wie schon gesagt mit NOMCLR und MCLR fuses nicht
> funktioniert.

Hast Du eigentlich beides mal die Warnmeldung ?

von Holger W. (holgerw)


Lesenswert?

Ich kenn den CCS nicht, must du vorher noch die TRIS auf Ausgang 
schalten ? Das ist in deinem 2. Programm nicht der Fall.

Holger

von Lukas L. (lukas_lieb)


Lesenswert?

Ja die Warnmeldung kommt beides mal... Das ist ja das komische. Ich 
meine einmal müsste doch der interne MCLR ausgeschalten sein und einmal 
nicht oder?

Also das Programm habe ich von der Seite, die ich oben gepostet habe 
übernommen und da es bei anderen läuft, müsste es das eigentlich bei 
micht aucht tun... Ausserdem habe ich, bevor ich diesen Post geschrieben 
habe ausprobiert, ob es mit set_tris funktioniert.

von Holger W. (holgerw)


Angehängte Dateien:

Lesenswert?

Im Anhang mal ein Test für deinen PIC.
RC4 sollte im Sekundentakt blinken, bei mir tut er das auch.
MCLR ist disabled, gebrannt mit Sprut Brenner 8.

Holger

von Jens (Gast)


Lesenswert?

ist das nicht so, dass wenn man den Reset einmal auf intern gestellt 
hat, dass es dann nicht mehr rückgängig zu machen ist mit diesem 
Programmer? Wie bei den Atmels auch, wenn man mit dem Programmer den 
Reset abstellt, dann braucht man ein STK500 oä für die reaktivierung...

JJ

von Holger W. (holgerw)


Angehängte Dateien:

Lesenswert?

Dann hier noch eine Version mit MCLR enabled, die läuft wenn MCLR auf 
VDD liegt.

Holger

von M. J. (manfred-64)


Lesenswert?

Jens schrieb:
> ist das nicht so, dass wenn man den Reset einmal auf intern gestellt
> hat, dass es dann nicht mehr rückgängig zu machen ist

Nö, noch nie was von so nem Blödsinn gehört. So was würden die doch nie 
verkaufen, so wie andre Hersteller ;)
(ka obs da Ausnahmen gibt, werde mir wenn ich zeit habe mal die Errata 
angugen)

von Frank K. (fchk)


Lesenswert?

Jens schrieb:
> ist das nicht so, dass wenn man den Reset einmal auf intern gestellt
> hat, dass es dann nicht mehr rückgängig zu machen ist mit diesem
> Programmer? Wie bei den Atmels auch, wenn man mit dem Programmer den
> Reset abstellt, dann braucht man ein STK500 oä für die reaktivierung...

Bei den PIC16 ist HV-Programmierung Standard. Du kannst Dich nicht 
aussperren.

fchk

von Lukas L. (lukas_lieb)


Lesenswert?

So ich habe jetzt mal gedacht, vielleicht stimmt ja was mit dem 
ICD3-Debugger nicht. Also habe ich mal den PICSTART Plus genommen und 
dein (Holger's) Programm auf dem Pic geladen.
Zu Erste einmal ging nichts. (bzw. wie vorhin etwa jedes 20x hat es 
funktioniert.)
Danach dachte ich mir vielleicht funktioniert es ja mit einem neuen Pic. 
Und es hat funktioniert! Auch das Programm von mir ging jetzt ohne 
Probleme...

Da dies jetzt funktioniert nehme ich an, dass mein ICD3 irdend einen 
Defekt hat, der das MCLR vom Pic zerstört.

Da ich den Pic jetzt endlich programmieren kann, werde ich mich mal an 
die Programmierarbeit machen :) und melde mich wieder, wenn es weitere 
Probleme geben sollte.

Ich danke euch allen für die Unterstützung.

Gruss Lukas

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.