28X2 a příkaz setfreq

jova
Příspěvky: 305
Registrován: 16 pro 2013, 11:40

28X2 a příkaz setfreq

Příspěvek od jova » 22 pro 2018, 22:35

Zdravím. Chtěl jsem se optat jak to funguje s externím oscilátorem?
Mám tento obvod a k němu připojený podle návodu krystal 4MHz.
Můžu nastavit frekvenci příkazem setfreq m16 frekvenci do 16MHz, díky krystalu příkazem em16 - 64 pak frekvenci 16 - 64MHz.
Potud je mi vše jasné.
Není mi ale jasné, jaký je rozdíl v té frekvenci nastavené příkazem mX a emX.
Používám totiž pro posílání dat na LCD příkaz serout x.x, N2400, xxx a ten mi funguje jen na to nastavení m16. Jak to nastavím na 16MHz tím em16 tak se z LCD stane nečitelný "rozsypaný čínský čaj". Nedokážu ten LCD ani rozchodit na 32MHz nastavených příkazem em32, což se mi běžně daří při vnitřním oscilátoru na jiných čipech (20M2, 20X2) běžících na 32Mz snížením rychlosti serout na N1200. Prostě při přepnutí příkazem na ten externí oscilátor mi přestane komunikovat LCD a já netuším proč :roll:

DavidO
Příspěvky: 748
Registrován: 01 kvě 2013, 21:27

Re: 28X2 a příkaz setfreq

Příspěvek od DavidO » 23 pro 2018, 00:42

Uvnitř Picaxe 28X2 je PIC18F25K22 a ten má hodiny takhle: buď se dají použít interní, ty mají tři různé frekvence ze kterých se dají odvodit ještě další (což v Picaxe pokryjou všechny ty možnosti kněco a mněco), anebo připojíš externí zdroj hodin, v tomhle případě tvůj krystal 4MHz a to je to emněco. Zatímco ty interní hodiny si můžeš nastavovat a vybírat jak chceš a podle toho to pak skutečně poběží rychlejc nebo pomalejc, s externím krystalem máš výsledný takt vždycky jednoznačně daný a nemůžeš si vybrat, je to 4x tolik. I kdybys s 4MHz krystalem nastavil jiné číslo než em16, tak to rychlejc nepojede. Aby to jelo na 64MHz, musel bys mít krystal 16MHz. Pokud použiješ em s jiným číslem, než 4xkrystal, tak jediné, co se stane, že se bude něco špatně počítat, pokud to vůbec bude fungovat, rychlejc to ale určitě nepoběží.

Další problém je, že s tím časováním na Picaxe asi je spojené nějaké nepříjemné historické dědictví (škarohlíd by řekl lenost programátorů co tvořili Picaxe), ale chová se to tak, že se nejspíš něco nepřepočítává podle aktuální frekvence, ale podle defaultu, který je pro tenhle Picaxe snad 8MHz. V českém popisu příkazu setfreq to je napsaná takhle: "Například při změně ze 4 MHz na 8 MHz, dojde u příkazu pause ke zkrácení doby čekání na polovinu." Podobně to tedy bude u sériové linky, když zrychlíš takt pomocí mněco, tak taky tak rychleji pojede komunikace - to je důvod, proč pro displej musíš při m32 nastavit serout na 1200.

To ale nevysvětluje, proč ti to s externím krystalem nefunguje, ani když em nastavíš správně na em16. Rozsypanej čaj obvykle způsobí špatná rychlost komunikace. Střelbou naslepo bych vyzkoušel různé jiné rychlosti, než N2400 (násobky a podíly mocninama dvojky), ale co přesně se děje, nevím. Problém ale může být i v těch hodinách jako takových. Jak je konkrétně zapojený ten krystal (fotka, schema?)? Běží ten Picaxe po změně na externí krystal vůbec - když nastavíš setfreq em16, dělá to po té změně vůbec něco, můžeš si třeba něco rozumného posílat do PC, nebo blikat LEDkou na měřitelné frekvenci?

jova
Příspěvky: 305
Registrován: 16 pro 2013, 11:40

Re: 28X2 a příkaz setfreq

Příspěvek od jova » 23 pro 2018, 01:43

Děkuji za vysvětlení.
Musím se omluvit za mystifikaci , mám tam samozřejmě připojený krystal 16MHz, nějak se mi tam připletly ty násobky 4. :oops:
Tak jsem tam nechal blikat led příkazem toggle a.0.
Při m16 a pause 4000 je interval ty 4 sekundy, ale při příkazu em a je jedno zda je to 16, 32 nebo 64, to bliká stejně, vždy po 1 sekundě!
Vůbec tomu nerozumím.Když tam nastavím rychlost pomocí setfreq mněco, tak se rychlost blikání mění. Když tam dám setfreq emněco, tak zústane pořád stejná. Co se vlastně pak mění? Rychlost zpracování těch "řádků" a ostatní věci jako je časování jsou odvozovány od té jedné frekvence 16MHz a jsou stejné?
Různé rychlosti komunikace jsem samozřejmě zkoušel, ale nenašel jsem žádnou s kterou by to bylo funkční při nastavení emněco, . Problém je, že mě to při tom nastavení emněco, nepustí příkaz serout pod N1200. Takže zřejmě se dostanu na rychlost komunikace kterou už to mé LCD nezvládá a program mi to zase nedovolí snížit. Takový začarovaný kruh :cry:
Zapojení krystalu je klasické podle doporučeného schématu.

Uživatelský avatar
fulda
Příspěvky: 816
Registrován: 04 led 2016, 17:18

Re: 28X2 a příkaz setfreq

Příspěvek od fulda » 23 pro 2018, 08:43

