skraceni kurs ucenja picbasica
Moderators: pedja089, stojke369, [eDo], trax
Re: skraceni kurs ucenja picbasica
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: skraceni kurs ucenja picbasica
Hvala drugar
Dva pitanja ?
1. Koja je to verzija, jeli to 3.0.7 /gold ili ?? - da bi znao šta da skinem .
2. U medjuvremenu sam našao 3.0.4 i imam mali problem.
Nisam instalirao MPLAB, već samo MSC,
U MSC pomoću PBP_MPASM_ Connector.exe pokažem putanju do Mpasm na disku (v5.20) i to je OK.
Kada je štiklirano da zatvori MPASM posle asembliranja - prijavi prilikom asembliranja :
error in parametar "/s"
Tek kada ovo isključim sve ide bez greške, ali ne zatvara MPASM ?
Pozdrav
Dva pitanja ?
1. Koja je to verzija, jeli to 3.0.7 /gold ili ?? - da bi znao šta da skinem .
2. U medjuvremenu sam našao 3.0.4 i imam mali problem.
Nisam instalirao MPLAB, već samo MSC,
U MSC pomoću PBP_MPASM_ Connector.exe pokažem putanju do Mpasm na disku (v5.20) i to je OK.
Kada je štiklirano da zatvori MPASM posle asembliranja - prijavi prilikom asembliranja :
error in parametar "/s"
Tek kada ovo isključim sve ide bez greške, ali ne zatvara MPASM ?
Pozdrav
Re: skraceni kurs ucenja picbasica
Evo da odgovorim sam sebi, jer sam malo nestrpljivo postavio pitanja.
1. Kada se skine 3.0.7 (zadnja verzija sa sajta) i primeni prepisana medicina u Aboutu od MCS lepo piše :
3.0.4.1
2. Kada se u toku instalacije ostavi MPLAB, instaliran je MPASM 5.49 koji ne pravi nikakve probleme.
- Ispravite me ako grešim.
Jedino ne znam može li se isključiti ono ZELENO dugme "Buy PicBasic" - baš bode oči ?
Nego kako stoje stvari sa PROTON kompajlerom, koja je zadnja medicina ?
Pozdrav
1. Kada se skine 3.0.7 (zadnja verzija sa sajta) i primeni prepisana medicina u Aboutu od MCS lepo piše :
3.0.4.1
2. Kada se u toku instalacije ostavi MPLAB, instaliran je MPASM 5.49 koji ne pravi nikakve probleme.
- Ispravite me ako grešim.
Jedino ne znam može li se isključiti ono ZELENO dugme "Buy PicBasic" - baš bode oči ?
Nego kako stoje stvari sa PROTON kompajlerom, koja je zadnja medicina ?
Pozdrav
Re: skraceni kurs ucenja picbasica
Jedan problem, vezan za poznati termostat sa DS18B20
Program mi uredno ide iz merenje,1 kada se ispune uslovi temperatura+porta.1=0, medjutim kad je u merenje2 nece da se vrati u merenje1 kad se ispune uslovi temperatura+porta.1=1.
kad ga ovako formiram:
vrati se u merenje1, ali meni treba da kad se ispune uslovi temperature i digitalnog izlaza, ako ima neko neku ideju?
Code: Select all
Symbol T1=PORTA.1
Merenje1:
If V < TargetTemp - Hyst and T1=0 then Merenje2
Merenje2:
If V > TargetTemp + Hyst and T1=1 then Merenje1
kad ga ovako formiram:
Code: Select all
Symbol T1=PORTA.1
Merenje1:
If V < TargetTemp - Hyst then Merenje2
Merenje2:
If V > TargetTemp + Hyst and T1=1 then Merenje1
Re: skraceni kurs ucenja picbasica
Ovako kako si napisao:
Dok je t1 = 0 ti prozivaš konstantno Merenje2 , ali nemaš uslov za izvršavanje u Merenje2 jer ti je T1=0.
Kad je T1 =1 dobija se uslov za izvršavanje u Merenje2, ALI SE NEĆE IZVRŠITI jer se nemože ni prozvati Merenje2. - Sve na svemu pogrešna postavka.
Probaj ubaciti petlju u kojoj če program ostati zaglavljen dok ne dodje do promene stanja T1.
To je ono što sam na brzinu video, - nisam ni ja baš neki ponavalac, slobodno me ispravite ako negde grešim.
Sigurno će iskusniji dati bolju ideju za realizaciju.
Pozdrav
Dok je t1 = 0 ti prozivaš konstantno Merenje2 , ali nemaš uslov za izvršavanje u Merenje2 jer ti je T1=0.
Kad je T1 =1 dobija se uslov za izvršavanje u Merenje2, ALI SE NEĆE IZVRŠITI jer se nemože ni prozvati Merenje2. - Sve na svemu pogrešna postavka.
Probaj ubaciti petlju u kojoj če program ostati zaglavljen dok ne dodje do promene stanja T1.
To je ono što sam na brzinu video, - nisam ni ja baš neki ponavalac, slobodno me ispravite ako negde grešim.
Sigurno će iskusniji dati bolju ideju za realizaciju.
Pozdrav
Re: skraceni kurs ucenja picbasica
A što ne probaš ovako:
Symbol T1=PORTA.1
Main:
gosub Merenje1
gosub Merenje2
goto Main
Merenje1:
If V < TargetTemp - Hyst and T1=0 then
' napiši program
endif
return
Merenje2:
If V > TargetTemp + Hyst and T1=1 then
' napiši program
endif
return
A možeš i koristiti izmedju IF/ENDIF i "ELSE" gde ti je deo koda za slučaj NEispunjavanja uslova u svakom potporgramu.
Pozdrav
Symbol T1=PORTA.1
Main:
gosub Merenje1
gosub Merenje2
goto Main
Merenje1:
If V < TargetTemp - Hyst and T1=0 then
' napiši program
endif
return
Merenje2:
If V > TargetTemp + Hyst and T1=1 then
' napiši program
endif
return
A možeš i koristiti izmedju IF/ENDIF i "ELSE" gde ti je deo koda za slučaj NEispunjavanja uslova u svakom potporgramu.
Pozdrav
Re: skraceni kurs ucenja picbasica
Izgleda je umor, ovako treba:
Code: Select all
Symbol T1=PORTA.1
Merenje1:
If V < TargetTemp - Hyst and T1=0 then Merenje2 'moraju oba uslova da se ispune kako bi pocelo grejanje
Merenje2:
If V > TargetTemp + Hyst or T1=1 then Merenje1 'mora jedan (bilo koji) od dva uslova...
Re: skraceni kurs ucenja picbasica
Zna li tko mogu li se pinovi pic mikrokontrolera postaviti da rade u analognom stanju?
Odnosno da mi se led dioda ne uključi odmah, nego da se uključi "eksponencijalno" odnosno malo, pa malo više i tako par stotinki, te da se onda uključi na punu vrijednost napona
Odnosno da mi se led dioda ne uključi odmah, nego da se uključi "eksponencijalno" odnosno malo, pa malo više i tako par stotinki, te da se onda uključi na punu vrijednost napona
Re: skraceni kurs ucenja picbasica
Pinovi u "Analognom stanju" mogu biti samo ulazni.
Znači, neki ulazni napon ( 0 - 5V) se pretvara putem ADC konvertera u digitalnu vrednost.
To što tebi treba radi se drugačije.
Pin je i dalje "digitalni" a putem PWM odnosno odnosom izmedju signala i pauze menja izlazna struja a samim tim i intenzitet sjaja LED diode.
Puno je lakše ovo izvesti sa mikrokontrolerima koji imaju "hardverski PWM" u sebi.
Proguglaj : LED dimmer + ( i željena familija MCU) i pronaćeš dosta primera.
Pozdrav
Znači, neki ulazni napon ( 0 - 5V) se pretvara putem ADC konvertera u digitalnu vrednost.
To što tebi treba radi se drugačije.
Pin je i dalje "digitalni" a putem PWM odnosno odnosom izmedju signala i pauze menja izlazna struja a samim tim i intenzitet sjaja LED diode.
Puno je lakše ovo izvesti sa mikrokontrolerima koji imaju "hardverski PWM" u sebi.
Proguglaj : LED dimmer + ( i željena familija MCU) i pronaćeš dosta primera.
Pozdrav
Re: skraceni kurs ucenja picbasica
A evo primera u PBP sa HPWM,
U data sheetu pronadji za željeni kontroler koji je pin za HPWM0 i samo taj pin možeš koristiti za LED diodu.
Code: Select all
Duty var byte
Frekvencija var word
Duty = 0
Frekvencija = 500 ' Ovde upiši željenu frekvenciju za PWM (Hz)
Main:
if duty < 255 then duty = duty + 1 ' Korak porasta sjaja "po jedan"
pause 100 ' Brzina porasta sjaja (100mS)
hpwm 0,Duty,Frekvencija
goto Main
Re: skraceni kurs ucenja picbasica
Pozdrav
Molim za PBP3 gold medicinu, ako može ...
Molim za PBP3 gold medicinu, ako može ...
Re: skraceni kurs ucenja picbasica
Imam neki uredjaj sa 16F628A koji nekako radi, vlasnik mi je dao da ga prepravim... Naime u njemu je oscilator odradjen kao na slici:
Ukupan otpor podešenog trimera i otpornika, mereno je i iznosi 52,6k
Kod je zašticen pa treba da pisem drugi... Kako da podesim u PBP oscilator za 16F628A ako koristim ovakvu šemu bez kristala?
Hteo bi da stavim i probam i sa 16F84A bez kristala, imam neki povlaci mi se?
Ukupan otpor podešenog trimera i otpornika, mereno je i iznosi 52,6k
Kod je zašticen pa treba da pisem drugi... Kako da podesim u PBP oscilator za 16F628A ako koristim ovakvu šemu bez kristala?
Hteo bi da stavim i probam i sa 16F84A bez kristala, imam neki povlaci mi se?
Re: skraceni kurs ucenja picbasica
Uhhh moja greska...RC oscilator...
Re: skraceni kurs ucenja picbasica
Sta bi se zajebavao sa tim oscilatorom...
Ukljuci interni od 4MHz i to je to.
Ukljuci interni od 4MHz i to je to.
Re: skraceni kurs ucenja picbasica
Nisam ni razmisljao, bilo nabrzaka, mada sam vec resio ovako, bilo bi bolje da sam interni
Re: skraceni kurs ucenja picbasica
Kako da u ovaj kod ubacim podesavanje za jos jednu temperaturu SET TEMP2?
Code: Select all
'*****************************************************************************
' Variables
'*****************************************************************************
I var word
J var word
tmp1 var byte
tmp2 var byte
Temperature Var Word ' Temperature storage
TempC Var Word
Float Var Word
TargetTemp Var Word ' Desired Temperature
Hyst Var Word ' Hystereris
V Var Word ' Var. for display
B1 Var Byte ' Byte for TargetTemp calculation
B2 Var Byte ' Byte for TargetTemp calculation
Count_Remain Var Byte ' Count remaining
Count_Per_C Var Byte ' Count per degree C
Sign Var Byte ' +/- sign
Mode Var Byte ' 0=Temp. display, 1=Set Temp, 2=Set Hysteresis
Twist Var Bit
'*****************************************************************************
' Resolution
'*****************************************************************************
DS18B20_9bit CON %00011111 ' 93.75ms, 0.5°C
DS18B20_10bit CON %00111111 ' 187.5ms, 0.25°C <-- My favorite
DS18B20_11bit CON %01011111 ' 375ms, 0.125°C
DS18B20_12bit CON %01111111 ' 750ms, 0.0625°C (default)
DATA 46, 224, 20 ' Temp MSB, TEMP LSB, Hysteresis DIV 10
Heat=0 ' Warm Output Low
Cool=0 ' Cold Output Low
Mode=0 ' Temperature display mode
Twist = 0
PAUSE 500
LCDOUT $FE, 1, $FE, $0C ' Clear display, cursor off
PAUSE 250
'-------------------------------------------------------------------------------
OWOUT DQ, 1, [$CC, $4E, 0, 0, DS18B20_10bit] 'Skip ROM search and write N_bits
' resolution to scratch pad
Read 0, B1 ' Read TargetTemp MSB
Read 1, B2 ' Read TargetTemp LSB
TargetTemp=B1*256+B2 ' Calculate TargetTemp value (Default=20.0 C.)
Read 2, B1 ' Read Hysteresis
Hyst=10*B1 ' Calculate Hysteresis value (Default= 2.0 C.)
'-------------------------------------------------------------------------------
MainLoop:
If Mode_B=0 then ' Mode switch pressed
Pause 50 ' Debounce
LcdOut $FE, $8F, "*" ' Show that command is accepted
If Mode_B=0 then MainLoop ' Wait until button is released
Mode=Mode+1 ' Increment mode
If Mode=1 then ' Save Target Temperature (Mode1 -> Mode2)
Write 0, TargetTemp / 256 ' TargetTemp MSB
Write 1, TargetTemp MOD 256 ' TargetTemp LSB
EndIf
If Mode > 1 Then ' Save Hysteresis (Mode 2 -> Mode 0)
Mode=0 ' Only 0, 1, 2 are valid
Write 2, Hyst / 10 ' Divide Hyst value to fit in Byte
EndIf
EndIf
If Mode =0 then ' Set Target Temperature
LcdOut $FE, $80, "Set Temp1 " ' Show function
V=TargetTemp ' TargetTemp in V
Gosub SelectSign ' Select +/blank/-
Gosub DisplayTemp ' Display Target Temperature
If (UP_B=0) Or (DOWN_B=0) then ' Up or Down button pushed
If DOWN_B=0 then ' Down button
If TargetTemp > 7500 then ' Not lower than -25 C. (10000-MinTemp * 100)
TargetTemp=TargetTemp-25 ' Decrease temperuture with 0.25 C.
EndIf
EndIf
If UP_B=0 then ' Up button
If TargetTemp < 17500 then ' Not higher than 75 C. (10000+MaxTemp * 100)
TargetTemp=TargetTemp+25 ' Increase temperature with 0.25 C.
EndIf
EndIf
GoSub SetTargetTemp ' Display TargetTemp and delay 0.25 Sec.
EndIf
EndIf
If Mode=1 then ' Set Hysteresis
LcdOut $FE, $80, "Hysteresys: " ' Show function
Sign= " " ' No sign
V= 10000+Hyst ' Set value for V
Gosub DisplayTemp ' Display Hysteresis
If (UP_B=0) Or (DOWN_B=0) then ' Up or down button pushed
Sign= " " ' No sign for Hysteresis
If DOWN_B=0 then ' Down button
If Hyst > 10 then Hyst=Hyst-10 ' Not less than 0.1 C.
EndIf
If UP_B=0 then ' Up button
If Hyst < 1000 then Hyst=Hyst+10 ' Not more than 10.0 C.
EndIf
V= 10000+Hyst ' Set value for V
Gosub DisplayTemp ' Display Hysteresis
Pause 250 ' Delay 0.25 Sec.
EndIf
EndIf
if Mode > 0 then Mainloop ' Setting TargetTemperature or Hysteresis
goto mainloop ' Check again
'-------------------------------------------------------------------------------
' SUBROUTINES:
'----------------------------------------
SelectSign:
If v = 10000 then ' Temperature = 0 C.
Sign=" " ' No sign
Else
If v < 10000 then ' <> 0
Sign="-" ' Temperature below 0 C.
Else
Sign="+" ' Temperature above 0 C.
EndIf
EndIf
Return
'----------------------------------------
DisplayTemp:
If V >= 10000 then ' Above 0 C.
Temperature=V-10000
Else
Temperature=10000-V ' Below 0 C.
EndIf
LcdOut $FE, $C0, Sign, DEC (Temperature / 100), ".", DEC2 Temperature, " ",223,"C "
Return
'-----------------------------------------
SetTargetTemp:
V=TargetTemp
Gosub SelectSign
Gosub DisplayTemp
Pause 250
Return
Re: skraceni kurs ucenja picbasica
Dodaj mode koji je isti kao mode 0, samo ubaci druge promenljive...
Re: skraceni kurs ucenja picbasica
Mode 0 je SET TEMP 2, Mode 1 je Hysteresys, znaci da dodam Mode 2 sa drugim promenjljivim za V i TargetTemp jel treba i ovo da menjam, i dodam?
Code: Select all
Read 0, B1 ' Read TargetTemp MSB
Read 1, B2 ' Read TargetTemp LSB
TargetTemp=B1*256+B2 ' Calculate TargetTemp value (Default=20.0 C.)
Code: Select all
Write 0, TargetTemp / 256 ' TargetTemp MSB
Write 1, TargetTemp MOD 256 ' TargetTemp LSB
Re: skraceni kurs ucenja picbasica
E jbg sad...
Sad mi nije nista jasno. Pitas kako da dodas temp2, a onda kazes da je vec imas u kodu...
A sta mislis dal mozes 2 promenljive cuvati na jednoj lokaciji...
Prouci malo kako radi kod, pa ce ti se samo reci.
Sad mi nije nista jasno. Pitas kako da dodas temp2, a onda kazes da je vec imas u kodu...
A sta mislis dal mozes 2 promenljive cuvati na jednoj lokaciji...
Prouci malo kako radi kod, pa ce ti se samo reci.
Re: skraceni kurs ucenja picbasica
Ma sad sam ubacio al to jos uvek nije to
Na koje si tacno mislio promenljive?
Code: Select all
'-------------------------------------------------------------------------------
OWOUT DQ, 1, [$CC, $4E, 0, 0, DS18B20_10bit] 'Skip ROM search and write N_bits
' resolution to scratch pad
Read 0, B1 ' Read TargetTemp MSB
Read 1, B2 ' Read TargetTemp LSB
TargetTemp=B1*256+B2 ' Calculate TargetTemp value (Default=20.0 C.)
Read 2, B1 ' Read Hysteresis
Hyst=10*B1 ' Calculate Hysteresis value (Default= 2.0 C.)
Read 3, B1 ' Read TargetTemp MSB
Read 4, B2 ' Read TargetTemp LSB
TargetTemp1=B1*256+B2 ' Calculate TargetTemp value (Default=20.0 C.)
'-------------------------------------------------------------------------------
MainLoop:
If Mode_B=0 then ' Mode switch pressed
Pause 50 ' Debounce
LcdOut $FE, $8F, "*" ' Show that command is accepted
If Mode_B=0 then MainLoop ' Wait until button is released
Mode=Mode+1 ' Increment mode
If Mode=1 then ' Save Target Temperature (Mode1 -> Mode2)
Write 0, TargetTemp / 256 ' TargetTemp MSB
Write 1, TargetTemp MOD 256 ' TargetTemp LSB
EndIf
If Mode = 2 Then ' Save Hysteresis (Mode 2 -> Mode 0)
Write 3, TargetTemp / 256 ' TargetTemp MSB
Write 4, TargetTemp MOD 256 ' TargetTemp LSB
EndIf
If Mode > 2 Then ' Save Hysteresis (Mode 2 -> Mode 0)
Mode=0 ' Only 0, 1, 2 are valid
Write 2, Hyst / 10 ' Divide Hyst value to fit in Byte
EndIf
EndIf
If Mode =0 then ' Set Target Temperature
LcdOut $FE, $80, "Set Temp1 " ' Show function
V=TargetTemp ' TargetTemp in V
Gosub SelectSign ' Select +/blank/-
Gosub DisplayTemp ' Display Target Temperature
If (UP_B=0) Or (DOWN_B=0) then ' Up or Down button pushed
If DOWN_B=0 then ' Down button
If TargetTemp > 7500 then ' Not lower than -25 C. (10000-MinTemp * 100)
TargetTemp=TargetTemp-25 ' Decrease temperuture with 0.25 C.
EndIf
EndIf
If UP_B=0 then ' Up button
If TargetTemp < 17500 then ' Not higher than 75 C. (10000+MaxTemp * 100)
TargetTemp=TargetTemp+25 ' Increase temperature with 0.25 C.
EndIf
EndIf
GoSub SetTargetTemp ' Display TargetTemp and delay 0.25 Sec.
EndIf
EndIf
If Mode =1 then ' Set Target Temperature
LcdOut $FE, $80, "Set Temp2 " ' Show function
V=TargetTemp ' TargetTemp in V
Gosub SelectSign ' Select +/blank/-
Gosub DisplayTemp ' Display Target Temperature
If (UP_B=0) Or (DOWN_B=0) then ' Up or Down button pushed
If DOWN_B=0 then ' Down button
If TargetTemp > 7500 then ' Not lower than -25 C. (10000-MinTemp * 100)
TargetTemp=TargetTemp-25 ' Decrease temperuture with 0.25 C.
EndIf
EndIf
If UP_B=0 then ' Up button
If TargetTemp < 17500 then ' Not higher than 75 C. (10000+MaxTemp * 100)
TargetTemp=TargetTemp+25 ' Increase temperature with 0.25 C.
EndIf
EndIf
GoSub SetTargetTemp ' Display TargetTemp and delay 0.25 Sec.
EndIf
EndIf
If Mode=2 then ' Set Hysteresis
LcdOut $FE, $80, "Hysteresys: " ' Show function
Sign= " " ' No sign
V= 10000+Hyst ' Set value for V
Gosub DisplayTemp ' Display Hysteresis
If (UP_B=0) Or (DOWN_B=0) then ' Up or down button pushed
Sign= " " ' No sign for Hysteresis
If DOWN_B=0 then ' Down button
If Hyst > 10 then Hyst=Hyst-10 ' Not less than 0.1 C.
EndIf
If UP_B=0 then ' Up button
If Hyst < 1000 then Hyst=Hyst+10 ' Not more than 10.0 C.
EndIf
V= 10000+Hyst ' Set value for V
Gosub DisplayTemp ' Display Hysteresis
Pause 250 ' Delay 0.25 Sec.
EndIf
EndIf
if Mode > 0 then Mainloop ' Setting TargetTemperature or Hysteresis
goto mainloop ' Check again
'-------------------------------------------------------------------------------
' SUBROUTINES:
'----------------------------------------
SelectSign:
If v = 10000 then ' Temperature = 0 C.
Sign=" " ' No sign
Else
If v < 10000 then ' <> 0
Sign="-" ' Temperature below 0 C.
Else
Sign="+" ' Temperature above 0 C.
EndIf
EndIf
Return
'----------------------------------------
DisplayTemp:
If V >= 10000 then ' Above 0 C.
Temperature=V-10000
Else
Temperature=10000-V ' Below 0 C.
EndIf
LcdOut $FE, $C0, Sign, DEC (Temperature / 100), ".", DEC2 Temperature, " ",223,"C "
Return
'-----------------------------------------
SetTargetTemp:
V=TargetTemp
Gosub SelectSign
Gosub DisplayTemp
Pause 250
Return