Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Picbasic pitanja za sve sto mi nije jasno

[es] :: Elektronika :: Mikrokontroleri :: Picbasic pitanja za sve sto mi nije jasno

Strane: < .. 1 2 3 4 5 6 7 ... Dalje > >>

[ Pregleda: 109449 | Odgovora: 530 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.132.*



+321 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno17.01.2010. u 22:24 - pre 173 meseci
Uh, Darko, Darko ... Mislio sam da si savladao neke osnovne stvari (bez uvrede)... Ajde da probam ukratko neke osnovne stvari. PIC (kao i svi drugi kontroleri) pored programske memorije ima i memorijski prostor za posebne namene u kome se nalaze mapirani (adresirani) registri za kontrolu rada i neke rezultate rada samog PIC-a. Čak su i pinovi mapirani i oni su za PIC ništa drugo do memorijske lokacije u tom SFR segmentu (SFR-Special function registers = registri posebne namene) samo su konstruktori njihove bitove povezali sa spoljnim svetom.
AD konvertor radi tako što za početak mora da ima referentni napon i onda on neki ulazni napon odredjenim metodama (potraži to sam po netu, da ne pišem ovde sada sve) uporedjuje sa tim maximalnim naponom i pretvara ga u binarnu kombinaciju. U konkretnom slučaju imamo 10-bitni AD što znači da je rezultat AD konverzije 10-bitni broj, a pošto su SFR registri u PIC-u 8-bitni, logično je da tih 10 bitova ne može da se smesti u jedan registar pa su zato konstruktori napravili 2 i nazvali ih ADRESH i ADRESL. I sad, ako ti npr. dovedeš na ulazni pin AD konvertora napon jednak Vref, taj binarni broj će biti 1111111111, ako dovedeš masu, biće 0000000000, a napon izmedju će, naravno, imati neku medjuvrednost. Iz rezolucije AD konvertora i Vref-a možeš da izračunaš kolika je minimalna razlika u naponu koju AD konvertor može da izmeri, a u ovom primeru je to 5V/1024 (jer je AD 10-bitni).
AD konvertor u PIC-u nije stalno aktivan, tj. ne meri stalno već čeka komandu za to (mada mora prvo da se uključi i tada on stoji u režimu čekanja), a tu komandu mu daje korisnik tako što setuje bit 1 registra koji se zove ADCON0 i nalazi se na adresi 1Fh (GPIO se npr nalazi na adresi 05h, a TRISIO na 85h). Kada PIC završi AD konverziju rezultat smešta u registre ADRESH i ADRESL i resetuje bit koji je korisnik setovao, tj. bit 1 ADCON0 registra. To ti je npr. kao na onim starim kasetofonima dugme za puštanje muzike, tj. za start kasete - korisnik pritisne to dugme što je znak kasetofonu da treba da krene sa reprodukcijom, a kada se završi on to dugme isključi što je znak da je on tu operaciju odradio.
Rezultat merenja koji se nalazi u ADRESH i ADRESL pokupiš u neke druge promenljive koje sam definišeš i onda radiš sa njima matematiku ili već šta ti treba.
Nadam se da je sada jasnije, a još jednom preporučujem detaljno čitanje originalne dokumentacije za svaki PIC sa kojim radiš.

Pozdrav.
Sinisha
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno17.01.2010. u 23:15 - pre 173 meseci
Shvatam ja sve ovo sto si mi objasnio ,kako se vrsi A/D konverzacija i sve to unutar PIC-a ali me je bunilo ovo sa ADRESH i ADRESL ja sam mislio da su to bukvalno dva odvojena rezultata koja se dobijaju iz A/D merenja .E sada to sto su PIC-u 8 bitni registri onda treba mesta za smestiti 10bitne rezultate i tako onda koriste dva registra ADRESH i ADRESL tako sto su oni isto 8 bitni svaki ,i pozajmljuje od ovog drugog 2 bita za smestaj rezultata od 10 bita ,odnosno kako je definisem u ADCON da li ce uzeti od jednog 8 a od drugog 2 bit ili obrnuto ,to je ono
ADFM: A/D Result Formed Select bit
1 = Right justified
0 = Left justified

i vidi se iz seme registra
procitao sam detaljno sve o njemu i nadam se da sam shvatio i ovo sto sam napisao da je to to?
Sinisa hvala ti opet na svemu jer stvarno nemam odakle da detaljnije procitam ovo sto mi ti objasnjavas odnosno usmeravas ka odgovoru na moja pitanja.Imam literaturu ali opet tu nije objasnjeno ovako kako ti objasnjavas nije tako shvatljivo pa te zato malo davim nekim glupim pitanjima, ali sta da radim bolje da pitam nego da se vrtim u krug dal jeste ili nije.Pozdrav i ispravi me ako gresim ,pa se cujemo do sledeceg pitanja ma kakvo bilo:):)




