Sicher betrieb eins 16MHz atmel328P bei 3.3V

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

FrankenKai
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

Beitrag von FrankenKai » 14.05.2020, 08:14

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

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V

Beitrag von jp112sdl » 14.05.2020, 09:22

FrankenKai hat geschrieben:
14.05.2020, 08:14
Ergibt ein 8Mhz clk ohne löten
Was passiert, wenn man auf int. 8MHz umstellt, und den 16er da einfach auf der Platine rumschwingen lässt?
FrankenKai hat geschrieben:
14.05.2020, 08:14
Meine Idee ist die CKDIV8 fuse zu setzen und dann auf /2 umzustellen.
16 und CKDIV8 sind doch 2MHz ?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

FrankenKai
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

Beitrag von FrankenKai » 14.05.2020, 10:00

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

TomMajor
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

Beitrag von TomMajor » 14.05.2020, 11:12

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
Viele Grüße,
Tom

Benutzeravatar
stan23
Beiträge: 2038
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 582 Mal
Danksagung erhalten: 336 Mal
Kontaktdaten:

Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V

Beitrag von stan23 » 14.05.2020, 12:53

Der Abschnitt im Datenblatt hört sich allerdings so an als wäre genau das der Weg um in den erlaubten Bereich zu kommen:
ATmega_CLKPR.png
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

TomMajor
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

Beitrag von TomMajor » 14.05.2020, 13:10

das stimmt, hört sich so an.

ich habe noch mal einen Blick drauf geworfen und das hier entdeckt:
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.
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.
Viele Grüße,
Tom

FrankenKai
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

Beitrag von FrankenKai » 14.05.2020, 15:01

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

TomMajor
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

Beitrag von TomMajor » 14.05.2020, 15:58

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)
Viele Grüße,
Tom

FrankenKai
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

Beitrag von FrankenKai » 14.05.2020, 21:38

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

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Sicher betrieb eins 16MHz atmel328P bei 3.3V

Beitrag von jp112sdl » 14.05.2020, 21:43

FrankenKai hat geschrieben:
14.05.2020, 21:38
Zu merken daran dam man den Monitor auf 57600 anstatt 115200 einstellen muss.
Warum "anstatt 115200" ?
Die serielle Schnittstelle wird seit jeher mit 57600 bei den AskSin Projekten initialisiert.
Von daher sind die 57600 als "der Defaultwert" ganz richtig.
FrankenKai hat geschrieben:
14.05.2020, 21:38
DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“