přelož si to takto: mněco je příkaz: nastav si vnitřní oscilátor na něco
zatímco emněco jen informuješ procesor, že jsi připojil krystal něco. On si nemá šanci ověřit, jestli je to pravda, musí ti věřit. Jen tu hodnotu něco použije při počítání třeba právě baudrate pro seriál.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

jova
Příspěvky: 305
Registrován: 16 pro 2013, 11:40

Re: 28X2 a příkaz setfreq

Příspěvek od jova » 23 pro 2018, 09:41

To by ale nevysvětlovalo, proč při příkazu em16 pracuje 4x rychleji než při m16.
Mimochodem, když tam ten krystal nezapojím a dám jakékoliv emněco, tak pracuje na své základní frekvenci 8MHz.
Naopak, když tam dám krystal 40MHz, tak se zdá, že pracuje úplně stejně jako s krystalem 16MHz. Asi bere nějaký harmonický kmitočet :roll:
Bohužel ani jedno neřeší můj problém s LCD. Asi zkusím dát do ně dát procesor 20X2 a zvednout mu frekvenci na 64MHz a nastavit vyšší baudrate pro seriál. Zatím tam mám 20M2 a N4800_32.

DavidO
Příspěvky: 748
Registrován: 01 kvě 2013, 21:27

Re: 28X2 a příkaz setfreq

Příspěvek od DavidO » 23 pro 2018, 10:05

Vysvětlovalo :) - připojil jsi krystal 16MHz a ať nastavíš emcokoli, jedeš na 64MHz. Když připojíš krystal 16 MHz a přepneš to na něj příkazem setfreq, tak to vždycky pojede na 64 MHz, ať nastavíš správně em64 nebo špatně em16.
V českém překladu manuálu je napsáno "U PICAXE řady X2 se frekvence externího oscilátoru dělí čtyřmi. Pak em40 odpovídá 10 MHz." V originále to je trochu jasnější: "Note that the X2 parts have an internal x4 PLL inside the chip. This multiplies the external resonator speed by 4. Therefore the external resonator value to be used is 1/4 of the desired final speed (ie in mode em40 use an external 10MHz resonator, for em16 use a 4MHz resonator)."
Fulda měl správněji napsat "emněco jen informuješ procesor, že jsi připojil krystal něco/4."

jova
Příspěvky: 305
Registrován: 16 pro 2013, 11:40

Re: 28X2 a příkaz setfreq

Příspěvek od jova » 23 pro 2018, 10:18

Už se mi z toho motá hlava, jdu do dílny na to vyrábět nějaký ten hardware. :)
Večer zkusím upravit to LCD a dám vědět.

DavidO
Příspěvky: 748
Registrován: 01 kvě 2013, 21:27

Re: 28X2 a příkaz setfreq

Příspěvek od DavidO » 23 pro 2018, 11:05

Default rychlost 8MHz s interním oscilátorem, tj m8. Takže když jsi měl m16 a N2400, tak podle mě komunikace jela ve skutečnosti na 4800 Baudů (nevím co máš za displej). Při em64 by se ty čísla nastavující rychlost měly dělit 8 (protože 64 je 8x víc než 8), takže by podle mě mělo být potřeba nastavit serout s N600. Ale to, obávám se, nepůjde. Ostatně ve FAQ o komunikaci se píše "The PICAXE X2 supports 1200, 2400, 4800 and 9600 baud rates at its default 8MHz operating speed. The baud rates will correspondingly double with every doubling of operating speed." takže i s těma nejnižíma 1200 jseš při 64MHz bohužel na reálných 9600 a proto ten rozsypaný čaj.

Možná by to ale mohlo jít pomocí hardwarového seriáku s tím, že displej se připojí na pin C.6 (asi - nejsem si úplně jistej, ale hserin má vyhrazený konkrétní pin a nemůžeš si vybrat):
hsersetup B4800_64, %10010
hresout 0,(nějaký data)

jova
Příspěvky: 305
Registrován: 16 pro 2013, 11:40

Re: 28X2 a příkaz setfreq

Příspěvek od jova » 23 pro 2018, 23:18

Ten pin C.6 funguje, ale bohužel se jen ten "rozsypaný čaj" různě přesýpá.
Zesynchronizovat se mi to nepovedlo ani při různých přenosových rychlostech serout.
Nepomohlo ani zvýšení přenosové rychlosti serin na maximum v tom LCD kde mám 20M2 na 32MHz.
Zaměnil jsem ho tedy za 20X2 a nastavil 64MHz, serin N9600_64. Když pak posílám texty, při těch em64MHz datovým tokem N1200, tak to ten LCD čte i z normálního portu bez problémů.
Zatím děkuji všem za rady, jdu zkusit roztočit servo při těch 64MHz, jsem zvědavý kolik z toho vymáčknu otáček při určitém počtu pulzů :)

DavidO
Příspěvky: 748
Registrován: 01 kvě 2013, 21:27

Re: 28X2 a příkaz setfreq

Příspěvek od DavidO » 23 pro 2018, 23:55

jova píše:
23 pro 2018, 23:18
Ten pin C.6 funguje, ale bohužel se jen ten "rozsypaný čaj" různě přesýpá.
A posílal jsi to s tím nastavením, co jsem radil? Příkazem hserout?
jova píše:
23 pro 2018, 23:18
Zaměnil jsem ho tedy za 20X2 a nastavil 64MHz, serin N9600_64. Když pak posílám texty, při těch em64MHz datovým tokem N1200, tak to ten LCD čte i z normálního portu bez problémů.
To dává smysl, protože 9600/8=1200.
Ale stejně jsem se asi ztratil v tom, co jak s čím máš propojené a nakonfigurované. No, jestli to nakonec nějak funguje, tak fajn, i když to je divný, tak aspoň něco :-)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti