Forum: Mikrocontroller und Digitale Elektronik PIC16f84a: startet nicht/nur bei quarz berühren


von ich_putze_hier_nur (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Mein PIC16f84a ist auf einem Testboard (aus der Berufsschule) mit 
verschiedenen Beschaltungsmöglichkeiten für die Ein/Ausgänge.

Nun habe ich den PIC mittels dem Projekt aus
MPLAB IDE v8.91 und dem PICKIT 3 (mittlerweile) erfolgreich 
programmiert.

Leider läuft der PIC aber nicht an - auch nich nach einem RESET!

Komisch ist außerdem, dass wenn ich mit meinem Finger den QUARZ am 
Gehäuse berühre, mein Programm läuft. Zwar nicht ganz richtig aber 
wenigstens annähernd. Das allerdings auch nicht in der richtigen 
Frequenz.

Versorgungsspannung usw. eigentlich alles 3fach geprüft, ich denke ehr 
das mein Problem bei den Einstellungen von MPLAB bzw. beim Programm 
liegt...


Ich habe nur testweise nen recht kleines Programm geschrieben, nur um 
erstmal überhaupt was hin zu bekommen: aber leider funktioniert ja 
nichtmal das..
1
#include p16f84a.INC
2
3
4
init
5
  movlw  b'00000111'
6
  movwf  CMCON
7
  bsf    STATUS,RP0
8
  movlw  b'00000000'
9
  movwf  TRISB
10
  movlw  b'11111111'
11
  movwf  TRISA
12
  bcf    STATUS,RP0
13
  clrf  PORTB
14
  
15
loop
16
  movf  PORTA,W
17
  movwf  PORTB
18
  goto  loop
19
  
20
end

Ich habe schon viel in Foren usw. gelesen, aber konnte leider noch keine 
Lösung finden. Ich vermute das mir da irgend ne Einstellung fehlt o.ä.

Für Hilfe wäre ich sehr dankbar!!

Gruß,
Ich putze hier nur

von Stefan (Gast)


Lesenswert?

Wie sind die Fused gesetzt ?

von Frank (Gast)


Lesenswert?

Wo hälst Du denn Deinen Finger genau hin? Auf das Quartz-Gehäuse? Oder 
einen Quartz-Anschlußpin?

Gibt es zu der Schaltung auch ein Platinen-Layout?

Ich denke nicht, daß es ein Software-Fehler ist, sondern ein 
Hardware-Problem. Könnte mir z.B. eine vergessene Masse vorstellen.

Viele Grüße an meine alte Heimat nach Minden,
Frank, der jetzt in der Nähe von Kassel wohnt

von W.S. (Gast)


Lesenswert?

ich_putze_hier_nur schrieb:
> Für Hilfe wäre ich sehr dankbar

Guck dir das Optionregister an. Das solltest du geeignet setzen, 
insbesondere die Bits für den Oszillator bzw. Takterzeugung. (hab jetzt 
grad kein Manual für diesen PIC zur Hand)

Das gepostete Stück ist sicher nur ein Auszug, ja?

W.S.

von Johannes T. (johnsn)


Lesenswert?

Versuch mal einen 1M Widerstand zwischen OSC1 und OSC2 zu geben. 
Manchmal hilft das, damit der Quarz zu schwingen beginnt. Wir hatten so 
einen Fall auch schon mal bei einem Z80.

von Max (Gast)


Lesenswert?

Ich sehe nirgends einen Abblockkondensator über der Speisung...

von ich_putze_hier_nur (Gast)


Angehängte Dateien:

Lesenswert?

Ja, das ist nur ein Auszug aus dem Schaltplan. Ein richtiges Layout habe 
ich leider nicht, sondern kann nur mit dem Bestückungsplan dienen.

Also wenn ich ans gehäuse vom QUARZ fasse UND/ODER wenn ich an den 
Lötstift fasse. ist dann allerdings bei einem ne schnellere Frequenz und 
beim anderen langsamer, weiß leider gerade nicht mehr bei welchem was 
war.

Am Port A habe ich momentan nen Platinenmodul mit 4 tastern, an Port B 
nen Modul mit LED's.

Wie genau setzte ich die Fused? Bzw. wo sehe ich wie diese gesetzt sind?
Das mit dem 1MOhm Widerstand zwischen OSC1 und OSC2 kann ich mir nicht 
vorstellen, in der Schule haben wir auch mehrere dieser Boards, diese 
laufen einwandfrei. Dort haben wir allerdings mit anderer Software und 
nem anderen Brenner gearbeitet.

von ich_putze_hier_nur (Gast)


Lesenswert?

Und nochwas:
Wo kann ich das Optionsregister sehen, verändern und speichern? Bei 
MPLAB?

von hinz (Gast)


Angehängte Dateien:

Lesenswert?

ich_putze_hier_nur schrieb:

> Wie genau setzte ich die Fused?

Per Assemblerdirektive.

von Wilhelm F. (Gast)


Lesenswert?

ich_putze_hier_nur schrieb:

> Wie genau setzte ich die Fused? Bzw. wo sehe ich wie diese gesetzt sind?

Im CONFIG-Wort. Das findet man im MPLAB, wenn man mit einem PICkit 
arbeitet. Dort sollte irgendwo so was wie LP_OSC_ON oder XT_OSC_ON 
stehen.

Die richtigen Bezeichnungen kann man sich im Include-File anschauen.

Aber wenn der Quarz doch bei Berührung den PIC aktiviert, könnte es 
schon richtig gesetzt sein. Sonst ginge ja mal gar nichts.

Entweder steht das CONFIG-Wort irgendwo weit oben im Code (ist bei mir 
immer so), oder man kann auch das MPLAB dazu aktivieren, das CONFIG-Wort 
zu übernehmen. Diese Woche brachte ich selbst mal einen externen 
Oszillator am PIC12F675 an, weil ich 16MHz brauchte. Das funktionierte 
nach Umstellung des CONFIG-Wortes auf Anhieb. Verfusen, wie man das hier 
im Forum immer wieder von den AVR liest, kann man so schnell nichts. Es 
gibt zwar ganz spezielle Ausnahmen, irgendwas mit einer Code-Protection, 
aber da stehen Anleitungen auch in den Manuals, wie man was wieder 
behebt.

von ich_putze_hier_nur (Gast)


Lesenswert?

Ah, okay. Ich brauche den externen Oszillator ja nichtmal eigentlich... 
Nur wo in MPLAB finde ich diese einstellung? In meinem programm hab ich 
sowas ja nicht stehen..

von Jürgen D. (poster)


Lesenswert?

ich_putze_hier_nur schrieb:
 In meinem programm hab ich
> sowas ja nicht stehen..

Warum nicht das solltest du aber ändern.
Unter dem Menupunkt  Configure gibt es Config Bits, da sind die.

Ich würde die aber trotzdem mit in den Code übernehmen, dann weist du 
das die immer richtig stehen wenn du auch mal das Projekt änderst.

von ich_putze_hier_nur (Gast)


Angehängte Dateien:

Lesenswert?

Ah Okay! Das sah bei mir so aus.
Und das "Configuration Bits set in code" heißt dann ja vermutlich, dass 
sie im Programm aufgelistet sein sollten..?!

__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

Wären die einstellungen dann so korrekt?
Ich hatte das nämlich schonmal mit im Programm stehen gestern (hab ich 
irgendwo im Internetz gefunden) - gleicher Fehler.

von Wilhelm F. (Gast)


Lesenswert?

ich_putze_hier_nur schrieb:

> __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
>
> Wären die einstellungen dann so korrekt?

Ja, das sieht schon gut aus. Das CONFIG-Wort sollte am besten ganz oben 
im Assembler-File stehen, noch vor allen anderen Definitionen. LP_OSC 
kannst du alternativ auch versuchen, dann bekommt der Quarz nicht so 
viel Power, denn er könnte im XT-Mode auch übersteuern. Volle Power 
kostet ja bei extremen Stromsparanwendungen auch unnötig Energie. Im 
Datenblatt ist auch noch ein optionaler Serienwiderstand zur Dämpfung 
der Leistung am Quarzausgang eingezeichnet. Damit hatte ich allerdings 
noch nicht zu tun. Aber man kann sich auch mal damit beschäftigen, den 
Quarzoszillator mit minimaler Energie zu betreiben, wenn man mal gerade 
nichts anderes zu tun hat.

Ich persönlich würde das CONFIG-Wort auch grundsätzlich immer nur im 
Code stehen lassen, anstatt das im MPLAB einzustellen. Sonst weiß man 
nach einem Jahr, wenn man den Code mal wieder braucht, nicht mehr, was 
man da an bits gesetzt hatte, wenn man es nicht anderweitig 
dokumentierte.

Im Include-File, das befindet sich im Programme-Ordner, in dem MPLAB 
installiert ist, da stehen alle bits des CONFIG-Wortes ausführlich und 
vollständig drinne. In der Offline-Hilfe des MPLAB findet man alles 
auch. Ebenso im Header-File des C-Compilers, wenn man mit C arbeitet.



ich_putze_hier_nur schrieb:

> Ich brauche den externen Oszillator ja nichtmal eigentlich...

Der Quarz ist auf jeden Fall genauer, als der interne RC-Oszillator. 
Wenn man nichts mit präzisen Zeitmessungen macht, reicht der interne 
RC-Oszillator mit seinen 2% Toleranz aber auch ganz gut. Bei meinem 
12F675 habe ich dann zwei weitere I/O-Pins zur Verfügung. Das ist 
manchmal wichtig, weil der Winzling ja nur 5 I/O-Pins hat. Nächstes mal 
bestelle ich mir ein paar 16F676 mit. Das ist nur der 12F675 mit 6 
weiteren I/O-Pins, mehr nicht. Für eine aktuelle Anwendung, ich mache 
einen Stepup-Wandler mit PSM (Pulse Skipping Modulator, im weitesten 
Sinne sowas ähnliches wie PWM), da hätte ich drei weitere I/O für 
Kontroll-LEDs zur Fehlersuche gebraucht, oder einen fürs Oszi, muß aber 
leider verzichten. 33V aus 5V hatte ich schon geschafft, wobei mein 
Darlington-Transistor schon fast dunkelrot zu leuchten beginnt, also es 
gibt noch einiges zu tun. Erst kommt die grundsätzliche Funktion, dann 
die Detailverbesserungen.

> (hab ich
> irgendwo im Internetz gefunden)

In der Doku zum PICkit findet sich aber auch einiges, da ist sicher viel 
Beispielcode und Application Notes mit dabei. Meine CD vom PICkit1 
kopierte ich mal komplett auf die Festplatte, da ist dann alles dazu 
immer griffbereit.

von Norbert (Gast)


Lesenswert?

ich_putze_hier_nur schrieb:

> Leider läuft der PIC aber nicht an - auch nich nach einem RESET!
>
> Komisch ist außerdem, dass wenn ich mit meinem Finger den QUARZ am
> Gehäuse berühre, mein Programm läuft. Zwar nicht ganz richtig aber
> wenigstens annähernd. Das allerdings auch nicht in der richtigen
> Frequenz.

Es ist recht wahrscheinlich, das die beiden Kondensatoren C2/C3 nicht 
zum Quarz passen (Datenblatt?). Ich hatte schon sehr ähnliche Phänomene 
beobachtet, die verschwanden sobald die beiden Kondensatoren deutlich 
kleiner (ca. 15pF) gemacht wurden.

Der Abstand zwischen Q und Prozessor sieht ja nach gut 15-20mm aus, da 
wirken die Leiterbahnen schon als kleine Kondensatoren ;-)

