Forum: Mikrocontroller und Digitale Elektronik PIC 16F877A führt Programm nicht aus


von asrael1991 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen :)

ich habe ein kleines Problem mit meinem Pic 16F877A und hoffe hier Hilfe 
zu finden.

Ich habe mir eine Platine fertigen lassen zur Programmierung des Pics. 
(Schaltplan im Anhang)

Programmieren tu ich im MPLAB mit dem CCS Compiler.
Der Pic wird zwar gefunden, auch das Brennen funktioniert fehlerfrei, 
jedoch führt der PIC das Programm nicht aus.

Ich benütze einen 20.000MHz Quarz.

Bitte um Antwort :)

von Juppi J. (juppiii)


Lesenswert?

Hast du schon einen Hardware Reset gemacht?
Wenn du sicher bist das die Hardware stimmt,arbeite mal mit Internen 
Takt.
Wenns immer noch nicht läuft wirste wohl deinen Code mal 
veröffentlichen.
MfG

von Michael R. (mexman) Benutzerseite


Lesenswert?

Hallo,

> Programmieren tu ich im MPLAB mit dem CCS Compiler.

Dann laeuft das Programm sicher im Simulator?
Hast Du einen ICD?
Hat alles auf dem Steckbrett funktioniert?
Schwingt der Quarz?
Warum keine Nanofarads ueber der Betriebsspannung?


Rest: Siehe Juppi!


Gruss

Michael

von asrael1991 (Gast)


Lesenswert?

Hardware Reset hab ich schon gemacht.
Wenn ich mich nicht irre hat der 16f877A keinen internen Takt.

Hier der Code:

#include<16f877a.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#use RS232(Baud=9600,XMIT=PIN_C6,RCV=PIN_C7)

void main()
{
  set_tris_a(0x00);

  while(1)
  {
    output_a(0xFF);
  }
}

von holger (Gast)


Lesenswert?

LEDs ohne Vorwiderstand geht gar nicht.

von asrael1991 (Gast)


Lesenswert?

Also im Simulator funktioniert alles.

Was ist ein ICD?
Und wie kann ich beobachten ob der Quarz schwingt?
Tut mir Leid ich bin noch ziemlich unerfahren in diesem Bereich. :(
Am Steckbrett hab ich es gar nicht ausprobiert vorher, da ja im 
Simulator alles funktioniert hat.

Vorwiderstände und Nanofarads muss ich natürlich noch nachbauen, die hab 
ich vergessen. Doch das wird doch nicht der Grund sein oda?

von asrael1991 (Gast)


Angehängte Dateien:

Lesenswert?

So sieht die Platine aus.

von GroberKlotz (Gast)


Lesenswert?

@asrael1991
Dein 2,2MB-Bildchen wird wohl kaum einer runterladen! Das geht auch mit 
20kB
mfg GroberKlotz

von Jens M. (Gast)


Lesenswert?

asrael1991 schrieb:
> Hier der Code:


asrael1991 schrieb:
> Wenn ich mich nicht irre hat der 16f877A keinen internen Takt.

Wird wohl Stimmen (da auch keienr im Datenblatt steht). HS Standard C's 
sind übrigens 22pF, würde ich nie ändern. Den default wert des Osccon 
sollten man auch immer selbst schreiben.

asrael1991 schrieb:
> Vorwiderstände und Nanofarads muss ich natürlich noch nachbauen, die hab
> ich vergessen. Doch das wird doch nicht der Grund sein oda?

So'n Pic ist auch nur 'n IC. Wenn du einen Mosfet von +5V über ne LED 
nach Masse schaltest passiert folgendes.

An der Diode fallen 2,x Volt ab, der rest ballert ungebremst durch die 
Led's.

Das ganze dann x 8. Der daraus resultierende Strom fließt in den VCC des 
Controllers (markenunabhängig) und bringt die sog. Bonddrähte ganz schön 
in's schwitzen. In ihrem Arbeitsvertrag steht aber unter maximum ratings 
ne klare Regelung also streiken Sie und wenn du Pech hast haben Sie 
schon gekündigt.

von Michael R. (mexman) Benutzerseite


Lesenswert?

> Was ist ein ICD?

In Circuit Emulator

> Und wie kann ich beobachten ob der Quarz schwingt?

Oszilloskop

> Tut mir Leid ich bin noch ziemlich unerfahren in diesem Bereich. :(

mutig.

> Am Steckbrett hab ich es gar nicht ausprobiert vorher, da ja im
> Simulator alles funktioniert hat.

Wieder was gelernt!

> Vorwiderstände und Nanofarads muss ich natürlich noch nachbauen, die hab
> ich vergessen. Doch das wird doch nicht der Grund sein oda?

Gut, dass das Teil auf Sockel sitzt ;-)


Gruss

Michael

von Michael R. (mexman) Benutzerseite


Lesenswert?

Sorry...ICD = In Circuit Debugger.
Empfiehlt sich besonders, wenn
"...ich bin noch ziemlich unerfahren in diesem Bereich"


Gruss

Michael

von asrael1991 (Gast)


Lesenswert?

Also ich hab das ganze jetzt am Steckbrett aufgebaut, inclusive 
Vorwiderstände und Nanofarads. Das Compilieren und Brennen funktioniert, 
aber das Programm wird wieder nicht ausgeführt.

Leider kann ich den Quarz nicht testen, da ich kein Oszi besitze.
Bei den 10pF Kondensatoren bin ich mir nicht ganz sicher ob sie auch 
10pF's sind! Darauf steht die Zahl "100", müssten doch 10pF sein oder?
Leider habe ich kein anderen Pikofarads.

Bei den "#Fuses" bin ich mir auch nicht ganz sicher! Stimmen die so wie 
oben im Programm?

Bitte um Hilfe :)

