pulseout Bascom

Chtěl bych se zeptat na funkci “pulseout” v Bascomu, píše se že jednotka je 1µs při kmitočtu 4MHz.
Změní se to pokud použiju vnitřní oscilátor 4,8MHz?

jestli máš na mysli použít ten program
co je demo v Bascomu:

Dim A As Byte
Config Portb = Output 'PORTB all output pins
Portb = 0 'all pins 0

Do
For A = 0 To 7
Pulseout Portb , A , 60000 'generate pulse
Waitms 250 'wait a bit

Next

Loop 'loop for ever

Tak víš jak získáš tu 1us?

chci použít tohle:

[code]$regfile = “attiny13.dat”
$crystal = 4800000

Config Portb.0 = Output
Dim A As Word
Do
For A = 1 To 20
Pulseout Portb , 0 , 1500
Waitms 20
Next
For A = 1500 To 1000 Step -10
Pulseout Portb , 0 , A
Waitms 20
Next
For A = 1 To 20
Pulseout Portb , 0 , 1500
Waitms 20
Next
For A = 1500 To 2000 Step 10
Pulseout Portb , 0 , A
Waitms 20
Next

Loop
End[/code]

  • pro generování pulsu 1,5ms na PB0
  • pak puls zmenšit na 1ms
  • pak se vrátit na 1,5ms
  • pak puls zvětšit na 2ms

jen chci vědět, jestli ty hodnoty budou odpovídat při kmitočtu vnitřního oscilátoru 4,8MHz nebo jestli je musím přepočítat a nebo použít externí krystal 4MHz

Tvůj kmitočet je 1,2 krát větší než 4 MHz.
Proto musíš zvětšit hodnoty v pulseout také 1,2 krát

Je dobré naučit se používat simulátor Bascomu.
Toto časování je tam pěkně vidět.

To AB : A neslouží k tomu náhodou $crystal = 4800000, aby člověku stačilo napsat Pulseout Portb , 0 , 1500 (zřejmě čas v us) a nemusel nic počítat ?

Tak beru zpět - píše se že jednotka je 1µs při kmitočtu 4MHz. AB má pravdu. Musíš parametr vynásobit hodnotou $crystal/4000000, abys dostal hodnotu v us …

Hodnota $crystal se zadává asi kvůli Waitms - mimochodem - funkcím Wait nad 1 ms se vyhýbej, jak můžeš. Procesor má pak plno práce s čekáním a nemá čas na jinou práci.

to neni spravne, pokud ma program dobre obslouzena preruseni, tak delsi cekani neni problem. Ale doporucuji pouzivat snycky cekani Waitms a Waitus, ktere jsou lepe definovany a jsou bezkomfliktni pri dobre zadanem kmitoctu oscilatoru. Navic Waitus lze pouzit v preruseni, protoze si sam schovava registry.

Jasně. Pokud Ti teda nevadí, že Waitms 500 bude trvat třeba 700 ms, protože Ti třeba každou 1 ms přijde přerušení, které musíš obsloužit a jehož obsluha se samozřejmě do trvání smyčky připočítává, pak je klidně používej. Já radši místo vytěžování procesoru nesmyslnýma Waitms smyčkama (resp. jejich ekvivalentama v C nebo ASM, protože s Bascomu neprogramuju) použiju raději čítač a příznaky, čímž dosahnu jednak konstantní časy a jednak časy přesné a nezávislé na počtu ostatních přerušení, které během té doby přijdou. A procesor může navíc využít čas na jinou, smysluplnější práci, než na čekání …