[Ovu poruku je menjao Darko_zed dana 18.01.2010. u 00:27 GMT+1]

[Ovu poruku je menjao Darko_zed dana 18.01.2010. u 00:29 GMT+1]

[Ovu poruku je menjao Darko_zed dana 18.01.2010. u 00:38 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.88.*



+321 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno18.01.2010. u 10:31 - pre 173 meseci
Slobodno ti pitaj, zato smo tu, ali su mi tvoja pitanja u jednom momentu bila malo čudna pa sam stekao utisak da si pomešao pojmove i zato sam bio opširniji. A što se tiče poravnjanja, prirodno je da postoji desno poravnjanje, medjutim konstruktori PIC-a su uveli i levo što je jako korisno ako ti je dovoljna 8-bitna rezolucija (u tom slučaju uzmeš stanje iz ADRESH) jer skraćuje uzimanje rezultata; jeste da je tada rezolucija manja, ali za Vref od 5V i dalje je solidna (0,019 V) što je za mnoge primene sasvim dovoljno. Ako ti treba svih 10 bitova onda definišeš promenljivu tipa "word" i pokupiš rezultat ovako:

Code:

rezultat var word

...
...
rezultat.lowbyte=adresl
rezultat.highbyte=adresh
...


Pozdrav.
Sinisha
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno18.01.2010. u 17:15 - pre 173 meseci
Da i sa tom rezolucijom 8 bita 255 stanja se sasvim zadovoljavaju potrebe kod mnogih stvari ,hvala opet na objasnjenju i nisam znao da se moze iskoristiti samo 8 bita na ovaj nacin ,veoma korisno ubrzas proces ako nemas potrebe za tolikom preciznoscu jer je i 0,019 v po stanju itekako precizno makar za moje potrebe.poz
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno20.01.2010. u 22:39 - pre 173 meseci
Pozdrav evo mene opet ,imam jedno pitanjce vise onako iz radoznalosti jer mi je palo na pamet da li je to moguce mada o tome nisam nista mogao da procitam niti saznam iz ove literature koju posedujem ,a cak se i ne spominje.
Znaci interesuje me da li je moguce da pic izvrsava naredbe u isto vreme iz dva razlicita labela ,znaci paralelno izvrsavanje i citanje naredbi ,evo jednog primera onako bez veze samo radi boljeg objasnjenja :

TRISA = $FF
TRISB = $00

label1:

If porta.0 = 1 Then goto label2

portb.0 = 1
pause 1000
portb.0 = 0
pause 1000
Goto label1

label2:

portb.1 = 0
pause 1000
portb.1 = 1
pause 1000
if porta.1 = 1 then goto label1
Goto label2

E sada mene tu interesuje recimo dok se izvrsava naredba LABEL1 onda se izvrsava samo ona ,a kada se ispuni uslov
If porta.0 = 1 Then goto label2 da predje na LABEL2 da se u isto vreme izvrsava i naredba labela 2 i Labela 1 bez prekida labela 1,pa posle kada se ispuni uslov za povratak na label1 if portb.2 = 1 then goto label1 da se prekine sa izvrsenjem labela 2 a nastavi sa labelom 1 i to bukvalno bez ijedne mili sekunde prekida izvrsenja labela1 za svo vreme ciklusa.Mozda je ovo malo nelogicno i nepotrebno za nekoga ali evo bas me interesuje da li je moguce i koja bi to naredba trebala da se doda u ovaj primer za tako nesto ,ako je moguce.poz
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.138.*



+321 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno21.01.2010. u 04:59 - pre 173 meseci
Ne, u jednom trenutku može da izvršava samo jednu naredbu, tako je konstruisan.

Pozdrav.
Sinisha
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno21.01.2010. u 11:25 - pre 173 meseci
Citat:
Darko_zed: Znaci interesuje me da li je moguce da pic izvrsava naredbe u isto vreme iz dva razlicita labela

Treba ti "PIC Duo-Core".
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno22.01.2010. u 20:20 - pre 173 meseci
Hvala na odgovorima za labele za paralelan rad.Gledao sam predhodne postove to jest pitanja koja sam postavljao pa sam naisao na jos nesto sto mi nije jasno a procitao sam datasheet za obe komponente za Pic16F628 i DS1820 i nisam razjasnio neke stvari,evo primera :
Universal thermostat -25/+75 C. *


TRISA= %11110000 ' RA0..3=Outputs RA4=Input
TRISB= %00000111 ' RB0..RB2=Inputs, RB3..RB7=Outputs
CMCON=7 ' Disable comparators

DEFINE LCD_DREG PORTB ' LCD on port B
DEFINE LCD_DBIT 4 ' Data bits B4..B7
DEFINE LCD_RSREG PORTA ' RS on PORTA
DEFINE LCD_RSBIT 1 ' RS on A1
DEFINE LCD_EREG PORTA ' E on PORTA
DEFINE LCD_EBIT 0 ' E on A0
DEFINE LCD_BITS 4 ' LCD 4 bit mode
DEFINE LCD_LINES 2 ' 2 line LCD display

Temperature Var Word ' Temperature storage
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
DQ Var PORTA.4 ' One-wire data pin

DATA 46, 224, 20 ' Temp MSB, TEMP LSB, Hysteresis DIV 10

PORTA.2=0 ' Warm Output Low
PORTA.3=0 ' Cold Output Low
Mode=0 ' Temperature display mode

LCDOUT $FE, 1, $FE, $0C ' Clear display, cursor off

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.)

