Forum: Mikrocontroller und Digitale Elektronik komisches blinkverhalten mit PIC16f877a


von alphi h. (sada)


Lesenswert?

Hallo zusammen.

Neuerdings habe ich mich an einen Pic herangewagt, welcher mehr I/o's 
hat. Den 16F877a. Nun habe ich ein einfaches blinkprogramm geschrieben.
Es funktioniert leider nur teilweise. Am pin OSC1 und OSC2 ist der 
Taktgenerator mit 2x 22pF condis auf masse gehängt.


main{

//konfiguration
TRISA = 0x00; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00;

//was ich noch eingestellt habe:  watchdog = disable,
  XT osciallator ==> 4.194304Mhz, PWRT = enable, Brown-out Reset = 
enable,


while(1)
    {
      RB1 =1;
      delay_ms(500);
      RB1=0;
      delay_ms(500);
   }
}


Sobald der uC 5v bekommt fängt das LED am pin RB1 an zu blinken mit der 
frequenz von 1Hz. aber nach etwa 2min hört es einfach auf und macht 
keine anzeichen von ,,online,,. aber nach weiteren 20sek. fängt es 
wieder an zu blinken als währe nichts gewesen. kann mit jemand sagen was 
ich falsch mache? es ist ziemlich nervig...mit dieser eigenschaft kann 
kein vernünftiges projekt realisiert werden...

von Wilhelm F. (Gast)


Lesenswert?

Wie sieht denn die Funktion delay_ms(500) aus?

von alphi h. (sada)


Lesenswert?

die gibts vom compiler aus. eigentlich heisst sie __delay_ms(500);
sie ist erstaunlich genau.

von Karl H. (kbuchegg)


Lesenswert?

Dann seh ich eigentlich nur noch ein Hardware-Problem in meiner 
Kristallkugel.
Spannungsversorgung, BLockkondensatoren, .... irgendwas in dieser 
Richtung.

von alphi h. (sada)


Lesenswert?

an Vdd ist 5V,  an Vss ist 0V, am pin MCLR ist ein pullupwiderstand auf 
5v. und bei den beiden pins OSC1 & OSC2 ist ein quarz mit zwei 22pF 
condis dran. oder was könnte man noch falsch machen

von Karl H. (kbuchegg)


Lesenswert?

danilo S. schrieb:
> an Vdd ist 5V,  an Vss ist 0V,

Das war nicht gemeint. Das du die angeschlossen hast, glaub ich dir 
schon. Aber wo kommen die her? Steckernetzteil, Labornetzteil, ....
Ist die Quelle über jeden Zweifel erhaben, im 2 MInuten 'Takt' die 
Spannung einbrechen zu lassen? Und sei es nur ganz langsam einbrechen, 
bis irgendwann der Brown Out anschlägt?

von Wilhelm F. (Gast)


Lesenswert?

Ich hatte mit dem Hitech-Light-Compiler, den man mit MPLAB zusammen 
herunter lädt, und der Freeware Demo ist, mal arge Probleme. Er ist 
nicht einfach codelimitiert, wie es anderswo ist, aber er ist anders 
limitiert, darüber fand ich nichts.

Beispielsweise konnte man keine zwei Klammerterme in einer Zeile 
verknüpfen, und das Ergebnis einer Variablen zuweisen. Das machte der 
einfach gar nicht. Erst, nachdem ich einen Dreizeiler aus dem Code 
machte.

Vielleicht mag der auch keine Strukturen, so weit versuchte ich es gar 
nicht mehr.

Das doofe Ding setzte mir einfach Code ohne Fehlermeldungen so um, daß 
der nicht funktionierte.

Ich mußte den Code dann auseinander klamüsern, und in einfachere 
Konstrukte überführen. Dann ging es.

Auf meinen anderen Plattformen wie 8051 geht es doch mit C und dem SDCC 
auch einwandfrei.