von Wilhelm F. (Gast)


Lesenswert?

Norbert schrieb:

> Der Abstand zwischen Q und Prozessor sieht ja nach gut 15-20mm aus, da
> wirken die Leiterbahnen schon als kleine Kondensatoren ;-)

Er bekommt da dann mit den Leiterbahnen 33pF anstatt 22pF. Das macht 
fast immer nichts. Bei 4MHz ist auch der Abstand zum µC nicht auf den 
Millimeter wichtig.

von Norbert (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Norbert schrieb:
>
>> Der Abstand zwischen Q und Prozessor sieht ja nach gut 15-20mm aus, da
>> wirken die Leiterbahnen schon als kleine Kondensatoren ;-)
>
> Er bekommt da dann mit den Leiterbahnen 33pF anstatt 22pF.

Ganz genau, kann zum sauberen Anschwingen schon zuviel sein.
Wie gesagt, eigene Erfahrung...

von Wilhelm F. (Gast)


Lesenswert?

Norbert schrieb:

> Ganz genau, kann zum sauberen Anschwingen schon zuviel sein.
> Wie gesagt, eigene Erfahrung...

Über 100pF würde ich sagen, zu viel. Auf dem Steckbrett habe ich gerade 
einen 16MHz-Oszillator, der nur mit einem gesteckten Schaltdraht ca. 7cm 
am PIC läuft. Auf einem anderen Steckbrett 5MHz, läuft noch über einen 
10cm langen Draht. Und zwar beides auf dem Steckbrett, immer zwei 
Steckkontakte noch mit dazwischen.

Erst wenn es das nicht mehr tut, bewege ich mich zur Fehlersuche.

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Hallo Putzteufel,

Dein anfangs gepostets "programm" ist gelinde gesagt etwas fragwürdig 
und zeugt davon, dass Du wohl kaum das Datenblatt des 16F84A wenigstens 
in Grundzügen überflogen hast. Doch was soll's, jeder fängt mal so oder 
ähnlich an :-) und ich will mich daher nicht davon abhalten lassen, Dir 
unter die Arme zu greifen.

So wie in Deinem Schaltplan der Quarzoszillator eingezeichnet und 
dimensioniert ist, muss er auch funktionieren. Was der Anschluss am 
Quarz "PAD01" bedeuten soll weiß ich nicht. Auf jeden Fall haben weitere 
Drähte und Bauteile außer denen die eingezeichnet sind, dort auf keinen 
Fall irgend was zu suchen!

Es funktioniert nicht wenn:
a) der Quarz defekt ist
b) die Zuleitungen zum PIC nicht vorhanden oder falsch angeschlossen 
sind
c) die Konfiguration nicht korrekt ist (_XT_OSC bei Quarz zwischen 
200kHz und 4 MHz, darüber: _HS_OSC)
Schau mal hier: [http://www.sprut.de/electronic/pic/osc/index.htm]
;
Beiliegend findest Du eines meiner ersten Blinkprogramme, welches ich 
für Dich noch mit einigen Kommentaren ergänzt habe.

Diese Programm habe ich soeben nochmals in einen 16F84A gebrannt und 
erprobt - funktioniert! Wenn es bei Dir also nicht funktioniert, dann 
ist bei Deiner Schaltung was kaputt oder fehlerhaft.

Noch ein paar Tips:
µController sind Schaltkreise welche man nicht frei Schnauze, sondern 
nur mit LERNEN, das heißt Datenblatt lesen, Tutorials durcharbeiten, 
verstehen kann! Wild drauf los programmieren führt zu nichts.

Gewöhne Dir von Anfang an einen  korrekten, übersichtlichen, gut 
dokumentierten Aufbau Deines Programms an, auch wenn dieses noch so kurz 
ist! Schau immer im Datenblatt nach, wie die einzelnen Register zu 
programmieren sind und erkenne dabei die Zusammenhänge zwischen 
Registern eines Funktionsblocks.

Auch wenn es vielleicht schon zum zigten Mal gepredigt wurde: Für 
Einsteiger gibt es als Erstlektüre kaum was besseres als die Seite von 
sprut!
[http://www.sprut.de]! Arbeite erst mal diese Seiten durch und Du wirst 
sehen - Dir fällt es wie Schuppen von den Augen!

So long - mfG Ottmar

von W.S. (Gast)


Lesenswert?

Norbert schrieb:
> Es ist recht wahrscheinlich, das die beiden Kondensatoren C2/C3 nicht
> zum Quarz passen

Das ist meistens nicht wirklich ein Problem, denn die Dinger sind im 
Bereich von 10pF bis 39pF recht gutmütig.

ABER: Ich hatte schon mal nen Kollegen, der versehentlich 22nF dort 
eingelötet hatte...

Also: mal Kondensatoren blind austauschen, vielleicht war's das.

W.S.

von Norbert (Gast)


Lesenswert?

W.S. schrieb:
> ABER: Ich hatte schon mal nen Kollegen, der versehentlich 22nF dort
> eingelötet hatte...

Solange keine Becher-ElKos zum Einsatz kommen ;-)

von chris (Gast)


Lesenswert?

kann es sein, daß die fuses falsch programmiert sind ?

von Wilhelm F. (Gast)


Lesenswert?

chris schrieb:

> kann es sein, daß die fuses falsch programmiert sind ?

Dann ginge gar nichts mehr. Es ging ja hier mal so.... wenigstens halb.

von ich_putze_hier_nur (Gast)


Lesenswert?

So, hab jetzt alles nochmal neu drauf gemacht & es geht einwandfrei!

Danke an alle!

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.