Sada u ovome mi nije jasno bas ovo DATA 46, 224, 20 koji su to podaci i cemu sluze u programu jer znam da su MSB i LSB dva registra gde se smestaju podaci o temperaturi u DS-u i sad kako da povezem ovo sa DATA 46, 224, 20 ' Temp MSB, TEMP LSB, Hysteresis DIV 10 ,ovo Hysteresis DIV 10 znaci da se rezultat Hysteresis deli sa deset da bi mogao da se smesti u jednom bitu.Nasao sam ovaj primer sa DS1820 senzorom pa bih zeleo kompletno da ga analiziram deo po deo ,jer su mi mnoge stvari sada jasne u programu za razliku od prvog puta kada sam postavio ovo pitanje pa ga sada zelim do kraja isterati .poz

 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
91.148.84.*



+28 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno22.01.2010. u 21:51 - pre 173 meseci
Ako malo bolje analiziras ceo program
Code:
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Universal thermostat -25/+75 C.  by R.T.G. van Steenis                  *
'* Compiler : PicBasic Pro 2.45                                            *
'* B0 = Mode switch in (In)            A0 = LCD Enable    (Out)            *
'* B1 = + switch in    (In)            A1 = LCD RS        (Out)            *
'* B2 = - switch in    (In)            A2 = "Warm" Output (Out)            *
'* B3 = Not connected  (Out)           A3 = "Cold" Output (Out)            *
'* B4 = LCD Bit 4      (Out)           A4 = DQ DS1820     (In)             *
'* B5 = LCD Bit 5      (Out)                                               *
'* B6 = LCD Bit 6      (Out)                                               *
'* B7 = LCD Bit 7      (Out            PIC16F628 Code size = 1124 Words    *
'*                                                                         * 
'* Oscillator XP (4 MHz.) - Power up timer enabled - MCR enable            *
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

TRISA= %11110000                        ' RA0..3=Outputs RA4=Input
TRISB= %00000111             ' RB0..RB2=Inputs, RB3..RB7=Outputs
CMCON=7                                 ' Disable comparators

