PWMout a serout

Odpovědět
oldak
Příspěvky: 6
Registrován: 12 led 2014, 18:22

PWMout a serout

Příspěvek od oldak »

Dobrý den. Prosím můžete mi poradit jak vyřešit sériový přenos s LCD a zároveň PWMout u picaxe 14M2? Je to řešitelné?
Moc děkuji za radu. Olda
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: PWMout a serout

Příspěvek od jrt »

Výstup sériových dat by neměl generování pwm nijak ovlivňovat. Jaký s tím máte konkrétní problém?
jrt
oldak
Příspěvky: 6
Registrován: 12 led 2014, 18:22

Re: PWMout a serout

Příspěvek od oldak »

Pwm stale běží, ale při zápisu seriových dat se krátce změní frekvence a žárovka problikne.
Jsem tedy uplný začátečník a ještě dělám mnoho chyb.
Přiložím program, pokud se v něm tedy někdo vyzná.
děkuji

;picaxe 14M2
;kreveti akvarium

;w0 = pro PWM
;w1 = pro zobrazení PWM
;b4 = teplota v bin
;b5 =
;b6 = zoprazení % v ascii
;b7 = zoprazení % v ascii
;b8 = zoprazení % v ascii
;b9 = zap / vyp CO2
;b10 = teplota v ascii stovky
;b11 = teplota v ascii desítky
;b12 = teplota v ascii jednotky
;b13 = sekundy v BCD
;b14 = minuty v BCD
;b15 = hodiny v BCD
;b16 = stav stmívače
;b17 = hodiny v ascii
;b18 = hodiny v ascii
;b19 = minuty v ascii
;b20 = minuty v ascii
;b21 = sekundy v ascii
;b22 = sekundy v ascii


symbol prodleva = 0 ;symbol: rychlost svítání
symbol seconds = b13 ;proměná sekund
symbol mins = b14 ;proměná minut
symbol hour = b15 ;proměná hodin




;adresa DS1307 Nastavení hodin
i2cslave %11010000, i2cslow, i2cbyte

let hour = $09 ;Nastavení hodin BCD formát
let mins = $37 ;Nastavení minut BCD formát
let seconds = $00 ;Nastavení sekund BCD formát

;writei2c 0,(seconds,mins,hour) ;Kdyz zaktivnim nastavý čas





b16=77 ;nastavení režimu (77=M, 82=R, 90=Z)
b9=48 ;nastavení CO2 (48=0, 49=1)
pause 5000 ;prodleva inicializace displeje
serout c.4 , N2400 , (254,1) ;vymazání displeje

;serout c.4 , N2400 , (255,%00000001) ;test led


start:
readi2c 0,(seconds,mins,hour) ;načtení času

bcdtoascii seconds ,b21,b22 ;převod sekund
bcdtoascii mins ,b19,b20 ;převod minut
bcdtoascii hour ,b17,b18 ;převod hodin

readtemp c.0 , b4 ;načtení teploty
bintoascii b4, b10,b11,b12 ;převod teploty



;vyhodnocování
if b9=49 then high b.5 else low b.5 endif ;zapínání/vypínání CO2
if w0>500 then high b.1 else low b.1 endif ;zapne b.1 ventilator
if pinc.1=1 and pinc.3=1 then zsv ;manualně zapne svítaní
if pinc.2=1 and pinc.3=1 then zst ;manuálně zapne stmívání
if pinc.2=1 and pinc.1=1 then vled ;manuálně vypne LED
if pinc.1=1 then plus ;tlčítko +
if pinc.3=1 then co21 ;tlačítko co2
if pinc.2=1 then minus ;tlačítko -

if b15=$9 and b14=$0 and b21=48 then zsv ;hodiny zapnou svítání
if b15=$20 and b14=$30 and b21=48 then zst ;hodiny zapnou stmívání
if b15=$8 and b14=$30 and b21=48 then co22 ;hodiny zapnou CO2
if b15=$20 and b14=$0 and b21=48 then co20 ;hodiny vypnou CO2
if b15=$3 and b14=$0 and b21=48 then zled ;hodiny zapnou LED
if b15=$21 and b14=$0 and b21=48 then vled ;hodiny vypnou LED

if b16 = 82 then svitani ;skočí na svítaní
if b16 = 90 then stmivani ;skočí na stmívání
goto pwmb4


zled: ;zapne podsvětlení
serout c.4 , N2400 , (255,%00000001)
goto pwmb4

vled: ;vypne podsvětlení
serout c.4 , N2400 , (255,%00000000)
goto pwmb4


zsv: ;zapnutí svítání
b16 = 82
goto pwmb4


zst: ;zapnutí stmívání
b16 = 90
goto pwmb4

minus: ;manuální stmívání
b16 = 77 ;zastavení stmívače
if w0 = 0 then pwmb4
w0 = w0 - 100 min 0
if w0 >=0 and w0 <=1000 then pwmb4
w0 = 0
goto pwmb4


plus: ;manuální svítání
b16 = 77 ;zastavení stmívače
w0 = w0 + 100 max 1000
goto pwmb4

co21: ;zapínání/vypínání CO2
if b9=49 then co20
b9=49
goto pwmb4

co20: ;vypínání CO2
b9=48
goto pwmb4

co22: ;zapínání CO2
b9=49
goto pwmb4


svitani: ;nastavení proměné na svítání
if w0 = 1000 then plus
w0 = w0 + 1 max 1000
pause prodleva
goto pwmb4

stmivani: ;nastavení proměné na stmívání
if w0 = 0 then minus
w0 = w0 - 1 min 0
pause prodleva
if w0 >=0 and w0 <=1000 then pwmb4
w0 = 0
goto pwmb4


pwmb4: ;hlavní uloha

w1=w0/10 ;nastavení zobrazování %
bintoascii w1, b6,b7,b8

serout c.4 , N2400 , (254,192) ;zobrazování druhý řádek
if w1 = 100 then zob
if w1 < 100 then nez
zob:
serout c.4 , N2400 , ("svetlo:",b6,b7,b8,"% CO:",b9)
goto dal

nez:
serout c.4 , N2400 , ("svetlo: ",b7,b8,"% CO:",b9)
goto dal

dal:
PWMOUT b.2, 249, w0 ;PWM proces
pause 0



serout c.4, n2400, ( 254, 139 ) ;zobrazení teploty a režimu
serout c.4, n2400, (b16, " ", b11, b12, "C" )


serout c.4,N2400, (254, 128) ;zobrazení hodin
serout c.4,N2400, (b17,b18,58,b19,b20,58,b21,b22)

debug ;režim ladění

if b4>28 then vykri
if b4<28 then start

vykri:
b16=33
w0=0
goto start
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: PWMout a serout

Příspěvek od jrt »

Prostudovat váš program teď nemohu, tak jen připomínám, že příkaz pwmout se používá jen na začátku programu pro inicializaci pwm generátoru a pro nastavování činitele plnění se používá příkaz pwmduty.
jrt
oldak
Příspěvky: 6
Registrován: 12 led 2014, 18:22

Re: PWMout a serout

Příspěvek od oldak »

Už jsem na to přišel způsoboval to příkaz debug.
Moc děkuji za pomoc.
Odpovědět