Hallo, weiß jemand ob es eine möglichkeit gibt, die Calibration bytes in der signature row aus der Software heraus auszulesen? Mit dem Programmer funktioniert das natürlich problemlos, aber das ist nicht besonders praxistauglich.
Das Calibration Byte ist die Voreinstellung für das OSCCAL-Register. Darin lässt sich dieser Wert zum Kalibrieren zur Laufzeit bearbeiten. Das Calibration Byte selbst wird dabei nicht verändert.
Ja, ich möchte Calibration Byte für 8MHz auslesen um es dann ins OSCCAL-Register zu schreiben.
So wie ich das lese, gibt es nur einen Wert fuer 1MHz, der beim Reset automatisch in das OSCCAL geladen wird. Fuer andere Frequenzen musst Du einen im Flash oder EEPROM gespeicherten Wert selbst nach OSCCAL laden. Und ja, OSCCAL kann auch gelesen werden. (Allerdings nach dem Reset dann nur den Wert fuer 1MHz). wendelsberg
Wäre nicht unblöd, mal den Typ zu nennen. Z.B. beim ATmega1284P geht das: Table 24-5. Signature Row Addressing RC Oscillator Calibration Byte: Z-Pointer Address 0x0001
ATMega128: Da gibt es sogar 4 Werte fuer 1,2,4 und 8 MHz. Calibration Byte: The ATmega128 stores four different calibration values for the internal RC Oscillator. These bytes resides in the signature row high byte of the addresses 0x000, 0x0001, 0x0002, and 0x0003 for 1MHz, 2MHz, 4MHz, and 8MHz respectively. During Reset, the 1MHz value is automatically loaded into the OSCCAL Register. If other frequencies are used, the calibration value has to be loaded manually, see “Oscillator Calibration Register – OSCCAL” on page 41 for details. wendelsberg
ATMega 8 und den Wert für 8MHz kann ich wie gesagt mit dem ISP Auslesen. Ich möchte diese aber in Software auf dem chip selbst machen.
klausi schrieb: > Ich möchte diese aber in Software auf dem chip selbst machen. Den Wert fuer 8MHz musst Du selbst setzen. Allerdings steht da im DB (hast Du das gelesen?): This can be done by first reading the signature row by a programmer, and then store the calibration values in the Flash or EEPROM. wendelsberg
klausi schrieb: > ATMega 8 und den Wert für 8MHz kann ich wie gesagt mit dem ISP > Auslesen. > Ich möchte diese aber in Software auf dem chip selbst machen. Ich hab mal für dich das Datenblatt gelesen: > During Reset, the 1MHz calibration value which is located > in the signature row High byte (address 0x00) is automatically > loaded into the OSCCAL Register. If the internal RC is used at > other frequencies, the calibration values must be loaded > manually. This can be done by first reading the signature row > by a programmer, and then store the calibration values in the Flash > or EEPROM. Then the value can be read by software and loaded into > the OSCCAL Register.
Hier steht es auch nochmal: > Calibration Byte > The ATmega8 stores four different calibration values for the > internal RC Oscillator. These bytes resides in the signature > row High byte of the addresses 0x0000, 0x0001, 0x0002, and 0x0003 > for 1MHz, 2MHz, 4MHz, and 8Mhz respectively. > During Reset, the 1MHz value is automatically loaded into the OSCCAL > Register. > If other frequencies are used, the calibration value has to be loaded > manually, see “Oscillator Calibration Register – OSCCAL” > on page 31 for details.
Beim xmega geht das so:
1 | uint8_t read_calibration_byte(uint8_t index) |
2 | {
|
3 | uint8_t result; |
4 | |
5 | NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc; |
6 | result = pgm_read_byte(index); |
7 | NVM.CMD = NVM_CMD_NO_OPERATION_gc; |
8 | return (result); |
9 | }
|
auslesen z.B. für den 32 MHz Oszillator mit:
1 | val = read_calibration_byte(PROD_SIGNATURES_START + (uint16_t)&PRODSIGNATURES_RCOSC32M); |
Vielleicht kannst Du das ja irgendwie auf den mega übertragen.
P. M. schrieb: > Vielleicht kannst Du das ja irgendwie auf den mega übertragen. Bestimmt kann er das nicht. Alles Wichtige wird ja durch die C-Seuche versteckt, ähem... portabel gemacht. (kicher...) Aber ja, es geht auch bei vielen (vielleicht sogar allen?) ATmegas. Und wie es geht, steht, wer hätte das gedacht, im jeweiligen Datenblatt... Üblicherweise in dem Hauptabschnitt mit dem Titel "Self-programming the Flash", Unterabschnitt "Reading Lock, Fuse and Signature Data from Software". Und ja: Das geht (wie so vieles) NICHT in C. Jedenfalls nicht ohne Assemblerhilfe, sei es als Inline-Code oder als hinzugelinkte Lib (die dann ihrereseits auch wieder nur auf Assembler zurückgreifen muss). Asm rules!
c-hater schrieb: > Und ja: Das geht (wie so vieles) NICHT in C. Jedenfalls nicht ohne > Assemblerhilfe, sei es als Inline-Code oder als hinzugelinkte Lib (die > dann ihrereseits auch wieder nur auf Assembler zurückgreifen muss). Eine vorsichtige Frage: Warum steht dann im Datenblatt, daß man das Byte für 1MHz sehr wohl auslesen kann, die Bytes für die anderen Frequenzen aber nicht, sondern das man die manuell lesen muß? Es wurde oben das Datenblatt zitiert, und ich habe es auch gefunden: > If other frequencies are used, the calibration value has to be loaded > manually, see “Oscillator Calibration Register – OSCCAL” > on page 31 for details. Ist das ein undokumentiertes Feature, was du da beschreibst?
Erwin D. schrieb: > Eine vorsichtige Frage: Warum steht dann im Datenblatt, daß man das Byte > für 1MHz sehr wohl auslesen kann, die Bytes für die anderen Frequenzen > aber nicht, sondern das man die manuell lesen muß? Es wurde oben das > Datenblatt zitiert, und ich habe es auch gefunden: [...] Nein. Dein Problem ist nur, das du kein Englisch beherrschst. Was du da behauptest, was da stehen würde, steht da einfach nicht. Es geht im dem Text allein um den Sachverhalt, welcher dieser Kalibrierungswerte automatisch durch die HARDWARE geladen werden kann. Kein bissel geht es darum, welche Werte die Software auslesen kann. Für jemanden mit gesundem Menschverstand wird im Gegenteil sogar ganz unmittelbar klar, dass wohl die Software leisten muss, was der Hardware nicht gegeben ist... >> If other frequencies are used, the calibration value has to be loaded >> manually Und genau das steht hier auch... Wobei natürlich das "manually" interpretierbar ist. Gemeint ist das, was deutschsprachige Programmierer wohl als "zu Fuß" bezeichnen würden. Du musst es halt einfach selber machen, durch ein entsprechendes Stück Programmcode...
c-hater schrieb: > Du musst es halt einfach selber > machen, durch ein entsprechendes Stück Programmcode... Da wurde oben noch mehr aus dem Datenblatt zitiert, was ich so interpretiere, daß man die Bytes mittels Programmer auslesen soll und dann in den Flash oder EEPROM speichern soll. Erst von dort können sie mit Software gelesen werden und ins Calibration Byte geschrieben werden. Habe ich das auch falsch verstanden? This can be done by first reading the signature row > by a programmer, and then store the calibration values in the Flash > or EEPROM. > Then the value can be read by software and loaded into > the OSCCAL Register.
Erwin D. schrieb: > Da wurde oben noch mehr aus dem Datenblatt zitiert, was ich so > interpretiere, daß man die Bytes mittels Programmer auslesen soll und > dann in den Flash oder EEPROM speichern soll. Erst von dort können sie > mit Software gelesen werden und ins Calibration Byte geschrieben werden. > Habe ich das auch falsch verstanden? Du hast nicht falsch verstanden, was diese Leute geschrieben haben. Du hast allerdings nicht verstanden, dass diese Leute eigentlich keine Ahnung haben. Du hast einfach zu wenig eigene Kenntnisse, um den Wert der Postings einzuschätzen. Mein Rat: lerne Englisch, dann dann kannst du selber Datenblätter lesen. Lerne Assembler, um notfalls JEDE Sache selber umsetzen zu können und nicht auf andere angewiesen zu sein, über deren Kenntnisse und Motivation du nix weisst.
c-hater schrieb: > Du hast allerdings nicht verstanden, dass diese Leute eigentlich keine > Ahnung haben. Die Leute von Atmel meinst du? Das ist original aus dem Datenblatt zitiert!
Erwin D. schrieb: > Die Leute von Atmel meinst du? Nein. > Das ist original aus dem Datenblatt zitiert! Nein. Die Meinung all der unwissenden Flitzpiepen in diesem Thread war nicht sicher nicht aus dem Datenblatt zitiert. Zum Glück darf da nicht jeder unwissende Flachwichser seinen Senf ablassen. Was im Datenblatt zu diesem Thema wirklich steht, habe ich gezeigt. Sogar, wo genau es steht. Ich finde, damit habe ich den Faulen und Dummen schon wesentlich mehr an kostenloser Dienstleistung erbracht, als mir eigentlich zuzumuten ist. EOT
c-hater schrieb: > Erwin D. schrieb: >> Das ist original aus dem Datenblatt zitiert! > > Nein. Die Meinung all der unwissenden Flitzpiepen in diesem Thread war > nicht sicher nicht aus dem Datenblatt zitiert. Zum Glück darf da nicht > jeder unwissende Flachwichser seinen Senf ablassen. Ich habe gerade nochmal das Datenblatt geöffnet. Und hier ein direktes copy&paste:
1 | This can be done by first reading the signature row by a programmer, |
2 | and then store the calibration values in the Flash or EEPROM. Then the |
3 | value can be read by software and loaded into the OSCCAL Register. |
Seite 31, Abschnitt "Bits 7..0 - CAL7..0: Oscillator Calibration Value" (Über der Tabelle 11) > Was im Datenblatt zu diesem Thema wirklich steht, habe ich gezeigt. > Sogar, wo genau es steht. Ich finde, damit habe ich den Faulen und > Dummen schon wesentlich mehr an kostenloser Dienstleistung erbracht, als > mir eigentlich zuzumuten ist. Dann hätte dir das doch eigentlich auffallen müssen. Warum bezeichnest du die Leute von Atmel als "Flachwichser"? Findest du das nicht etwas unfair? Wenn du mehr weißt als Atmel, dann melde das doch dort!
c-hater schrieb: > es geht auch bei vielen (vielleicht sogar allen?) ATmegas. Beim ATmega8, nach dem der TE explizit gefragt hat, geht es nicht. > wie es geht, steht, wer hätte das gedacht, im jeweiligen Datenblatt... > Üblicherweise in dem Hauptabschnitt mit dem Titel "Self-programming the > Flash", Unterabschnitt "Reading Lock, Fuse and Signature Data from > Software". Beim ATmega8 kann man zwar Lock- und Fuse-Bytes auslesen, aber eben nicht die Signatur und auch nicht die Kalibrierung. Datenblätter zitieren ist ja gut und schön. Es sollte dann aber auch das Datenblatt sein, das für die Frage relevant ist. Erwin D. schrieb: > Da wurde oben noch mehr aus dem Datenblatt zitiert, was ich so > interpretiere, daß man die Bytes mittels Programmer auslesen soll und > dann in den Flash oder EEPROM speichern soll. Erst von dort können sie > mit Software gelesen werden und ins Calibration Byte geschrieben werden. > Habe ich das auch falsch verstanden? Das hast du ganz richtig verstanden. Aber du mußt natürlich nicht alle Calibration Bytes deines Exemplars auslesen. Es reicht, wenn du das eine Byte, das für die von dir gewünschte Taktfrequenz gilt, mit einem ISP-Programmer ausliest. Dann kannst du es entweder direkt in dein Programm einbauen oder du schreibst es ins EEPROM, damit es dein Programm da findet. In jedem Fall muß dein Programm das für dein Exemplar des ATmega8 passende Calibration Byte ins OSCCAL Register schreiben. Der ATmega8 lädt beim Power-On Reset automatisch das Calibration Byte für 1MHz ins OSCCAL Register. Wenn du den ATmega8 mit 1MHz rennen läßt, dann mußt du also nichts tun. Für 2, 4 und 8MHz mußt du OSCCAL selber setzen. Und weil du das jeweilige Calibration Byte nicht zur Laufzeit lesen kannst, mußt du es zur Compilezeit tun. Erwin D. schrieb: > Warum bezeichnest du die Leute von Atmel als "Flachwichser"? Weil er glaubt, er würde cool(er) rüberkommen, wenn er Gossensprache verwendet. Ich würde sagen, das Gegenteil ist der Fall.
:
Bearbeitet durch User
Axel S. schrieb: > Weil er glaubt, er würde cool(er) rüberkommen, wenn er Gossensprache > verwendet. Ich würde sagen, das Gegenteil ist der Fall. Na immerhin hat er > den Faulen und > Dummen schon wesentlich mehr an kostenloser Dienstleistung erbracht, als > mir eigentlich zuzumuten ist. Und er hat mir empfohlen, englisch zu lernen, damit ich selber Datenblätter lesen kann. Da frage ich mich, ob sich er manchmal auch an seine eigenen Empfehlungen hält, statt immer nur das Maul aufzureißen und auf unterirdischem Niveau Gift und Galle zu verspritzen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.