DEFINE LCD_DREG PORTB                   ' LCD on port B
DEFINE LCD_DBIT 4                       ' Data bits B4..B7
DEFINE LCD_RSREG PORTA                  ' RS on PORTA
DEFINE LCD_RSBIT 1                      ' RS on A1 
DEFINE LCD_EREG PORTA                   ' E on PORTA
DEFINE LCD_EBIT 0                       ' E on A0
DEFINE LCD_BITS 4                       ' LCD 4 bit mode
DEFINE LCD_LINES 2                      ' 2 line LCD display

Temperature     Var    Word        ' Temperature storage
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
DQ        Var    PORTA.4        ' One-wire data pin

DATA 46, 224, 20                        ' Temp MSB, TEMP LSB, Hysteresis DIV 10

PORTA.2=0                               ' Warm Output Low
PORTA.3=0                               ' Cold Output Low
Mode=0                                  ' Temperature display mode  

LCDOUT $FE, 1, $FE, $0C                 ' Clear display, cursor off

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 PORTB.0=0 then                      ' Mode switch pressed
  Pause 50                              ' Debounce 
  LcdOut $FE, $8F, "*"                  ' Show that command is accepted 
  If PORTB.0=0 then MainLoop            ' Wait until button is released  
  Mode=Mode+1                           ' Increment mode
  If Mode=2 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) 
   Mode=0                       ' Only 0, 1, 2 are valid
   Write 2, Hyst / 10                   ' Divide Hyst value to fit in Byte
  EndIf
 EndIf

 If Mode =1 then                        ' Set Target Temperature
  LcdOut $FE, $80, "SET TEMPERATURE "   ' Show function
  V=TargetTemp                          ' TargetTemp in V  
  Gosub SelectSign                      ' Select +/blank/- 
  Gosub DisplayTemp                     ' Display Target Temperature
  If (PORTB.1=0) Or (PORTB.2=0) then    ' Up or Down button pushed
   If PORTB.2=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 PORTB.1=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, "HYSTERESIS      "   ' Show function
  Sign=" "                              ' No sign  
  V= 10000+Hyst                         ' Set value for V  
  Gosub DisplayTemp                     ' Display Hysteresis
  If (PORTB.1=0) Or (PORTB.2=0) then    ' Up or down button pushed  
   Sign=" "                             ' No sign for Hysteresis
   If PORTB.2=0 then                    ' Down button
    If Hyst > 10 then Hyst=Hyst-10      ' Not less than 0.1 C.
   EndIf
   If PORTB.1=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

 LcdOut $FE, $80, "TEMPERATURE     "    ' Show function

 Output DQ                         ' Make Pin Output
 DQ=0                    ' OneWire line Low
 PauseUs 480                            ' Keep down for 480 µS  
 Input DQ                               ' Make Pin Input
 PauseUs 70                             ' Wait 70 µS
 If DQ=1 then                           ' No presence pulse from DS1820   
  LcdOut $FE, $1, "** No sensor! **"    ' Show message
  Pause 500                             ' Wait 0.5 Sec. 
  Goto MainLoop                         ' Check again
 EndIf

 OWOut DQ, 1, [$CC, $44]               ' Start temperature conversion
WaitLoop: OWIn DQ, 4, [Count_Remain]    ' Check for still busy converting
 If Count_Remain = 0 Then WaitLoop      ' Busy 
 OWOut DQ, 1, [$CC, $BE]        ' Read the temperature
 OWIn DQ, 0, [Temperature.LowByte, Temperature.HighByte, Skip 4, Count_Remain, Count_Per_C]
 Temperature = (((Temperature >> 1) * 100) - 25) + (((Count_Per_C - Count_Remain) * 100) / Count_Per_C)
 if Temperature > 32767 then
  Temperature= ~Temperature
  V= 10000 - Temperature                ' 25 C=12500  0 C=10000  -10 C=9000 
 else
  V= 10000 + Temperature
 EndIf

 If V < TargetTemp - Hyst then          ' Below Target temperature - Hysteresis
  PORTA.2=1                             ' Activate   Warm Output
  PORTA.3=0                             ' Deactivate Cold Output
 EndIf

 If V > TargetTemp + Hyst then          ' Above Target temperature + Hysteresis
  PORTA.2=0                             ' Deactivate Warm output
  PORTA.3=1                             ' Activate   Cold Output
 EndIf

 GoSub SelectSign                       ' +/blank/- Sign 
 GoSub DisplayTemp                      ' Temperature to LCD

