Stránka 1 z 14
Dotazy začátečníka
Napsal: 09 črc 2015, 09:17
od jova
Dovolím si založit nové vlákno a do něho dávat začátečnické dotazy s kterými si nevím rady.
Příkaz IF... THEN
V příručce
http://www.hobbyrobot.cz/wp-content/upl ... ry-RCR.pdf se praví: Za THEN nemusí
následovat jen adresa, ale také přímo jeden nebo více příkazů, které se provádí, je-li podmínka splněna...
Už jsem na to narazil několikrát kdy bych to rád použil, ale není mi jasné jakými zákonitostmi se to řídí.
Například tenhle příkaz funguje:
Kód: Vybrat vše
pins = %00000000
pause 200
if b1=0 then high 1 endif
Ale tento už ne:
Kód: Vybrat vše
pins = %00000000
pause 200
if b1=0 then pins = %0000001 endif
Kde dělám chybu?
Re: Dotazy začátečníka
Napsal: 09 črc 2015, 10:10
od AlesH
Chybu v zásadě neděláš nikde, to jen ten PICAXE BASIC má občas problém určit "co je co".
Nejbezpečnější a nejpřehlednější, je uvádět každý příkaz na samostatnou řádku. Pak obvykle žádné "syntaktické" problémy nevznikají:
Pokud se pokoušíš zapsat více příkazů do jednoho řádku, tak můžeš buď použít speciální znak ":" místo "odřádkování", např.:
Kód: Vybrat vše
if b1=0 then : pins = %0000001 : endif
Pokud má být mezi "then" a "endif" jen jeden jediný příkaz, tak problémy dělá obvykle "přiřazovací příkaz" a dá se to obejít explicitním použitím klíčového slova "let" (které se jinak většinou nemusí uvádět):
Kód: Vybrat vše
if b1=0 then let pins = %0000001 endif
Re: Dotazy začátečníka
Napsal: 09 črc 2015, 11:06
od jova
Díky moc.
Vše odzkoušeno, vše funkční.
PICAXE-28X2 a PWM
Napsal: 31 črc 2015, 22:17
od jova
Hraji si tu s PICAXE-28X2 a vyskytl se jeden problém. Při generování příkazem pwmout je výstupní perioda čistá. Pokud použiji příkaz pwmout pwmdiv4, nebo pwmdiv16, je v periodě další signál o mnohem vyšší frekvenci s proměným kmitočtem, viz video.
https://www.youtube.com/watch?v=M_-SEbQPXMM
Projevuje se to samozřejmě v otáčkách motoru. Netušíte kde se to tam bere?
Na procesor je připojen pouze potenciometr, napájení z baterek blokováno kondenzátory.
Program:
Kód: Vybrat vše
setfreq m8
start:
readadc c.4,b0
let w2=b0*2
pwmout pwmdiv16,C.1,b0,w2
goto start
Ještě, jak mám rozumět této větě z příručky?
· Pokud je u PICAXE 28X2 a 40X2 použit parametr pwmdiv 4, 16 nebo 64, pak další použití
příkazu pwmout tento parametr nastaví zpět na hodnotu jedna, což ovlivní očekávaný
výsledek.
Re: Dotazy začátečníka
Napsal: 13 srp 2015, 10:13
od jova
Re: Dotazy začátečníka
Napsal: 13 srp 2015, 12:57
od jrt
Díky, zas umřu o něco méně hloupý...
Re: Dotazy začátečníka
Napsal: 13 srp 2015, 14:36
od jova
Tak to já asi umřu jako blbec
Vůbec jsem nepřišel na to, jak ty jejich myšlenky zakomponovat, třeba do toho mého prográmku na otáčení krokového motoru.
Kód: Vybrat vše
setfreq m4
start:
pause 100
readadc c.4,b0
if b0<127 then vpred
if b0>129 then vzad
pwmout pwmdiv16, b.4, 0, 0
goto start
vpred:
high b.5
let b1=b0*2
pwmout pwmdiv16,b.4,b0,b1
goto start
vzad:
low b.5
let b0=255-b0
let b1=b0*2
pwmout pwmdiv16,b.4,b0,b1
goto start
Ať vložím ty příkazy kam chci, stejně když program skočí na načtení hodnoty z potenciometru, tak se běh motoru a jeho otáčky na ten okamžik změní. Pokud to ukončím tou smyčkou DO - LOOP tak je ta výstupní perioda "čistá" a nepřerušovaná, ale k čemu mi to je, když pak nemůžu měnit otáčky?
Re: Převod na BCD
Napsal: 24 zář 2015, 15:20
od jova
Zdravím mám tento problém. V jedné konstrukci používám obvod přesného času RTC3231 a potřeboval bych ho dokázat programově nastavit. Problém je, že pro nastavení musí být převedeno desítkové číslo na číslo BCD. Pomocí počítače se to dělá zápisem takto:
Kód: Vybrat vše
i2cslave %11010000, i2cslow, i2cbyte
let day = $14 ; 03 Note all BCD format
let year = $15 ; 03 Note all BCD format
let month = $02 ; 12 Note all BCD format
let date = $14 ; 25 Note all BCD format
let hour = $19 ; 11 Note all BCD format
let mins = $50 ; 59 Note all BCD format
let seconds = $00 ; 00 Note all BCD format
writei2c 14, ($0) ' DS3231 turn on $0 1hz pin3, turn off $4
writei2c 0,(seconds,mins,hour,day,date,month,year,control)
za $ se napíše konkrétní hodnota.
Rád bych to ale řešil přímo z procesoru přes proměnné které bych si nejprve na LCD nastavil a potom provedl zápis.
Bohužel příkazem: let seconds = $b0 to nefunguje. Nevíte jak se to řeší?
Re: Dotazy začátečníka
Napsal: 24 zář 2015, 18:29
od AlesH
Pokud máš PICAXE řady X2, tak můžeš použít operátor BINTOBCD. Tedy např. "seconds = bintobcd b0".
Re: Dotazy začátečníka
Napsal: 24 zář 2015, 19:54
od jova
Bohužel to hodlám provozovat na 14M2