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
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
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.
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.
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.
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.
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..
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.
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.
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.
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 ;-)
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.
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...
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.
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
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.
W.S. schrieb:> ABER: Ich hatte schon mal nen Kollegen, der versehentlich 22nF dort> eingelötet hatte...
Solange keine Becher-ElKos zum Einsatz kommen ;-)