|
Van valakinek Pic Basic Pro 2.46 -ról 3-ra frissitése kölcsön? 18F2520 hoz szeretnék programot fordítani, de az én verzióm nem támogatja.
Sziasztok!
az lenne a problémám, amire nem találok sehol példát, pedig nagyon egyszerű lehet, hogy egy gombbal szeretnék egy ledet be, majd kikapcsolni.Tehát ha megnyomom a gombot, akkor bekapcsol, ha mégegyszer megnyomom, akkor kikapcsol...
Köszi: Driver
Üdv!
eleje:
if portb.0=0 then
toggle portb.1
elenged:
if portb.0=0 then goto elenged
goto eleje
Thowra példájában az if nincs lezárva. Plusz a picben lévő felhúzóellenállások használatával "portb.0=0" helyett "portb.0=1"-et kellene írni. Így megspórolható a fel/le-húzó ellenállás... Ettől függetlenül elképzelhetőnek tartom, hogy Thowra példája nem fog megfelelően működni... próbáld meg ezt is:
TRISB.0=1 'bemenet legyen a portb.0
WPUB.0=1 'felhúzó ellenállás bekapcsalása a portb.0 lábra
OPTION_REG.7=0 'felhúzó ellenállások lehetőségének bekapcsolása
porog:
if portb.0=0 then
toggle portb.1
WHILE portb.0=0
wend
pause 100
endif
goto porog
A hozzászólás módosítva: Ápr 5, 2013
Sziasztok!
Tudnátok abban segíteni hogy hogyan tudnám megoldani két pic kommunikációját. Próbálkoztam a serin, a serin2, és a debugin paranccsal de nem igazán értem hogy hogyan kell használni.
ui.: Elég kezdő vagyok de nagyon érdekel a dolog. A hozzászólás módosítva: Máj 15, 2013
Üdv!
A serin <> serout nagyon egyszerű.
Összekötöd a 2 picet, elvileg tetszőleges I/O lábbal (én a saját TX és RX lábait használom ha van neki). A küldés így néz ki:
SEROUT PORTB.2,84 ,[ "TESZT"]
SEROUT, port, port, pin, BAUD, [adat]
A súgóba megtalálod a baud rate értékeket egy táblázatba a serin vagy serout lapon.
Ezt kell beírni a 84 helyett.
Az adatfogadás hasonló:
stlim:
gosub varakozik
toggle portb.3
SERIN PORTB.1,84 , 100 , stlim , [ind]
az stlim egy címke a serin előtt, ha nem érkezik adat ide ugrik vissza. Az idő amíg figyel a 100.
A vett érték az ind változóba kerül, ezt a program elején meg kell adni.
A 84 helyett itt is a táblázatból kell az érték.
Írtam egy programot az általad írt programrészlettel de nem igazán akar működni. Mellékeltem a programot, ha valakinek lesz ideje és rápillantana akkor megköszönném.
A programod elindul de a proteusba kihagytad a MCLR láb felhúzó ellenállását.
Ha azt berakod megy a program. Az A port nem vált magas szintre amikor veszi az adatot, ennek oka lehet a port beállítása vagy a nem megfelelő baud érték.
köszi a segítséget!
nem igazán akarja az igazat de majd most a hétvégén még próbálkozom.
Kijavítottam a proteusba a rajzot.
A programodak kicsit módosítottam mert most nincs fent a pbp ami rendesen kezelné de a hiba alapvetően az a te progidba, hogy:
-baud ráta nem megfelelő, 396 ra kell állítani a 2400 as baudhoz, lásd táblázat.
-a küldésnél "1" et írtál de 1 et vártál a vevőnél, ezek nem azonosak (szöveg és szám)
Ha a panel még nincs kész, érdemes gomb bemenetnek a portb valamely lábát használni mert megspórolod a felhúzó ellenállást (Belső felhúzók bekapcsolására a portb_pullups=true parancs szolgál.).
Köszönöm a segítségedet Thowra! D
Már a üzeneted előtt át javítottam a baud-ot de ezek szerint az idézőjeleken bukott el a dolog.
És pluszba megtanultam hogy hogy kell beállítani a felhúzó ellenállásokat
Most már tudok írni egy jó kis programot....
Itt a proton basic-ről van szó? Köszi.
Igen, bár néha más basic programokról is szó van pl MicroCode.
Kedves picbasic-ban jártas fórumozók!
Van egy picbasic-ban íródott hőmérő program ami 7 szegmenses led kijelzőn jeleníti meg a hőmérsékletet. A baj az vele, hogy közös katódos kijelzőt használ, nekem viszont közös anódos kijelzőim vannak ( több is). Én magam mikropascalban programozok így nem igen értek a picbasic-hoz szeretnék segítséget kérni, hogy a kimeneti portokon közös anódós meghajtás jöjjön ki. Vagyis a lábak kimeneti szintjét meg kéne fordítani. Tud valaki ebben segíteni?
Köszi. A hozzászólás módosítva: Jún 4, 2013
Üdv!
A forrást fel tudod tenni?
Szia !
Igen.
'****************************************************************
'* Name : TERMOMETRE.BAS *
'* Author : [FERHAT YOL] *
'* Notice : DS18B20'li oda termometresi] *
'* : *
'* Date : 12.02.2011 *
'* Version : 1.0 *
'* Notes : Isý sensörü olarak DS18B20 kullanýlacaktýr. Sensör*
'* : kablosu 15 metreden fazla olamasý halinde DS18B20 *
'* : Data bacađýna bađlý olan 4.7K direnci 2.2K direnç *
'* : ile deđiţtirilmesi gerekmektedir. *
'****************************************************************
DEFINE OSC 4
@ DEVICE pic16F628, WDT_ON 'Watch Dog timer açýk
@ DEVICE pic16F628, PWRT_ON 'Power on timer açýk
@ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalý
@ DEVICE pic16F628, MCLR_off 'MCLR pini kullanýlMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanýlacak
TRISA=%10111000
TRISB=%00000000
PORTA=0ORTB=0
CMCON=7 'Comparatör pinleri iptal hepsi giriţ çýkýţ
ON INTERRUPT GoTo KESME 'kesme oluţursa KESME adlý etikete git.
'presc:000=1/2, 001=1/4, 010=1/8, 011=1/16, 100=1/32, 101=1/64, 110=1/128,111=1/256
OPTION_REG=%00000011 'Pull up dirençleri ÝPTAL- Bölme oraný 1/16
INTCON=%10100000 'Kesmeler aktif ve TMR0 (bit5) kesmesi aktif
TMR0=99
'---------------------------PIN TANIMLAMALARI-----------------------------------
SYMBOL SET=PORTA.5
SYMBOL YUKARI=PORTA.4
SYMBOL ASAGI=PORTA.3
SYMBOL DIG0=PORTA.0
SYMBOL DIG1=PORTA.1
SYMBOL DIG2=PORTA.2
'-------------------------------------------------------------------------------
ROLE VAR PORTA.6
'-----------------------------DEĐÝŢKENLER---------------------------------------
SAYAC VAR BYTE
SIRA VAR BYTE
SAYI VAR BYTE
TERM VAR WORD
ISIS VAR WORD
ONDA VAR BYTE
AKTAR1 VAR BYTE
AKTAR2 VAR BYTE
AKTAR3 VAR BYTE
SYC VAR BYTE
SNS VAR BYTE
SNY VAR BYTE
ISIH VAR BYTE
ISIL VAR BYTE
TUS VAR BIT
DP VAR BIT
W VAR BIT
U VAR BIT
Z VAR BYTE
X VAR BYTE
I VAR WORD
'---------------------------------ISI TANIMLAMALARI-----------------------------
Busy VAR BIT ' Busy Status-Bit
HAM VAR WORD
ISI VAR WORD ' Sensör HAM okuma deđeri
Float VAR WORD ' Holds remainder for + temp C display
ISARET_BITI VAR HAM.11'Bit11 ' +/- sýcaklýk Ýţaret biti, 1 = olursa eksi sýcaklýk
EKSI_ISI CON 1 ' Negatif_Cold = 1
SERECE CON 223 ' ° iţareti
ISARET VAR BYTE
Comm_Pin VAR PORTA.7
'--------------------------------------------------------------
BASLANGIC P= 0'--------------------BAŢLANGIC------------------------------------
gosub EKRAN3
gosub SENSORYAZ
GOSUB SENSOROKU
read $0,ISIL
READ $1,ISIH
READ $2,SNS
IF ISIL>99 THEN ISIL=0
IF ISIH>9 THEN ISIH=0
IF SNS>50 THEN SNS=0
TERM=(ISIL*10)+ISIH
ISIS=TERM-SNS
GOSUB DELAY1
DP=1:W=1:SYC=0
BASLA:'----------------------------ANA DONGÜ------------------------------------
GOSUB EKRAN
GOSUB SENSOROKU
GOSUB KONTROL
IF TUS=1 THEN GOTO AYAR
GOTO BASLA
'--------------------------------ALT PROGRAMLAR---------------------------------
SENSOROKU:
OWOUT Comm_Pin, 1, [$CC, $44]' ISI deđerini oku
Bekle:
OWIN Comm_Pin, 4, [Busy] ' Busy deđerini oku
IF Busy = 0 THEN Bekle ' hala meţgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' Ýki byte oku ve okumayý bitir.
GOSUB Hesapla
RETURN
SENSORYAZ: 'okumaya hazýrlan..
OWOUT Comm_Pin, 1, [$CC,$4E, $FF, $FF, $7F]
OWOUT Comm_Pin, 1, [$CC,$48]
OWOUT Comm_Pin, 1, [$CC,$B8]
OWOUT Comm_Pin, 1, [$CC,$BE]
return
Hesapla: ' Ham deđerden Santigrat derece hesabý
ISARET = "+"
IF ISARET_BITI = EKSI_ISI THEN
ISARET = "-"
ham=~ham+2
endif
float = (HAM*10)/16
RETURN
END
RETURN
KONTROL: ' Role kontrol..
IF ISIS=>FLOAT THEN
SYC=SYC+1
IF SYC=>3 THEN
SYC=3:HIGH ROLE
ENDIF
endIF
IF FLOAT=>TERM THEN
SYC=0:LOW ROLE
ENDIF
RETURN
DELAY: 'gecýkme 1
FOR I=0 TO 150:NEXT
RETURN
DELAY1:'gecýkme 2
FOR I=0 TO 12000:NEXT
RETURN
DELAY2:'gecýkme 3
FOR I=0 TO 125:NEXT
RETURN
EKRAN:'Sýcaklýk gösteriliyor.
Z=FLOAT DIG 0:GOSUB AL:AKTAR1=SAYI
Z=FLOAT DIG 1:GOSUB AL:AKTAR2=SAYI
Z=FLOAT DIG 2:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN1: 'SET yazýsý
Z=14:GOSUB AL:AKTAR1=SAYI
Z=13:GOSUB AL:AKTAR2=SAYI
Z=5:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN2:'Set deđeri gösteriliyor
Z=TERM DIG 0:GOSUB AL:AKTAR1=SAYI:IF U=1 THEN AKTAR1=0
Z=TERM DIG 1:GOSUB AL:AKTAR2=SAYI
Z=TERM DIG 2:GOSUB AL:AKTAR3=SAYI
RETURN
EKRAN3:
AKTAR1=64
AKTAR2=64
AKTAR3=64
RETURN
EKRAN4:'Hassasiyet ekraný
Z=SNS DIG 0:GOSUB AL:AKTAR1=SAYI:IF U=1 THEN AKTAR1=0
Z=SNS DIG 1:GOSUB AL:AKTAR2=SAYI
aktar3=0
RETURN
AL: LOOKUP Z,[63,6,91,79,102,109,125,7,127,111,99,57,64,121,120],SAYI :RETURN'Karekter al
KAYDET: 'Deđerler eproom'a kaydediliyor..
WHILE TUS=1:WEND
ISIL=TERM/10
ISIH=TERM//10
WRITE $0,ISILAUSEUS 2
WRITE $1,ISIHAUSEUS 2
WRITE $2,SNSAUSEUS 2
GOTO BASLANGIC
AYAR: 'Menuye gýrýs
WHILE TUS=1:WEND
DP=0
GOSUB EKRAN1
GOSUB DELAY1
READ $0,ISIL
READ $1,ISIH
TERM=(ISIL*10)+ISIH
DP=1:syc=0:SNY=0:W=0
MENU:
IF YUKARI=0 THEN
W=1:U=0:sny=0
TERM=TERM+1
WHILE YUKARI=0
SYC=SYC+1:GOSUB DELAY
IF SYC>40 THEN
SYC=50:TERM=TERM+1:GOSUB DELAY
ENDIF
GOSUB EKRAN2
IF TERM>990 THEN TERM=0
WEND
SYC=0:IF TERM>999 THEN TERM=990
ELSE
W=0
ENDIF
IF ASAGI=0 THEN
W=1:U=0:sny=0
TERM=TERM-1
WHILE ASAGI=0
SYC=SYC+1:GOSUB DELAY
IF SYC>40 THEN
SYC=50:TERM=TERM-1:GOSUB DELAY
ENDIF
GOSUB EKRAN2
IF TERM>999 THEN TERM=990
WEND
SYC=0:IF TERM>999 THEN TERM=990
ELSE
W=0
ENDIF
IF TUS=1 THEN
GOTO SENSIVITY
ENDIF
GOSUB EKRAN2
GOTO MENU
SENSIVITY: '| menusu giriţ..
WHILE TUS=1:WEND
read $2,sns
IF SNS>50 THEN SNS=0
DP=1:SNY=0
SENS:
GOSUB EKRAN4
IF YUKARI=0 THEN
W=1:SNY=0:U=0
SNS=SNS+1
WHILE YUKARI=0
SYC=SYC+1:GOSUB DELAY
IF SYC>40 THEN
SYC=40:SNS=SNS+1:GOSUB DELAY2
ENDIF
GOSUB EKRAN4
IF SNS=>50 THEN SNS=50
WEND
SYC=0:IF SNS=>50 THEN SNS=50
ELSE
W=0
ENDIF
IF ASAGI=0 THEN
W=1:U=0:sny=0
SNS=SNS-1
WHILE ASAGI=0
SYC=SYC+1:GOSUB DELAY
IF SYC>40 THEN
SYC=40:SNS=SNS-1:GOSUB DELAY2
ENDIF
GOSUB EKRAN4
IF SNS>50 THEN SNS=0
WEND
SYC=0:IF SNS>50 THEN SNS=0
ELSE
W=0
ENDIF
IF TUS=1 THEN
GOTO KAYDET
ENDIF
GOTO SENS
Disable
KESME: 'kesme alt programý
IF SET=0 THEN
TUS=1
ELSE
TUS=0
ENDIF
IF W=0 THEN
SNY=SNY+1
IF SNY=>120 THEN
U=1
ELSE
U=0
ENDIF
ENDIF
IF SNY=>240 THEN SNY=0
SAYAC=SAYAC+1
If SAYAC>2 then SAYAC=0
If SAYAC=0 then
DIG2=0
PORTB=AKTAR1
DIG0=1
PAUSEUS 2
Endif
If SAYAC=1 then
DIG0=0
PORTB=AKTAR2
PORTB.7=DP
DIG1=1
PAUSEUS 2
Endif
If SAYAC=2 then
DIG1=0
PORTB=AKTAR3
DIG2=1
PAUSEUS 2
Endif
TMR0=160
INTCON.2=0
Resume
Enable
end
A hozzászólás módosítva: Jún 4, 2013
A hangulat jelek helyén ":" szerepel.
A számokat, pontosabban a portra menő kódot ez a sor tartalmazza:
Idézet: „AL: LOOKUP Z,[63,6,91,79,102,109,125,7,127,111,99,57,64,121,120],SAYI”
A port bekötése ha jól számoltam olyan, hogy a kijelző A szegmens a port0 és a G pedig port7
Így kijeön, hogy a 63 felel meg a nullának és a 111 a 9 nek.
99 = A, B, F, G (fok jel)
57 = A, D, E, F (nagy C)
64 = G (kötőjel)
121 = A, D, E, F, G (kis t betű)
120 = D, E, F, G (nagy E betű)
fojt köv
Ez a rész lépteti a digiteket
If SAYAC=0 then
DIG2=0
PORTB=AKTAR1
DIG0=1
PAUSEUS 2
Endif
If SAYAC=1 then
DIG0=0
PORTB=AKTAR2
PORTB.7=DP
DIG1=1
PAUSEUS 2
Endif
If SAYAC=2 then
DIG1=0
PORTB=AKTAR3
DIG2=1
PAUSEUS 2
Endif
A DIG1=0, DIG2=1... átírásával (DIG1=1, DIG2=0....) megfordíthatod a taranyók bázisára menő jelet.
Sajnos most raktam újra a rendszert és nincs fent a fordió azon verziója ami ezt le tudja fordítani .
OK, ez akkor a digitek kimenetén megfordítja a jelet és egy pnp tranzisztorral, tudok feszt adni a közös anódra.
De a portb-n levő jelet is meg kell fordítani, hogy megkapjam a katódok vezérlését is.
Ezt hogyan tegyem?
Igen, azt is meg kell.
ezt számolgatni kell.
eredetileg azok a szegmensek kapnak jelet amit látni szeretnénk, pl ha kell B és C szegmens (1 es szám) akkor 6 ot küldött a program. Most viszont azokat kell bekapcsolni amiket NEM szeretnénk látni, tehát minden mást. Az 1 es számhoz 255-6 azaz 249 kell.
eredeti:
Idézet: „AL: LOOKUP Z,[63,6,91,79,102,109,125,7,127,111,99,57,64,121,120],SAYI”
módosított:
AL: LOOKUP Z,[192,249,164,176,153,146,130,248,128,144,156,198,191,134,135],SAYI
OK megértettem. Köszi a segítséget.
Van még egy kérdés?!
A dp több helyen szerepel. Változtassam meg mindenütt, vagy elegendő csak a dig1-ben a kijelzésnél 0-t adni?
A dp a dot pont, azaz a tizedespont ami villog a számjegyek közt.
Szerintem maradhat első körbe ahogy van.
Szia Thowra!
Végre működik dolog, viszont van egy kis büge. Mégpedig, hogy a beállításoknál a b porton megjelenő értékkel dolgozik, ami más mint az eredeti programban. Légy szíves segíts ezt is helyre tenni.
Köszi.
Megnéztem szimulátorral, te pontosan milyen hibát tapasztalsz?
|
|