von asrael1991 (Gast)


Lesenswert?

Hilfe :(

von Der Rächer der Transistormorde (Gast)


Lesenswert?

asrael1991 schrieb:
> Bei den 10pF Kondensatoren bin ich mir nicht ganz sicher ob sie auch
> 10pF's sind! Darauf steht die Zahl "100",

Soll das jetzt ein Witz sein?

von Michael R. (mexman) Benutzerseite


Lesenswert?

asrael1991 schrieb:
> Hilfe :(

Hallop Asrael,

Bist Du eigentlich nur am Spelen oder hast Du Dir das Datenblatt zum uC 
schon mal angeschaut.
Ich habe jetzt wirklich KEINE Lust dazu das fuer Dich zu tun, denn DU 
sollst ja lernen.

Da ich bisher nur andere PIC programmiere und ausschliesslich in ASM, 
kann ich Deine Initialisierung nicht ganz nachvollziehen.

Ich weiss nur, dass man aufpassen muss, die Ausganenge sauber zu 
initialisieren, insbesondere gehoert dazu nicht nur TRISx sondern- wenn 
ich recht erinnere - ADCON1.
Geh mal alle Funktionsregister durch und setze JEDES so, wie DU glaubst, 
es solle sitzen.


Gruss

Michael


(ohne Oszi Elektronikbasten hat eben auch seine Grenzen...)

von Michael R. (mexman) Benutzerseite


Lesenswert?

asrael1991 schrieb:
> Also ich hab das ganze jetzt am Steckbrett aufgebaut, inclusive
> Vorwiderstände und Nanofarads. Das Compilieren und Brennen funktioniert,
> aber das Programm wird wieder nicht ausgeführt.

Gut. Erster Schritt.

> Leider kann ich den Quarz nicht testen, da ich kein Oszi besitze.

Schlecht, "gehe zurueck auf LOS"

> Bei den 10pF Kondensatoren bin ich mir nicht ganz sicher ob sie auch
> 10pF's sind! Darauf steht die Zahl "100", müssten doch 10pF sein oder?
> Leider habe ich kein anderen Pikofarads.

Dann schalte mal jeweils einen parallel...dann sinds schon mal 20pF, das 
kommt i.A. besser.


Gruss

Michael

von Michael R. (mexman) Benutzerseite


Lesenswert?

a> Bei den "#Fuses" bin ich mir auch nicht ganz sicher! Stimmen die so 
wie
> oben im Programm?

Siehe Datenblatt "Example 4-1".... mach es mal genau so!

Gruss

Michael

von GroberKlotz (Gast)


Lesenswert?

> asrael1991 schrieb:
>> Hilfe :(

Wenn Du tatsächlich 100pf-Cs am Quarz verwendest, brauchst Du Dich nicht 
zu wundern... Tip: Mach mal Deine Hausaufgaben!

Initialisierung:
Vermutlich reicht "set_tris_a(0x00);" nicht um PORTA,RA7:0 im 
Datenrichtungsregister als Digitale Ausgänge einzurichten!

Würdest Du in Assembler programmieren könnte Dir das vmtl. bei der 
Initialisierung helfen (Datenblatt lesen ist wohl zu kompliziert?):

Init
;---------------PORTA
  bcf  STATUS,RP0    ;auf jeden Fall mit Bank 0 beginnen
  bcf  STATUS,RP1
  clrf  PORTA        ;Initialize PORTA by clearing output data latches
  banksel  ADCON1    ;zu Register in Bank 1 wechseln
  movlw  0x06        ;Configure all pins as digital Inputs/Ooutputs
  movwf  ADCON1
  movlw  b'0000000'  ;Value used to initialize data direction
  movwf  TRISA       ;RA<5:0> as outputs
                     ;TRISA<7:6>are always read as '0'

mfg GroberKlotz

von Michael R. (mexman) Benutzerseite


Lesenswert?

> Wenn Du tatsächlich 100pf-Cs am Quarz verwendest, brauchst Du Dich nicht
> zu wundern... Tip: Mach mal Deine Hausaufgaben!

Laaangsam...... ich habe 22pF KekKos, auf denen steht 220 = 22 * E0
Hoffen wir, dass Asrael zu Weihnachten ein Oszilloskop bekommt......

>
> Würdest Du in Assembler programmieren könnte Dir das vmtl. bei der
> Initialisierung helfen (Datenblatt lesen ist wohl zu kompliziert?):
>
> Init
> ;---------------PORTA
>   bcf  STATUS,RP0    ;auf jeden Fall mit Bank 0 beginnen
>   bcf  STATUS,RP1
>   clrf  PORTA        ;Initialize PORTA by clearing output data latches
>   banksel  ADCON1    ;zu Register in Bank 1 wechseln
>   movlw  0x06        ;Configure all pins as digital Inputs/Ooutputs
>   movwf  ADCON1
>   movlw  b'0000000'  ;Value used to initialize data direction
>   movwf  TRISA       ;RA<5:0> as outputs
>                      ;TRISA<7:6>are always read as '0'


Genau, das ist das beschriebene "Example 4-1".


Gruss

Michael

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.