Goto MainLoop                ' Do it forever

' 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

'-----------------------------------------

videces da autor pribegava jednom malom triku koji se zove matematika celih brojeva. Ako bi se baktao decimalnim brojevima imao bi jako veliku gresku u racunanju (provereno sa kojekakvim preracunavanjima rezultata A/D konverzije). Em je brze, em je krace (kraci kod).
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno22.01.2010. u 22:15 - pre 173 meseci
Mozes li mi malo opsirnije pojasniti, ipak nisam na tom nivou znanja da bih to sam uvideo.Sta konkretno znaci ono ,da bih mogao da sagledam ostatak.poz
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
91.148.84.*



+28 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno22.01.2010. u 22:32 - pre 173 meseci
Code:
DATA 46, 224, 20                        ' Temp MSB, TEMP LSB, Hysteresis DIV 10


46*256+224=12000

Ovde autor programa namerno dodaje 10000 vrednost iscitanu sa DS senzora da bi mu citava matematika bila sa celim i pozitivnim brojevima.

sto se vidi iz podprograma
Code:
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


10000 = 0 stepeni.

Lukavo, nema sta.

A "ono" sto si pitao (DATA 46, 224, 20), svaka READ naredba cita podatak, koji je prilikom kompajliranja programa smesten u programski deo memorije i stoga nepromenljiv (da ne zalazim u kontrolere koji mogu da zvrljaju po svom FLASH-u), prema parametru koji joj je prosledjen tako da

posle
Code:
Read 0, B1                              ' Read TargetTemp MSB

B1 ima vrednost 46,... (0 -> prvi element u DATA listi)
posle
Code:
Read 1, B2                              ' Read TargetTemp LSB

B2 ima vrednost 224,...(1 -> drugi element u DATA listi)
i tako redom.
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno22.01.2010. u 23:33 - pre 173 meseci
Hoces reci da "B1 ima vrednost 46" i "B2 ima vrednost 224" zato sto je to tako autor definisao ,a nisu neka ocitavanja ili vrednosti iz neke tabele kako sam ja mislio ,jer po onome 46*256+224=12000 ili ti TargetTemp=B1*256+B2 se vidi da su to vrednosti definisane od strane autora .
A sto se tice "DATA 46, 224, 20 ' Temp MSB, TEMP LSB, Hysteresis DIV 10" to znam cija je cija vrednost jer kao sto kazes komandom READ odmah cita iz linije DATA po redosledu Read 0 ,Read 1 , Read 2 jer su tri vrednosti upisane.Pozdrav i ispravi me ako gresim .Hvala
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.138.*



+321 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 00:06 - pre 173 meseci
Ovo je program koji radi kao termostat, a termostat mora da uporedi trenutnu veličinu sa nekom zadatom da bi znao šta da radi i zato je autor rekao da je početna zadata temperatura 20 stepeni.

Pozdrav.
Sinisha

P.S. Jeste da nije bitno, ali sve mi se čini da bi ovaj program mogao da se prepakuje da stane u 16F627. Nebitno, ali eto kako radi moj mozak - uvek gleda gde može da se odradi neka optimizacija.
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
91.148.84.*



+28 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 01:00 - pre 173 meseci
Xe xe, naravno da može i to da čita 2 komata DS18B20 (diplomirasmo Teslu po drugi put sa 5)
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 22:21 - pre 173 meseci
Citat:
Ovde autor programa namerno dodaje 10000 vrednost iscitanu sa DS senzora da bi mu citava matematika bila sa celim i pozitivnim brojevima.

Ovo ne razumem kako dodaje 10000 na ocitanu vrednost ,koja bi vrednost bila da ne dodaje ,znaci za 0 stepeni?Ispada vrednost bi bila '0',i cemu sluzi ona tabela u datasheet-u za DS senzor digital output za odredjenu temperaturu.Jer kada pretvorim binarni u decimalni zapis izlazi mi sve oko 65000 za temperaturu ispod nule.
Razumeo sam da za svakih 100 je u stvari jedan stepen ali kako smo dosli do toga i sto rece Sinisa da je pocetna zadata temperatura 20 stepeni to je u stvari odavde iz ovoga 46*256+224=12000 ali kako to uskladiti sa ocitanim vrednostima sa senzora , to jos ne mogu bas shvatiti ,nisu mi sve ovce na broju

 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 22:26 - pre 173 meseci
