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í:

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 

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
Odpovědi na tento problém jsem nalezl zde:
http://www.picaxeforum.co.uk/showthread ... 2-and-40X2

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ý... :D

Re: Dotazy začátečníka

Napsal: 13 srp 2015, 14:36
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?

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 :(