|
[ electron2008 @ 25.11.2012. 14:54 ] @
| Dali neko ima ideju kako uraditi kod sa picem u PicBasicu za dvokanalni merac obrtaja?
Gde bi prvi kanal merio brzinu vratila el. motora u o/min, a drugi brzinu vratila iza reduktora na masini isto u o/min? senzori bi bili induktivni, opticki, nebitno... |
[ rsinisa @ 25.11.2012. 15:45 ] @
A šta je sa onim programom što si mi slao na PP? Jel radi ili ne? Ako radi, samo odradiš to isto za drugi senzor.
Pozdrav.
Sinisha
[ electron2008 @ 25.11.2012. 19:20 ] @
Radi taj program
[ ZAS011 @ 25.11.2012. 22:51 ] @
Pošto vam lepo funkcionišu PP, nastavite putem istih, pošto "onaj program" radi, nemamo potrebe da mi, ostali, mozgamo "ovaj druginovidvoosovinski".
[ veselinovic @ 25.11.2012. 23:19 ] @
A kako je prenosni odnos reduktora unaprijed poznat, dovoljno je izvrsiti jedno dijeljenje RPM-a motora.
[ electron2008 @ 26.11.2012. 08:45 ] @
Ako imam dva senzora?
Code: clear
TRISA=$FF
TRISD=$00
ANSEL = %00000000
ANSELH = %00000000
OPTION_REG.7 = 1
DEFINE OSC 20
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
RPM var word
HRPM var word
LRPM var word
RPM_Total VAR Word
RPMInput var PortA.0
pocetak:
Pulsin RPMInput, 0, LRPM
PULSIN RPMInput, 1, HRPM
RPM_Total = HRPM + LRPM
RPM = 1000
RPM = RPM * RPM
RPM = DIV32 RPM_Total
RPM = RPM * 60
RPM = Div32 40
pause 100
lcdout $FE,1, "RPM ",dec5 RPM, " o/min"
goto pocetak
end
[Ovu poruku je menjao electron2008 dana 26.11.2012. u 10:14 GMT+1]
[ rsinisa @ 26.11.2012. 10:24 ] @
Definišeš RPMInput2 za pin na kome ti je drugi senzor i ponoviš deo programa izmedju labele "pocetak" i "pause 100" (smestiš ga pre "pause 100") sa RPMInput2 i prikažeš drugi rezultat u drugom redu LCD displeja.
Pozdrav.
Sinisha
[ bogdan.kecman @ 26.11.2012. 11:33 ] @
napisah ti tamo na pp .. interapti, obavezno, interapti .. nemoj se plasiti interapata, sad ti je idealna prilika da ih savladas. interapt + timer i resis problem
[ electron2008 @ 26.11.2012. 12:12 ] @
Citat: bogdan.kecman: napisah ti tamo na pp .. interapti, obavezno, interapti .. nemoj se plasiti interapata, sad ti je idealna prilika da ih savladas. interapt + timer i resis problem
Uhhh, probacu
[ rsinisa @ 26.11.2012. 15:20 ] @
Citat: bogdan.kecman: napisah ti tamo na pp .. interapti, obavezno, interapti .. nemoj se plasiti interapata, sad ti je idealna prilika da ih savladas. interapt + timer i resis problem
Slažem se sa tobom, idelano mesto i prilika za učenje interapta, ali ako mu je vreme problem, i ovo rešenje sa PULSIN može sasvim korektno da mu završi posao.
Pozdrav.
Sinisha
[ bogdan.kecman @ 26.11.2012. 16:32 ] @
pulsin ce mu izmeriti sirinu pulsa sto je ok jedino sto ne znam kako pulsin radi tacno u basic-u, dal tako sto on nasetuje tajmer i interapt ili tako sto u petlji proverava stanje pina ... generalno pitanje koja mu je rezolucija potrebna 3000 rpm sa jednim zubom je dovoljno sporo da ce pulsin da odradi posao ali ne treba bezati od interapta a ovo je idealan primer za uvezati interapt i tajmer :D (ideja za tvoj kurs ? )
[ electron2008 @ 26.11.2012. 18:52 ] @
Ideja da se uvrsti u kurs je odlicna!
[ rsinisa @ 26.11.2012. 20:42 ] @
PULSIN može da meri i impuls i pauzu, meri u petlji i uvećava brojač na svakih 10 us za 4 MHz oscilator (2 us za 20 MHz). Ako se npr. meri dužina impulsa, čeka uzlaznu ivicu i tad kreće u merenje. Za pauzu, naravno, obrnuto.
Što se tiče tajmera i interapta, biće svakako obradjeni u kursu, samo do toga treba preći mnogo drugih stvari. U prevodu, neće tako skoro jer ipak je to tutorijal namenjen apsolutnim početnicima pa će neke stvari u početku biti obradjene prilično detaljno, i možda pomalo dosadno onima koji su već savladali osnovne stvari.
Pozdrav.
Sinisha
P.S. Za 3000 RPM-a brojač će na 4 MHz da izbroji do 2000 što je odlična rezolucija za tu namenu.
[ electron2008 @ 03.12.2012. 14:52 ] @
Ovo mi radi
Code: DEFINE LCD_RSBIT 1 ' RS na D1
DEFINE LCD_EREG PORTD ' E na PORTD
DEFINE LCD_EBIT 0 ' E na D0
DEFINE LCD_BITS 4 ' LCD 4 bit mode
DEFINE LCD_LINES 2 ' 2 linije LCD display
ct0 var word 'total number of counts
t1hi var ct0.byte1 'high byte of timer1
t1lo var ct0.byte0 'low byte of timer1
ctime var word 'counting time
ctime = 1000 'CPS 1000mS gate time
Pause 500 'allow LCD to startup
lcdout $fe,1
Goto main 'bypass subroutines
getcount:
t1con = 7 'set timer 1 on, external clock, non sync = bit0 =1, bit1 =1, bit2 =1
tmr1h = 0 'clear timer 1 high byte
tmr1l = 0 'clear timer 1 low byte
pir1 = 0 'clear overflow flag
pause ctime 'wait
t1con = 0 'stop timer 1 , bit0 =0
t1lo = tmr1l
t1hi = tmr1h
ct0 = ct0 * 60 ' Per minute
lcdout $FE,1, "RPM ",dec5 ct0, " o/min"
Return
Main:
gosub getcount
goto main
end
ovde nesto ne valja?
Code: clear
ansel = 0
DEFINE LCD_DREG PORTD ' LCD se nalazi na portu D
DEFINE LCD_DBIT 4 ' Data bits D4..D7
DEFINE LCD_RSREG PORTD ' RS na PORTD
DEFINE LCD_RSBIT 1 ' RS na D1
DEFINE LCD_EREG PORTD ' E na PORTD
DEFINE LCD_EBIT 0 ' E na D0
DEFINE LCD_BITS 4 ' LCD 4 bit mode
DEFINE LCD_LINES 2 ' 2 linije LCD display
DEFINE OSC 4
Capture VAR PIR1.2 ' CCP1 capture flag
Overflow VAR PIR1.0 ' Timer1 overflow flag
RPM var word
period var Word
CCP1CON = %00000110 ' Enable the CCP1 capture, every 4th rising edge
pause 200
lcdout $fe,1
looop:
t1con = 7
'T1CON = %00100000 ' TMR1 prescale=1:2 Timer OFF
'11 = 1:8 prescale value
'10 = 1:4 prescale value
'01 = 1:2 prescale value
'00 = 1:1 prescale value
TMR1H = 0 ' Zero the Timer
TMR1L = 0
capture = 0
Start:
IF capture = 0 Then
goto Start ' Wait here for the first capture
endif
T1CON.0 = 1 ' Start the Timer
capture = 0 ' Reset the capture flag
CaptureLoop:
IF capture = 0 Then
goto CaptureLoop ' Wait here until captured
endif
period.lowbyte = CCPR1L ' Store the captured value in
period.highbyte = CCPR1H ' period variable
period = period / 2
RPM = 10000
RPM = RPM * RPM ' 100,000,000
RPM = DIV32 period ' 100,000,000 / RevCount
RPM = RPM * 60 ' Per minute
RPM = DIV32 400
RPM = (RPM /10)*25'+25
pause 100
lcdout $FE,$88,"RPM=",dec4 rpm , " ", Period
gosub cleartimer1
GoTo looop ' Do it forever
ClearTimer1:
IF (capture = 0) Then
goto cleartimer1 ' Wait for beginning of next period
endif
TMR1L = 0 ' Clear Timer1 low register
TMR1H = 0 ' Clear Timer1 high register
capture = 0 ' Clear capture flag
overflow = 0 ' Clear overflow flagReturn
return
end
[Ovu poruku je menjao electron2008 dana 03.12.2012. u 17:36 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|