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
PWMout a serout
Re: PWMout a serout
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
Re: PWMout a serout
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
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
Re: PWMout a serout
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
Re: PWMout a serout
Už jsem na to přišel způsoboval to příkaz debug.
Moc děkuji za pomoc.
Moc děkuji za pomoc.