Karl Heinz Buchegger schrieb:

> Und sei es nur ganz langsam einbrechen,
> bis irgendwann der Brown Out anschlägt?

Für einen Brown Out reicht bestimmt auch manches Steckbrett.

von alphi h. (sada)


Lesenswert?

ja mit einem labornetzteil.
ich habe den pic16f627a programmiert. der besitzt einen INTRC (interner 
taktgenerator). und da hat es reibungslos geklappt und die schleife 
while(1) hat wirklich ist tatsächlich unendlich viele male wiederholt. 
aber nun mit dem externen klappts irgendwie nicht so...daraus schliesse 
ich, dass die versorgung nicht der übeltäter ist.

von alphi h. (sada)


Lesenswert?

benutze den MikroC for pic mit dem hauseigenen Kompiler von denen.

von Wilhelm F. (Gast)


Lesenswert?

danilo S. schrieb:

> daraus schliesse
> ich, dass die versorgung nicht der übeltäter ist

Mach mal ein Foto, wie der externe Oszillator aus sieht. Quarzdefekte 
gab es auch schon mal, oder zu lange Strippen, alles möglich. Hast du 
einen Ersatzquarz? Ist das Verhalten zeitlich immer exakt 
reproduzierbar?

von Karl H. (kbuchegg)


Lesenswert?

wird irgendwas heiß?

von alphi h. (sada)


Angehängte Dateien:

Lesenswert?

ich habe den grossen prozessor durch den kleinen pic16f627a ausgetausch 
aber das problem liegt immer noch genau gleich an.

nai alles kalt bzw kälter als handwarm.
habe noch eine grüne led angeschlossen um die speisespannung zu 
überwachen...nicht das die spannung an all dem schuld ist.

von alphi h. (sada)


Lesenswert?

jetzt noch eine ganz bescheuerte theorie...wenn ich das ganze aus der 
ferne beobachte läufts reibungslos(sofern ich es beobachten kann)  aber 
sobald ich in die nähe komme habe ich das gefühl fängt die ganze 
apparatur an zu spinnen... einbildung oder könnte was daran sein (EMV 
oder so)

von Wilhelm F. (Gast)


Lesenswert?

danilo S. schrieb:

> nai alles kalt bzw kälter als handwarm.

Steckbrett? Schalte den Brownout einfach mal testweise aus. Einfach, um 
zu sehen, was er dann macht.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Versorgungsspannung nicht mit Cs geblockt...

von alphi h. (sada)


Lesenswert?

warum ist das steckbrtt nicht gut? ich will ja meine schaltungen zuerst 
mal testen. oder ist das falsch?

oke ich mach mal ein neues projekt mit der andere confi. -->brown-out 
reset diable.

was heisst versorgungsspannung nicht mit Cs geblockt?

soll ich einen Kondensator zwischen + und - schalten als 
stützkondensator?

von Karl H. (kbuchegg)


Lesenswert?

danilo S. schrieb:
> warum ist das steckbrtt nicht gut?

Weil 'billige' Steckbretter gerne dazu neigen, dass die Kontakte mehr 
Wackelkontakte sind als irgendwas anderes.

> was heisst versorgungsspannung nicht mit Cs geblockt?

Zwischen + und - gehört bei Digital-IC immer ein 100nF Kondensator. 
Immer. Möglichst nahe am IC.

von alphi h. (sada)


Lesenswert?

Zwischen + und - gehört bei Digital-IC immer ein 100nF Kondensator.
Immer. Möglichst nahe am IC.

das wusste ich nicht. Nun nehme ich ein noch verpacktes klemmbrett mal 
schauen ob der fehler verschwindent.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

danilo S. schrieb:
> das wusste ich nicht. Nun nehme ich ein noch verpacktes klemmbrett mal
> schauen ob der fehler verschwindent.

Bitte vorher noch den Artikel Steckbrett lesen!

von holger (Gast)


