Příklad programu na ovládaní krokového motoru

MilosPs3: Ja vim, ze upozornovani na pravopis na forech se tresta hlubokym opovrzenim, ale tohle mi neda :smiley: Mozna ze spis nez elektroniku by ses mel doucit pravopis. Kdyby tam byla 1 nebo 2 hrubky, tak jsem ticho, ale tohle je fakt husty :unamused: Ja vim, ze jsme na foru elektroniky, ale alespon nejaka kultura by se mohla dodrzovat :wink:

kuto: Kde je diatrika?! Když už do někoho rýpeš.

Ja nerypu do diakritiky, ale do pravopisu. Rozdil ti popisovat nebudu :wink:
Spojeni “nakreslyl na tabuly” a pod. by se snad nemelo vyskytovat ani u zaka 4. tridy zakladni skoly, natoz u stredoskolaka. Za tohle by nase generace ve skole propadala a na tu stredni bychom se ani nedostali. Dnes je to bohuzel celkem bezny jev.
Jinak jsem si vedom, ze upozornovani na pravopis je povazovano pomalu za trestny cin :smiley:

P.S. Velmi se omlouvam za offtopic, ale proste mi to nedalo.

no pokial to nemení vyznam ako napriklad byť a biť tak je to šum a fuk
i kedd je pravda že nekte to vyzera hrozne… avšak unika mi spojitosť s temou. Admin by to tu mal vymazať čo neje k teme.

zdravím

tak program už je nějak vytvořen ale není dobře… zde
chybu nedokážu najít … nerozumím tomu tak dobře, může mi zde někdo pomoct?

předem děkuji za odpověď.

cohovori simulaicva v MPlabe ? Hned prva vec nemas nastavene portz ako vystupne TRISA, TRISB… 0 znamenaju Out; 1 IN (u picu)

    movlw   b'11111111'     ; TRISA setup
    movwf   trisa
    movlw   b'11110000'     ; TRISB setup
    movwf   trisb

bohužel se to těžce popisuje když tomu nerozumím … každopádně ať mačkám zvýšení/snížení rychlosti tak to jede v cyklu

btfss tlac1

btfsc tlac1
goto Zrychlovani

INCF RYCHLOST,1
RETURN

btw: mám vývojové prostředí IDEA

A uz si tam natukal res skopiroval to co som ti napisal ? lebo v povodnom programe to maš zle.

A ta vasa idea nepise chyby…okrem toho ze premena rychlost nieje definovana pretože tam chyba pismenko, dalej prikazy goto odkazuju na nieco co konci returnom ??? navolanie podprogramu je Call meno podprogramu, a podprogram sa musi koncit returnom. Goto (chod na) udava len skok na nejaku adresu navest v programe.
IDEA nerozlisuje velke male pismena v navesti ?

Chyb je tam hodne ved to ani neprelozi…

Nevěš hlavu, na začátek je to dost dobrý. Jinak Atlan má pravdu, proveď to, co ti radil - v sekci Init si oprav nastavení registrů TRISx, ať ten MCU “ví”, co po něm vlastně chceme s těmi vstupy/výstupy. Já k tomu jen doplním, že nastavení TRISx by se hodilo dělat ještě před úvodním nastavením PORTx do výchozího stavu, tedy nejprve:

movlw b'11111111' ; TRISA setup - PORTA budou same vstupy movwf trisa movlw b'11110000' ; TRISB setup - PORTB 0 az 3 OUT, zbytek IN movwf trisb

a až poté třeba ono

movlw b'00010000' ; PORTA setup movwf porta movlw b'00000000' ; PORTB setup movwf portb
(i když v tomto případě mi není jasné, proč se snažíme nastavit vstup PORTA,4 do 1 - nemělo to být spíš něco na PORTB?)

Nstavení OPTION registru proveď radši jako první, ještě před nastavením funkce portů, tedy před těmu TRISx (i když vadit by to v tomto případě nemělo, protože výchozí nastavení po zapnutí je též FF, obecně správně ale je nastavit to jako první).

Zbytek vypadá, že by to mohlo nějak fungovat… vyzkoušej, a napiš co to dělalo/nedělalo, pak zkusíme vymyslet, co dál.

PS: Odkud je to “copypastlé”? :slight_smile: Na totálního začátečníka je to “až moc dobrý” (ale nic proti, taky jsem tak začínal) :wink:

neviem ci imto nedal ucitel aby to len opravili :smiley: inak chyba je este tu CEKEJ
CLRF CISLO
MOVLW RYCHLOST
MOVWF CISLOA

