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
|
|
Forum: Mikrocontroller und Digitale Elektronik PIC10F200 OSCCAL ProblemHallo 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.
Ich habe das DB nicht gelesen, aber du kopiert einfach 0xff ins Register 5. Ich zweifele dass das Sinn macht. 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. 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). 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). 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 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? 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 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 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.
|
|