Lesenswert?

>Nun nehme ich ein noch verpacktes klemmbrett mal
>schauen ob der fehler verschwindent.

Probier erst mal den 100n.

von Stefan (Gast)


Lesenswert?

Tausch mal Quartz und die Kondensatoren
aus. Vielleicht haben die ja einen hau.

von holger (Gast)


Lesenswert?

>habe noch eine grüne led angeschlossen

Ich sehe da keinen Vorwiderstand für die LED;)

von alphi h. (sada)


Lesenswert?

ich hab nun mal den quarz gewechselt und es sieht vielversrsprächend 
aus...seit 10min beobachte ich die LED und sie blinkt immer im gleichen 
takt.

die grüne LED hat einen Vorwiderstand aber man sieht ihn nicht ...hab 
das bein abgeschnitten und direkt ein R dran gelötet. Als bastler hat 
man solche sachen immer parat:)

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Und was ist mit dem Kondensator?

von alphi h. (sada)


Lesenswert?

leider habe ich gerade keinen 100n im haus. aber mit morgen besorge ich 
mir gleich einen. Vielen dank für die tollen Ratschläge.

von Wilhelm F. (Gast)


Lesenswert?

danilo S. schrieb:

> ich hab nun mal den quarz gewechselt und es sieht vielversrsprächend
> aus...seit 10min beobachte ich die LED und sie blinkt immer im gleichen
> takt.

Quarze bitte immer wie ein rohes Ei behandeln. Nie runter fallen lassen, 
oder ähnliches. Die haben innen sehr empfindliche stoßempfindliche 
Quarzscheibchen. Das hatten wir hier im Forum auch schon mal.

von Karl H. (kbuchegg)


Lesenswert?

Aus irgendeinem Grund haben Quarze auch oft Anschlussdrahtdicken die 
entweder größer oder kleiner als die Drähten von anderen bedrahteten 
Bauteilen sind. Ist mir auch schon passiert, dass ein Quarz im 
Steckbrett nur so einen lala Kontakt hatte.

von alphi h. (sada)


Lesenswert?

was wäre denn eine geeignete methode eine Schaltung zu testen, welche 
ich schnell und bequem umbauen(umverdrahten) kann. habe bemerkt dass 
Steckbretter nicht so beliebt bei euch sind.

wie machts ihr denn? Lötet ihr alle bauteile in eine Rasterplatine?

von holger (Gast)


Lesenswert?

>leider habe ich gerade keinen 100n im haus.

Das müssen nicht genau 100n sein. Hast du sonst irgendwas
da? 47nF oder 1uF Elko reicht zur Not auch erst einmal.

>ich hab nun mal den quarz gewechselt und es sieht vielversrsprächend
>aus

Dann pack den alten Quarz auch noch mal rein.
Vieleicht doch ein Kontaktproblem.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

danilo S. schrieb:
> leider habe ich gerade keinen 100n im haus.

Muss nicht exakt 100nF sein. Bisschen weniger oder (in deinem Fall 
ausnahmsweise viiiel) mehr darf es auch sein.

von Karl H. (kbuchegg)


Lesenswert?

danilo S. schrieb:

> wie machts ihr denn?

Bei seltsamen Fehlern erst mal an allen Bauteilen im Steckbrett wackeln.
:-)

von alphi h. (sada)


Lesenswert?

ist ein 1.5 uF auch noch okee?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

danilo S. schrieb:
> ist ein 1.5 uF auch noch okee?

Yupp... besser als nix!

von alphi h. (sada)


Lesenswert?

hmm jetzt sind es bestimmt 40min die es praktisch ohne ausfälle blinkt.
ich hoffe wir konnten das problem lösen(quarz).

danke allerseits.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

danilo S. schrieb:
> ich hoffe wir konnten das problem lösen(quarz).

[nerv]
Kondensator nicht vergessen...
[/nerv]

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.