Dotazy začátečníka

Odpovědět
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Dotazy začátečníka

Příspěvek 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?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Dotazy začátečníka

Příspěvek 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í:

Kód: Vybrat vše

if b1=0 then
  pins = %0000001
endif 
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 
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Dotazy začátečníka

Příspěvek od jova »

Díky moc.
Vše odzkoušeno, vše funkční.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

PICAXE-28X2 a PWM

Příspěvek 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.
Naposledy upravil(a) jova dne 03 srp 2015, 08:20, celkem upraveno 1 x.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Dotazy začátečníka

Příspěvek od jova »

Odpovědi na tento problém jsem nalezl zde:
http://www.picaxeforum.co.uk/showthread ... 2-and-40X2
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: Dotazy začátečníka

Příspěvek od jrt »

Díky, zas umřu o něco méně hloupý... :D
jrt
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Dotazy začátečníka

Příspěvek od jova »

Tak to já asi umřu jako blbec :cry:
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?
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Převod na BCD

Příspěvek 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ší?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Dotazy začátečníka

Příspěvek od AlesH »

Pokud máš PICAXE řady X2, tak můžeš použít operátor BINTOBCD. Tedy např. "seconds = bintobcd b0".
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Dotazy začátečníka

Příspěvek od jova »

Bohužel to hodlám provozovat na 14M2 :(
Odpovědět