Izvinite mozda cu vas malo daviti sa pitanjima oko ovoga ali resio sam da ukapiram program sta i kako, jer ce mi mnogo pomoci za dalji rad ,pogotovo je sa senzorima.Citam sve detaljno ali ipak mi je potreban neko drugacije da mi to objasni na nasem jeziku sto bi se reklo ,ajde kad sve naucim pomoci cu i ja vama kada negde zapne
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
109.106.236.*



+28 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 22:45 - pre 173 meseci
Code:
WaitLoop: 
 OWIn DQ, 4, [Count_Remain]    ' Check for still busy converting
 If Count_Remain = 0 Then WaitLoop      ' Busy 
 OWOut DQ, 1, [$CC, $BE]        ' Read the temperature
 OWIn DQ, 0, [Temperature.LowByte, Temperature.HighByte, Skip 4, Count_Remain, Count_Per_C]
 Temperature = (((Temperature >> 1) * 100) - 25) + (((Count_Per_C - Count_Remain) * 100) / Count_Per_C)
 if Temperature > 32767 then
  Temperature= ~Temperature
  V= 10000 - Temperature                ' 25 C=12500  0 C=10000  -10 C=9000 
 else
  V= 10000 + Temperature
 EndIf


Iz ovoga gore se vidi da autor odmah posle iscitavanja DS senzora prevrce sve u celobrojnu matematiku (mnozi sa 100 -> tu se vec pojavljuje tih 10000 koji te bune).
DS senzor temperature koje su manje od 0 stepeni prikazuje kao 2's komplement (bemliga kako se kaze na nasem jeziku), ali to ti je 'vako: za temperature ispod nule invertujes sve bitove u tvom rezultatu 0=>1 i 1=>0 i opet dobijes ispravnu vrednost (moras samo da zapamtis da je temperatura ISPOD 0), inverziju bitova vrsi operator '~'
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.138.*



+321 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 23:03 - pre 173 meseci
Citat:
Sepa011:DS senzor temperature koje su manje od 0 stepeni prikazuje kao 2's komplement (bemliga kako se kaze na nasem jeziku)

Kaže se "drugi komplement".

Pozdrav.
Sinisha
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
109.106.236.*



+28 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno23.01.2010. u 23:31 - pre 173 meseci
Fala mladiću Setio se čika, al' kasno
 
Odgovor na temu

Darko_zed
Aleksinac

Član broj: 137277
Poruke: 2312
*.netnet.rs.

Sajt: www.proelektro018.com


+98 Profil

icon Re: Picbasic pitanja za sve sto mi nije jasno24.01.2010. u 00:18 - pre 173 meseci
Znaci zbog toga sto je rezolucija veca od 9 bita moze se izracunati pomocu ova dava registra COUNT REMAIN i
COUNT PER °C gde se smestaju ocitavanja u scratchpad-u(svastari na nasem) ,tako pise.I racuna se po formuli
TEMPERATURE =TEMP READ-25+COUNT_PER_C - COUNT REMAIN/COUNT_PER_C
Interesuju me ova dva registra COUNT REMAIN i COUNT_PER_C kako se i sta upisuje u njih pa je zato po njima napravljena ova formula i zasto je i sta znaci u njoj -25vrednost.Znam da je vrednost rezolucije 16 bita pa se zato upisuje u dva registra ali mi je potrebno malo pojasnjenje o njima posto nista konkretno ne pise.
Jos jedno pitanje posle citanja scratchpad-a the TEMP_READ value is obtained by truncating the 0.5°C bit (bit 0) from the temperature data (see Figure 2). iz tablice je bit o 2 na -1 sto je 0,5C ,pa bit1 2 na 0 je 1C ,pa bit2 2 na 1 je 2C(stepeni) pa tako redom ,e sada me interesuje kako se ovo primenjuje to jest ocitava iz tabele i primenjuje u programu.poz






Prikačeni fajlovi
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Picbasic pitanja za sve sto mi nije jasno

Strane: < .. 1 2 3 4 5 6 7 ... Dalje > >>

[ Pregleda: 109449 | Odgovora: 530 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.