PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Blinkfrequenz mit PIC 16F629



Gremlin
25.09.2011, 10:56
HI Leute hoff ihr könnt mir weiterhelfen, hab mich endlich an´s PIC programmieren rangewagt funktioniert auch super aber ich beiß mir hier die Zähne aus. Und zwar möchte ich mit dem PIC 12F629 eine LED ansteuern bei der ich die Frequenz über das Programm verändern kann. Hier das Programm :

clrf GPIO
clrff
clrw


MOVLW 0x500
MOVWF 0x20

bsf STATUS,GPIO2
bcf TRISIO,2
bcf STATUS,GPIO2

LOOP
DECFSZ 0x20,1
GOTO LOOP


bsf GPIO,2


MOVLW 0x500
MOVWF 0x20

LOOP3
DECFSZ 0x20,1
GOTO LOOP3

bcf GPIO,2


end



Hab den Internen OSC verwendet mit 4Mhz. Wieso kann ich den Wert den ich in das Arbeitsregister schreiben will nicht x beliebig erhöhen? bzw habt ihr ne Idee wie ich das Programm anders schreiben könnte? Danke schon im Vorraus mfg Gremlin

Kampi
25.09.2011, 11:28
Was meinst du mit beliebig erhöhen?
Das Arbeitsregister im PIC ist 8-bit groß d.h. du kannst dort Zahlen zwischen 0 und 255 drin speichern. Wenn die Zahl jetzt 256 beträgt ist das eine 9 Bit Zahl und passt nicht mehr ins Arbeitsregister.

Gremlin
25.09.2011, 12:47
Mit beliebig erhöhen mein ich wenn ich die zahl 256 ins Arbeitsregister lade dann bekomm ich auf meinem oszi eine andere Frequenz als wenn ich 500 eingebe das ist das was mich stutzig macht. Wie könnte ich das Programm anders schreiben damit ich eine Blinkfrequenz von 1Hz oder 2 Hz erreiche hast du da vllt eine Idee? mfg Gremlin

Kampi
25.09.2011, 12:52
Du bekommst bei 256 eine andere Blinkfrequenz als eigentlich gedacht, weil 256 eine 9-bit Zahl ist und das Arbeitsregister nur 8 Bit aufnehmen kann.
256 ist 1 0000 0000 und da nur 8 Bit ins Register reinpassen schreibt er im Endeffekt 0000 0000 und die 1 am Anfang wird abgeschnitten.
500 ist 1 1111 0100 und dann schreibt er ins Arbeitsregister eine 1111 0100. Das sollte das ganze Problem sein. Wenn du mit 8-Bit nicht hinkommst musst du die Zahl halt in einen Low und einen High Teil aufteilen.
Zum Beispiel die 500 wieder. 500 ist ja 1 1111 0100. Dann schreibst du in das Register was für den Low Teil der Zahl steht 1111 0100 und in das Register was für den High Teil steht 0000 0001. Und beim Zählen hast du dann auch jeweils ein Low und High Register. Beim High Register wird der Wert um 1 erhöht wenn im Low Register 1111 1111 steht. So kannst du dann auch mit 16-Bit Zahlen rechnen.

PICture
25.09.2011, 14:32
Hallo!


HI Leute hoff ihr könnt mir weiterhelfen, hab mich endlich an´s PIC programmieren rangewagt funktioniert auch super aber ich beiß mir hier die Zähne aus.

Wenn du am Ende deiner Versuche noch eigene Zähne haben willst, würde ich dir zuerst als Lektüre empfehlen: https://www.roboternetz.de/wissen/index.php/PIC_Assembler . ;)

Gremlin
26.09.2011, 18:04
Hi Leute danke für die schnelle Hilfe funktioniert einwandfrei :) kann also meine Zähne behalten :). Hab nur noch ne kleine Frage zwecks eines Quartzes wollte mir nen Uhrenquartz http://www.conrad.de/ce/de/product/156007/QUARZ-MH32768C/SHOP_AREA_29142&promotionareaSearchDetail=005 mit 32.768000 kHz bestellen. Welche Kondensatoren benötige ich da? Da steht was von Load Cap.: 12.5 pF heißt das das ich zwei Kondensatoren mit jeweils 12,5pF benötige?
mfg Gremlin

Kampi
26.09.2011, 18:19
Das steht im Datenblatt des Quarzes oder des Controllers

PICture
26.09.2011, 18:23
Hallo!

Du kannst dir zwar die Quarze bestellen, aber ich habe es bisher nicht geschafft, so ein Quarz direkt am PIC zum laufen zu bringen und habe externen Oszillator mit CMOS Inverter (z.B. 4049) benutzt (siehe Code).
+-----------------------+
| ___ |
| 32768Hz 8p +-|___|-+ _ _
| _ | 2M | _| |_| |_
| |\ | | || | |\ | |\
+-| >O-|| ||-||-+-| >O--+-| >O---------->
|/ |_| || |/ |/

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Gremlin
26.09.2011, 18:36
OK also wenn ich das richtig verstanden habe dann brauch ich die 12,5 pF Kondensatoren. Bei Conrad gibts aber nur 12pF Kontensatoren kann ich die auch nehmen oder bekomm ich dann eine andere Frequenz?
mfg Gremlin

Gremlin
26.09.2011, 18:42
Hab im Controller Datenblatt mal nachgelesen und wieso steht da LP Mode: 32 kHz C1+C2 : 68 - 100 pF jetzt versteh ich nix mehr:-( mfg Gremlin

Kampi
26.09.2011, 19:01
Also ob du nun 12,5pF oder 12pF nimmst ist eh egal. Im Optimalfall ist die Tolerant des 12pf Kondensators so groß das 12,5pF rauskommen :D
Die Frequenz eines Quarzes kannst du durch die Kondensatoren nicht ändern. Die Kondensatoren am Quarz dienen nur als Grundlast damit das Quarz stabil schwingt. Ein Quarz ist ein Schwingkörper der mit einer sehr genauen Frequenz schwingt. Das Schwingen eines Quarzes kann man ledeglich durch die Temperatur minimal beeinflussen. Was sein kann ist das das Quarz nicht schwingt wenn die Kondensatoren falsch sind.
Im Zweifelsfall hältst du dich bei sowas immer an die Datenblatt Angaben des Controllers. Die können schonmal leicht von den Angaben im Datenblatt des Quarzes abweichen und die Angaben im Datenblatt des Controllers sind vom Hersteller garantiert und stimmen soweit.

PICture
26.09.2011, 19:53
Sehr wichtig ist, das der interner Oszillator für paralellen Resonanz des angeschlossenen Quarzes ausgelegt ist und die meisten Uhrenquarzen mit seriellem Resonans schwingen wollen ;).

Gremlin
29.09.2011, 18:39
Ok dann wert ich da mal ne Bestellung tätigen und mir den Quarz und die Kondensatoren bestellen :) danke nochmal für die Hilfe :)