Sicher betrieb eins 16MHz atmel328P bei 3.3V
Moderator: Co-Administratoren
-
- Beiträge: 179
- Registriert: 04.05.2020, 21:31
- System: CCU
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 8 Mal
Sicher betrieb eins 16MHz atmel328P bei 3.3V
Hallo,
mir stellt sich folgendes Problem.
Ich habe aus China jede menge "10Pcs Pro Mini ATMEGA328P Module 3.3V 8M Interactive PCB Board Geekcreit for Arduino - products that work with official Arduino boards" bekommen.
Leider ist die Überschrift irreführend und es handelt sich um 5V 16MHz Versionen.
Die 5V sind ja kein Problem, der LDO fliegt ja eh raus.
Meine Idee ist die CKDIV8 fuse zu setzen und dann auf /2 umzustellen. Siehe 9.12.2 Clock Prescale Register. (Atmel Manual)
Ergibt ein 8Mhz clk ohne löten
Habt ihr damit schon Erfahrungen gemacht?
Wird in der AskSinPP das CLKPR irgendwo angefasst? Sodass man dort eventuell anpassen müsste?
Verbraucht der 16MHz Quarz deutlich mehr Strom?
Es würde mich freuen hierzu feed back zu bekommen.
Gruß
Kai
mir stellt sich folgendes Problem.
Ich habe aus China jede menge "10Pcs Pro Mini ATMEGA328P Module 3.3V 8M Interactive PCB Board Geekcreit for Arduino - products that work with official Arduino boards" bekommen.
Leider ist die Überschrift irreführend und es handelt sich um 5V 16MHz Versionen.
Die 5V sind ja kein Problem, der LDO fliegt ja eh raus.
Meine Idee ist die CKDIV8 fuse zu setzen und dann auf /2 umzustellen. Siehe 9.12.2 Clock Prescale Register. (Atmel Manual)
Ergibt ein 8Mhz clk ohne löten
Habt ihr damit schon Erfahrungen gemacht?
Wird in der AskSinPP das CLKPR irgendwo angefasst? Sodass man dort eventuell anpassen müsste?
Verbraucht der 16MHz Quarz deutlich mehr Strom?
Es würde mich freuen hierzu feed back zu bekommen.
Gruß
Kai
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Was passiert, wenn man auf int. 8MHz umstellt, und den 16er da einfach auf der Platine rumschwingen lässt?
16 und CKDIV8 sind doch 2MHz ?FrankenKai hat geschrieben: ↑14.05.2020, 08:14Meine Idee ist die CKDIV8 fuse zu setzen und dann auf /2 umzustellen.
-
- Beiträge: 179
- Registriert: 04.05.2020, 21:31
- System: CCU
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 8 Mal
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Hi,
genau 16MHz/8 = 2MHz.
Um einen sicheren start bei 3.3V zu haben.
CKDIV8 fuse initialisiert CLKPR – Clock Prescale Register auf /8.
Dann kann man im startup das register CLKPR – Clock Prescale Register:
auf /2 umstellen was dann die 8MHz ergibt die ja für den sicheren betrieb bei 3.3V benötigt wird.
8MHz intern sollte auch gehen ist aber nicht so genau wir der Quarz. Und wenn der schon mal da rumschwingt...
Gruß
Kai
genau 16MHz/8 = 2MHz.
Um einen sicheren start bei 3.3V zu haben.
CKDIV8 fuse initialisiert CLKPR – Clock Prescale Register auf /8.
Dann kann man im startup das register CLKPR – Clock Prescale Register:
auf /2 umstellen was dann die 8MHz ergibt die ja für den sicheren betrieb bei 3.3V benötigt wird.
8MHz intern sollte auch gehen ist aber nicht so genau wir der Quarz. Und wenn der schon mal da rumschwingt...
Gruß
Kai
-
- Beiträge: 1793
- Registriert: 30.08.2017, 23:25
- Hat sich bedankt: 175 Mal
- Danksagung erhalten: 399 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
wenn du vom 16MHz Quarz abgeleitet dein sysclk betreiben willst aber mit 3,3V arbeitest bist du außerhalb der Spec, egal wie du CLKPR einstellst. Das wäre zumindest meine Interpretation, weil die hohe Frequenz ja trotzdem vor der sysclk entsteht.
https://github.com/TomMajor/SmartHome/t ... s_Spannung
https://github.com/TomMajor/SmartHome/t ... s_Spannung
Viele Grüße,
Tom
Tom
- stan23
- Beiträge: 2041
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 586 Mal
- Danksagung erhalten: 337 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Der Abschnitt im Datenblatt hört sich allerdings so an als wäre genau das der Weg um in den erlaubten Bereich zu kommen:
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
-
- Beiträge: 1793
- Registriert: 30.08.2017, 23:25
- Hat sich bedankt: 175 Mal
- Danksagung erhalten: 399 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
das stimmt, hört sich so an.
ich habe noch mal einen Blick drauf geworfen und das hier entdeckt:
ich habe noch mal einen Blick drauf geworfen und das hier entdeckt:
Dann würde das Safe Operating Area Diagramm nur ab Sysclk gelten und nicht für den ganzen Chip (hätten sie auch hinschreiben können), würde bedeuten die Quarz Clk Erzeugung bis Sysclk würde auch bei niedrigem Vcc für max. Quarzfreq. gehen. Neue Erkenntnis für mich.Table 13-3. Low Power Crystal Oscillator Operating Modes (1)
Note:
1. If the crystal frequency exceeds the specification of the device (depends on V CC ), the CKDIV8 Fuse
can be programmed in order to divide the internal frequency by 8. It must be ensured that the
resulting divided clock meets the frequency specification of the device.
Viele Grüße,
Tom
Tom
-
- Beiträge: 179
- Registriert: 04.05.2020, 21:31
- System: CCU
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 8 Mal
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Na da freue ich mich ja was beizutragen.
Die 5V 16MHz dinger die ich bekommen habe sind fast 3$ günstiger wie die 3.3V typen ...
Nicht desto trotz muss man dafür den startup code anpassen.
Mit der fuse auf 8MHz internal clock zu gehe ist etwas einfacher.
Weiß wer wo die richtige stelle im Startup ist?
Eventuell muss auch die Low-Power lib wissen das sie anders initialisieren muss.
Gruß
Kai
Die 5V 16MHz dinger die ich bekommen habe sind fast 3$ günstiger wie die 3.3V typen ...
Nicht desto trotz muss man dafür den startup code anpassen.
Mit der fuse auf 8MHz internal clock zu gehe ist etwas einfacher.
Weiß wer wo die richtige stelle im Startup ist?
Eventuell muss auch die Low-Power lib wissen das sie anders initialisieren muss.
Gruß
Kai
-
- Beiträge: 1793
- Registriert: 30.08.2017, 23:25
- Hat sich bedankt: 175 Mal
- Danksagung erhalten: 399 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
falls das funktioniert könnte man einfach jeden 16MHz Pro Mini für AskSinPP Projekte mit 3V nehmen. Entweder die 3V direkt an VCC einspeisen oder den LDO auf 3,3V Typ tauschen falls man eine höhere Spannung über RAW einspeisen will.
Und dabei nie vergessen 1) die CKDIV8 Fuse zu setzen und 2) CLKPR zur Laufzeit früh zu ändern
Den CLKPR change würde ich so früh wie möglich machen, im sketch wäre das die erste Zeile in
void setup()
Falls das nicht reicht gibt es glaub ich Möglichkeiten, über init sections noch früher eigenen code auszuführen der das CLKPR ändert (hatte ich früher mal gemacht, aber ohne Arduino Umgebung)
Und dabei nie vergessen 1) die CKDIV8 Fuse zu setzen und 2) CLKPR zur Laufzeit früh zu ändern
Den CLKPR change würde ich so früh wie möglich machen, im sketch wäre das die erste Zeile in
void setup()
Falls das nicht reicht gibt es glaub ich Möglichkeiten, über init sections noch früher eigenen code auszuführen der das CLKPR ändert (hatte ich früher mal gemacht, aber ohne Arduino Umgebung)
Viele Grüße,
Tom
Tom
-
- Beiträge: 179
- Registriert: 04.05.2020, 21:31
- System: CCU
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 8 Mal
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Hallo,
hab nun etwas getestet:
wen mann:
in void setup () {
// set prescaler to /2 due to 16MHz Quarz
CLKPR=0x80;// write CLKPCE: Clock Prescaler Change Enable
CLKPR=0x01;//write CLKPS3..0: Clock Prescaler Select Bits 3 - 0 to /2
//
DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
........
ergänzt läuft der 329P auf 8 MHz wenn ein 16MHz quarz bestückt ist.
Zu merken daran dam man den Monitor auf 57600 anstatt 115200 einstellen muss.
Ansich unabhängig von der Fuse!
Nur ist es laut spec nur mit fuse CKDIV8 sichergestellt das die CPU beim Code ankommt.
Kleiner Nebeneffekt ist leider, dass der bootloader nicht mehr funktioniert (baudrate ist zu langsam (1/8)).
Also müste man mit dem ISP hochlader oder die fuse erstmal normal lassen.
Bei Zimmertemperature und normalen 3.3V wird es ja meistens gehen.
Der startup der CPU bis zum setup(); wird auch deutlich langsamer sein.
Aber man kann so auch die 5V 16MHz version bei 3.3V sicher mit Quarz betreiben.
Das spart zu mindestens den ärgen das einen die Chinesen mal wieder beschissen haben.
Gruß
Kai
hab nun etwas getestet:
wen mann:
in void setup () {
// set prescaler to /2 due to 16MHz Quarz
CLKPR=0x80;// write CLKPCE: Clock Prescaler Change Enable
CLKPR=0x01;//write CLKPS3..0: Clock Prescaler Select Bits 3 - 0 to /2
//
DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
........
ergänzt läuft der 329P auf 8 MHz wenn ein 16MHz quarz bestückt ist.
Zu merken daran dam man den Monitor auf 57600 anstatt 115200 einstellen muss.
Ansich unabhängig von der Fuse!
Nur ist es laut spec nur mit fuse CKDIV8 sichergestellt das die CPU beim Code ankommt.
Kleiner Nebeneffekt ist leider, dass der bootloader nicht mehr funktioniert (baudrate ist zu langsam (1/8)).
Also müste man mit dem ISP hochlader oder die fuse erstmal normal lassen.
Bei Zimmertemperature und normalen 3.3V wird es ja meistens gehen.
Der startup der CPU bis zum setup(); wird auch deutlich langsamer sein.
Aber man kann so auch die 5V 16MHz version bei 3.3V sicher mit Quarz betreiben.
Das spart zu mindestens den ärgen das einen die Chinesen mal wieder beschissen haben.
Gruß
Kai
-
- Beiträge: 12116
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 849 Mal
- Danksagung erhalten: 2150 Mal
- Kontaktdaten:
Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V
Warum "anstatt 115200" ?FrankenKai hat geschrieben: ↑14.05.2020, 21:38Zu merken daran dam man den Monitor auf 57600 anstatt 115200 einstellen muss.
Die serielle Schnittstelle wird seit jeher mit 57600 bei den AskSin Projekten initialisiert.
Von daher sind die 57600 als "der Defaultwert" ganz richtig.