Forum: Mikrocontroller und Digitale Elektronik PIC10F200 OSCCAL Problem


von Matthias L. (mcl024)


Lesenswert?

Hallo Zusammen,

ich habe ein Problem beim setzen des OSCCAL Wert. Wie macht ihr das? 
Mein Programm ist in C geschrieben und ich habe folgenden Befehl 
hinzugefügt.
1
_asm
2
movfw ffh
3
movwf 5h
4
_endasm

von Hans W. (stampede)


Lesenswert?

Ich habe das DB nicht gelesen, aber du kopiert einfach 0xff ins Register 
5. Ich zweifele dass das Sinn macht.

von Matthias L. (mcl024)


Lesenswert?

Meiner Meinung nach bedeutet movfw das der Inhalt der Speicherzelle f in 
das Arbeitsregister w kopiert wird. Und in Speicherstelle ffh soll der 
OSCCAL Wert stehen.

von PICfan (Gast)


Lesenswert?

Zitat aus Datenblatt:

In addition, a calibration instruction is programmed into
the last address of memory, which contains the calibration
value for the internal oscillator. This value is programmed as a MOVLW 
xx
instruction where xx is the calibration value and is
placed at the Reset vector. This will load the W register
with the calibration value upon Reset and the PC will
then roll over to the users program at address 0x000.
The user then has the option of writing the value to the
OSCCAL Register (05h) or ignoring it.

Also:  Speicherplatz 0xFF ist ein Befehl und kein Wert.  Beim Reset 
steht der Kalibrierwert in der W register.  Mann muss ihm nur in der 
OSCCON rüberschieben (oder auch nicht).

von Matthias L. (mcl024)


Lesenswert?

In meinem Program Memory steht an Adresse 00 MOVWF OSCCAL ohne das ich 
in meinem selbstgeschriebenen Code davon etwas schreibe. Allerdings 
ändert sich die Oszi Frequenz nicht wenn ich den Wert in FF  ändere (Mit 
MPLAB).

von John B. (johnbauer)


Lesenswert?

PICfan schrieb:
> Also:  Speicherplatz 0xFF ist ein Befehl und kein Wert.  Beim Reset
> steht der Kalibrierwert in der W register.  Mann muss ihm nur in der
> OSCCON rüberschieben (oder auch nicht).

Und wenn man den PIC löscht, dann ist auch der Kalibrierwert gelöscht. 
Mann muss in vorher auslesen und notieren, um ihn später wieder 
programmieren zu können.

Note:
Erasing the device will also erase the preprogrammed internal 
calibration value for the internal oscillator. The calibration value 
must be read prior to erasing the part so it can be reprogrammed 
correctly later.

Gruß
John

von Matthias L. (mcl024)


Lesenswert?

Ich habe gelesen (siehe Link S.2) das es ein Art Backup vom dem OSCCAL 
Wert geben soll. Er soll im Configbereich bei Adresse 104 liegen.

http://ww1.microchip.com/downloads/en/DeviceDoc/41228E.pdf

Wie kommt man daran?

von John B. (johnbauer)


Lesenswert?

Welchen Programmer hast Du?

Mit dem ICD2 und ICD3 kannst Du in MPLAB über das Menü 
"Programmer/Settings..." im Reiter "Calibration Memory" den Wert lesen 
und schreiben.

Gruß
John

von M. J. (manfred-64)


Lesenswert?

Hi,

Matthias Laubnitz schrieb:
> _asm
> movfw ffh
> movwf 5h
> _endasm
so funst das nicht!

PICfan schrieb:
> Also:  Speicherplatz 0xFF ist ein Befehl und kein Wert.  Beim Reset
> steht der Kalibrierwert in der W register.  Mann muss ihm nur in der
> OSCCON rüberschieben (oder auch nicht).
fast richtig.
In 0xFF steht ein "RETLW" Befehl, also ein Befehl UND Daten
(ob's Pic's gibt, wo nach nem Reset der wert in W steht kann ich nicht 
sagen, bezweifle es aber sehr.)

ergo:
_asm
CALL FFh
movwf 5h
_endasm


mfg
Manfred

von John B. (johnbauer)


Lesenswert?

Manfred John schrieb:
> In 0xFF steht ein "RETLW" Befehl, also ein Befehl UND Daten
> (ob's Pic's gibt, wo nach nem Reset der wert in W steht kann ich nicht
> sagen, bezweifle es aber sehr.)

Bei dem PIC10F200 ist es kein 'RETLW XX" wie z.B. beim PIC12F629 sondern 
ein 'MOVLW XX".
Der Reset-Vektor zeigt beim PIC10F200 auf 0xFF. Hier wird der Akku mit 
dem OSCCAL-Wert geladen. Dann gibt es einen Rollover des Progammzählers 
auf 0x00, wo dann nur noch ein 'MOVWF OSSCAL' stehen muss. Was der 
Compiler ja automatisch einfügt:

Matthias Laubnitz schrieb:
> In meinem Program Memory steht an Adresse 00 MOVWF OSCCAL ohne das ich
> in meinem selbstgeschriebenen Code davon etwas schreibe. Allerdings
> ändert sich die Oszi Frequenz nicht wenn ich den Wert in FF  ändere (Mit
> MPLAB).

Um den OSCCAL-Wert zu ändern, kannst Du diese Funktion nutzen, indem Du 
im Programmspeicher an Adresse 0xFF den Befehl 'MOVLW XX' mit dem 
gewünschten Wert für OSCCAL einfügst. Oder Du kannst an einer beliebigen 
Stellen im Programm die Befehle:
  MOVLW XX
  MOVWF OSSCAL
einfügen.

Gruß
John

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.