som zvedavy ci na to pridu :smiley:

P.O. najpr sa nastavuu porty z dovodu ze nevieme aky stav na nich je az potom sa inicializuje TRIS. To je zdovodu aby s anestalo ze po nastaveni TRIS sa vystup daneho portu nastavi do log0 aj ked tam chceme mat 1 (na zaciatku je v setko v stave vysokej impedancie) co by nebolo dobre ak by sa spustil nejaky proces a program by este ani nezacal poriadne bezať.

1: doporucuju prejit na MPLAB
2: vyhazet z programu nepotrebny casti kodu/promeny
3: precist si neco o instrukci GOTO a CALL , nekde sem to tu vysvetloval
4: prepsal sem ten tvuj kod pro MPLAB,ale jeste ti ho neukazu 8)

rekbych ze to jeste simulator nevidelo, a jestly jo tak ta IDEA je kvalitni :unamused:

zkopírované to není odnikud … vytvořili jsme to ve třídě…

momentální verze vypadá takto … IDEA ukazuje že je program bez chyb…

jinak je to poprvé a nejspíš i naposled co s tím pracuju … už jen protože to máme ve škole jen půl roku a že bych se tím živil asi nehrozí :smiley: … hlavně z toho nerupnout…

kdyz uz neberes na nase rady tak aspon

jeden problem
a druhej

CLRF CISLO MOVLW 1 MOVWF CISLOA takle to nebude fungovat, misto MOVLW 1 je treba zapsat instrukci ktera ti skopiruje obsah registru RYCHLOST do W :wink:

jeste se zeptam : ta IDEA ma i simulator ? skousel si si to osimulovat ?

takže místo MOVLW 1 napsat MOVLW RYCHLOST ?

simulátor jsem v idee nenašel.

Stále v tom máš chyby, program nebude fungovat. Chybně použitá kombinace instrukcí GOTO a RETURN(viz. MiloPS3 bod 3). Dále na co je použitá proměnná RYCHLOST? V programu je jen měněna její hodnota, ale dále se nikde nepoužívá. Také by mělo být ošetřeno maximum a minimum této proměnné.

Tj.:
Pokud bude RYCHLOST = 0 a provede se instrukce DECF RYCHLOST,1 bude výsledek RYCHLOST = 255.
Pokud bude RYCHLOST = 255 a provede se instrukce INCF RYCHLOST,1 bude výsledek RYCHLOST = 0.

Takže pokud by tato proměnná dále sloužila k časování dojde k chybě - po stisku tlačítka se rychlost nezvýší ale náhle sníží na 0(nebo z minima skočí na max otáčky).

nee, MOVLW → MOVE LITERAL TO W
potrebujes “Move F” , v DS je to napsany tak si ho otevri a najdi

pokud to nema simulator tak je jasny ze tam mas tolik chyb , ten simulator by ti to odhalil … , zahodit/rozslapat !

za to muze neznalost instrukci a hadavost , v prvnim kodu je to jasnejsi

krapet predbihas tet se toho lekne a utece :laughing:

problém s goto a return jsem nenašel …

bez ošetřování rychlosti se obejdu

a tohle je co ?goto Zrychlovani . . Zrychlovani ; zvyšování promene pro rychlost o 1 INCF RYCHLOST,1 RETURNto samy “Zpomalovani”
pokud ti nevadi pretejkani registru “RYCHLOST” … :unamused:

ten DS si uz otevrel ?

bohužel i přes pročtení DS nevím jak chybu opravit

Rozdíl mezi call a goto nevědí, protože programují ve vyšších jazycích a o stacku nikdy neslyšeli. Tudíž v tom ani nemůžou “shledat problém” :frowning:. Mimochodem “goto” bych ve vyšších jazycích zakázal. Akorát to dovoluje psát dobytkárny. V asm je to někdy nezbytné (např. když instrukce skoku nemá potřebný dosah).

Mimochodem - když znají javu a php, znají i C (jen o tom nevědí), což by pár problémů vyřešilo. Zůstala by “jen” práce s hw.

kokosak: V datasheetu se podívej, na rozdíl mezi goto a call instrukcemi a porovnej je s “return”. Uvidíš, která z nich je k return ta opačná, tedy správná.

Taky mě to zezačátku moc nelákalo, ale kždyž jsem si doma bastlil nějakou elektroniku, brzo mi v tom začalo “něco chybět” :slight_smile:. Trochu té inteligence tam zkrátka bez procesoru nedostaneš. Ovšem s assemblerem to taky nebylo dvakrát ono. To se ovšem s C rychle změnilo.