pak jsem nahradil interní oscilátor za externí krystal 16MHz a
příkaz: Pulseout Portb.3, 400 samozřejmě přestal fungovat z důvodu změny míry časování...
Abych získal stejný efekt, musím použít Pulseout Portb.3, 1
nebo Pulseout Portb.3, 0 , tedy hodnotu 0 a 1 a zde je problém:
Jak udělat se stábvajícím krystalem to, abych hodnotu PERIOD u PULSEOUT mohl měnit po desetinkách=
0,1 0,2 0,3 0,4 0,5 0,6 .......... 1
jak funguje přepočítávání hodnot při použití interního 1MHz a externího 16MHz krystalu pro zachování stejné funkčnosti programu?
pak jsem nahradil interní oscilátor za externí krystal 16MHz a
příkaz: Pulseout Portb.3, 400 samozřejmě přestal fungovat z důvodu změny míry časování...
Abych získal stejný efekt, musím použít Pulseout Portb.3, 1
nebo Pulseout Portb.3, 0 , tedy hodnotu 0 a 1 a zde je problém:
Jak udělat se stábvajícím krystalem to, abych hodnotu PERIOD u PULSEOUT mohl měnit po desetinkách=
0,1 0,2 0,3 0,4 0,5 0,6 .......... 1
jak funguje přepočítávání hodnot při použití interního 1MHz a externího 16MHz krystalu pro zachování stejné funkčnosti programu?
děkuji
Interní nebo externí krystal je jedno - pouze správně nastavit fuse bity. Jde o vnitřní takt procesoru. Při použití 16MHz prostě ten puls bude 4x kratší než při použití 4MHz krystalu, a 16 x rychlejší než při použití 1MHz, toť vše. Takže proměnnou Period vynásob 4 ( při použití 16MHz namísto 4MHz), a mělo by to běhat.
Jinak co tik krystalu, to jedna instrukce ( teda skoro vždy). Takže při 1MHz ti běží interní taktování sběrnice procesoru na 1MHz, při 16MHz krystalu ti běží interní taktování na 16MHz. Takže všechno je 16 x rychlejší.
Pokud jsi tedy například někde při krystalu 1MHz generoval nějakou časový údaj, např. 16 vteřin, tak pokud jenom vyměníš za krystal 16MHz, tak ta doba bude místo 16 vteřin pouze jedna vteřina.
Po přidání ext. 16MHz krystalu se mi stalo, jak je uvedeno výše, že místo hodnoty na levé straně (pro názorný příklad jsou uvedeny vlevo náhodné hodnoty) musím psát hodnoty na pravé straně, které jsou reálné, tak to funguje, ale.......
400 je nyní 1
300 je nyní 0
hodnotě 350 tedy přísluší hodnota 0,5 ... mužu takovouto hodnotu nějak dostat do příkazu : PULSEOUT ? Jak se s desetinným číslem můžu poprat v PULSEOUT, pokud se jedná o jedno desetinné místo, třeba..takto?:
Po přidání ext. 16MHz krystalu se mi stalo, jak je uvedeno výše, že místo hodnoty na levé straně (pro názorný příklad jsou uvedeny vlevo náhodné hodnoty) musím psát hodnoty na pravé straně, které jsou reálné, tak to funguje, ale.......
400 je nyní 1
300 je nyní 0
hodnotě 350 tedy přísluší hodnota 0,5 ... mužu takovouto hodnotu nějak dostat do příkazu : PULSEOUT ? Jak se s desetinným číslem můžu poprat v PULSEOUT, pokud se jedná o jedno desetinné místo, třeba..takto?:
Jaký je obecně lepší příkaz a způsob pro ovládání serva?
PULSEOUT nebo něco jiného..PWM...? Z hlediska zatěžování procesoru, apod.?
děkuji
Nevím, pak ten příkaz pulseout funguj nějak divně. Nemám to teď jak ověřit, ale pokud je v návodu uvedeno, že pro 4MHz krystal je hodnota uvedena v us, pak např. pulseout portb,a,4000 by měl vygenerovat puls o délce 4ooous, čili 4 ms!. Pokud nahradíš krystalem 16MHz, pak by měl při stejné konfiguraci vygenerovat pulse 4 x kratší, čili 1ms. Pokud by to takhle fungovalo, pak nemusíš řešit žádné desetinky, protože vše budou násobky us, např. pro puls 1,25ms a krystelm 16MHz by jsi měl nastavit Pulseout portb,a,5000. (Pokud se teda nepletu).
děkuji opět za osvětlení...vyzkouším to jak se dostanu ke stolu a dám vědět, jestli to dopadlo...
Jinak jsem teď koumal ty desetinky a přišel jsem ke krásnému příkladu......kdyby náhodou někdo tuto věc řešil
Dim S As Single , Z As String * 10
S = 12.36789
Print S ' mame 12.36789
Z = Fusing(s , "#.#")
Print Z ' mame 12.3
tak badani zdar
Jen pro upřesnění, výsledek
S=12.36789
Z=fusing(s,"#.#")
Print Z bude výsledek 12,4 a nikoliv 12,3, protože fusing s #.# na konci zaokrouhluje. Jinak viz help Bascom
A počítat můžeš jen s tím single, string je jenom pro zobrazení
Bádání zdar
A jak by se dalo počítat prosím dále s tím STRING = 12,4....
Kdybych chtěl toto číslo použit, tedy počítat dále s jedním desetinným místem, dosazovat jej do příkazů, apod?
Zatím jsem vykoumal toto, což převádí ze string na číslo... ovšem...desetinné místo zmizí..pokud tam je..chapu, kvuli Integer, ale i tak...jde to nejak obelstit?
Dim Instring as String*10
Dim Varval as Integer
Instring = " 781"
Varval = Val(Instring)
'Varval = 781
Děkuji
Naposledy upravil michalino dne po srpen 17 2009, 12:39, celkově upraveno 1 krát.
String slouží pro uchovávání textu. Na začátku nadefinuješ nějakou proměnnou jako string, musíš určit její délku např. string*5 ti vytvoří v paměti místo pro 5 znaků.
Jelikož je to jenom textový řetězec, špatně se s ním počítá . V některých případěch se sice dá přetypovat na jiný typ, ale většinou to moc nejde.
Takže ideál je vše nejdříve spočítat pomocí matematických typů proměnných (byte, word, long, single a podobně) a pak už jen přetypovat na string a ten zobrazit.
Jinak pokud je to možné, vyhni se počítání s desetinou čárkou. Zabírá to moc paměti, výpočty trvají dlouho, zaokrouhlování a pod. Lepší je se tomu vyhnout. Někdy to ale nejde, no...
Doporučuji číst v manuálu k Bascomu, většinou tam najdeš, co hledáš.
Jinak pokud chceš počítat např. s číslem 12,4, tak nejlepší je asi vynásobit 10, dostaneš 124 ( což je obyčejný byte), pak provedeš výpočty co chceš a na konci podělit výsledek zase deseti Bude ti stačit jeden single a jeden byte a nikoliv stádo single proměnných.
Naposledy upravil popopepe dne po srpen 17 2009, 12:42, celkově upraveno 1 krát.
Tak popopepe, máš pravdu, při použití 16MHz krystalu jepři použití příkazu PULSEOUT nejlépe používat hodnoty od 6050 do 7200 ...
Tvůj výpočet tak byl správný v příspěvku výše, neboť odchylka je způsobena potenciometrem serva (buďto jeho natočením nebo zařazením pevného odporu místo toho potenciometru) a vše funguje mnohem s větším rozlišením a mnohem rychleji s tímto 16MHz krystalem, paráda
děkuju
PS: ty čísla s desetinnou čárkou mi moc nejsou jasná, hlavně zaokrouhlování, když dám číslo SINGLE
a mám třeba
12,5 + 12,5, tak mi to udělá: 12,600032+12,600032=25,000064 a já bych potřeboval dostat jen to 12,6+12,6=25,2 ...jedno desetinné místo ve formě čísla, které bych dále mohl zpracovat...
nepotřebuju to teď , jen mě zaujalo, že je to "problém" tak nad tím koumám...
Všeobecný problém výpočtů s desetinou čárkou. Zaokrouhlování a podobně. Pokud můžeš, tak se jim vyhni. Místo 12,5 +12,2 použij 125+122 a výsledek vyděl deseti.
Pokud to potřebuješ jen na zobrazení tak jukni na příkaz MOD.
Např.
dim a as byte
dim k as byte
dim c as word
Dim x as word
A=125 'ty chceš 12,5
k=122 'ty chceš 12,2
c=a+k 'výsledek je 247
lcd c
a teď ten trik
c=c/10 'výsledek je 24
cls
lcd c 'tady si ho zobraz
x=c mod 10 'výsledek je zbytek po dělení, tedy 0,7
lcd c;".";x 'zobrazí se ti výsledek 24.7
vyzkoušej a uvidíš
Samozřejmě na velké výpočty to není, pak použij single...
tak jsem zkoušel Tvůj program, nicméně mi pořád vypadával zbytek po dělení (příkaz MOD) hodnota = 0,4 ... tak jsem koumal a koumal, až mě Tvůj program dokoumal z předchozí tvé varianty:
Dim A As Byte
Dim K As Byte
Dim C As Word
Dim X As Word
Do
Input "Vlož X " , A ' vlozim 125 chci totiz 12,5
Input "Vloz Y " , K 'vlozim 122 chci totiz 12,2
C = A + K
Print C 'vyleze 247
c=c/10 'výsledek je 24
cls
Print "C/10 " ; C 'výsledek je 24
x=c mod 10 'výsledek je zbytek po dìlení, tedy 0,7
Print "C mod 10 " ; C ; "." ; X ' POZOR zobrazí se VYSLEDEK 24,4
' ma se zobrazit 24,7
Wait 1
Loop
End
*********************
na tuto novou variantu, která mi fakčí dobře:
$sim '!!!Odstranit pøi programování - zrychlení simulace (odstraní èasové prodlevy)
$regfile = "m8def.dat" ' specify the used micro
$baud = 9600
$crystal = 8000000 ' used crystal frequency
$hwstack = 100
$swstack = 64
$framesize = 64
''''''''''''''''''''''''''' HLAVNI PROGRAM '''''''''''''''''''''''''''''''''''
Dim R As Word
Dim B As Word
Dim U As Word
Dim Rest As Word
Dim Cest As Word
Input "Vlož R " , R
Input "Vloz B " , B
U = R + B
' Rest = R Mod B
Print "U=R+B = " ; U
Cest = U / 10
Print "U / 10 = " ; Cest
Rest = U Mod 10
Print "U mod 10 = " ; Rest
Print R ; "+" ; B ; "= " ; Cest ; "," ; Rest
End
vychytání následující tohoto programu spočívá v tom, že se do vstupních dvou čísel automaticky při následném výpisu Print R ; "+" ; B ; "= " ; Cest ; "," ; Rest zařadí desetinná čárka.. tedy když chci 12,3 napsat, tak napíšu do programu: 123 a na konci, by se měl nejen výsledek objevit s desetinnou čárkou, ale také zadávané hodnoty 12,3
to už ale si s tím nebudu tak hrát, zde přikládám program dle Tvých rad....princip je jasný, děkuji ti za pomoc a objasnění..
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2, 3, 4
Strana 4 z 4
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.