måle hver 2 sekunder

S

shaneelal

Guest
I "m jobber på et prosjekt som måler og viser wire fart, spenning og strøm for en sveising stasjon.
Én enhet tiltak wire speed, viser det på en LCD-skjerm og overfører wire speed til en annen enhet via USART.
En annen enhet sansene spenning og strøm.Den andre enheten har til å vise alle tre målinger på en LCD-skjerm samt en video vises ved hjelp av en video-modulen.
Jeg skal måle strøm og spenning hver 2 sekunder.Begge enhetene benytter 18f452.
Wire speed meter overfører hovedinnhold enheten viktigste enheten overfører til video-modulen.
Trenger jeg en sanntids klokke for begge enhetene for å koordinere overføring av data ved hjelp av RS 232 og også måle spenning og strøm hver to sekunder?
Kan du fortelle meg mer om hvordan du bruker en sanntid klokke?Hvilken bør jeg bruke?Er det noen eksempel på kode Jeg bruker MPLAB-C18 kompilatoren.

 
Hei,

Ikke behov for sanntid klokke.2 sekunder er lenge.Hva du trenger å gjøre er:
1.Bruk et avbrudd eller annen måte å generere et flagg hver 2 sekunder.
2.Sende data til de viktigste PC rundt 2 sekunder.
3.I hovedvinduet PC vente på å motta alle data og vise det.

En annen måte (Master / Slave):
1.Har PC (Master) send en forespørsel til den eksterne (Slave) Hver 2 sekunder.
2.Etter master fateched all data, master vil vise det på LCD.
Denne metoden vil du få en konstant drift, men det blir bare fra master.Du kan bruke en dyr resonator så vil det være mer nøyaktig enn tempreture.
Lykke til.

 
Hei,
hmm u faktisk kan skrive en avbruddsordrelinje service rutine som er kort for å avbryte.
Kan bruke Timer0 eller Timer1 å avbryte hver gang når det er en overflyt av 16 bit tidtaker.Hvis u bruker en 20 Mhz crstal, og med en 16 bit timer hver overflyt tar Ard 13.1 ms ..Deretter kan du bruke en teller som teller til 76, som så vil gi u 1 sekund.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
Den PIC har en USART.Bruker to PIC 18f452.Én enhet overfører til den andre kabelen fart, den andre sanser nåværende og spenning, viser det på en LCD-skjerm og sender alle data (wirespeed, spenning og strøm til en video-modul).
Den første PIC bare overfører det ikke får noe.Den andre enheten overfører til videoen modulen.Hver enhet kan slås på ved differnent ganger, med sanntids klokke jeg kunne ha begge synkronisert.Hvordan vet jeg når overføre wire speed til den andre enheten, kan jeg lagre den til den andre enheten er klar til å vise?

 
Bruk den første PIC (wire speed) som master 2 sec klokke.Ved å sende "wire speed" Evere 2 sek til andre PIC det vil føre til at andre PIC å lese spenning / nåværende og deretter feed denne informasjonen sammen med wire speed til på skjermen video modulen ..
Hvis du vil kan du bruke en DS1307 og DS1337 å avbryte den første PIC hvert sekund eller så ..http://www.google.com/search?hl=en&lr=&q=ds1307

 
hei,

sin meget enkel 2 får 1 sek avbruddsordrelinje hvis ur UCS timer1 OSC pins r gratis.
u kan koble 32.768khz krystall til disse pins, bruk timer1 clk sorce som eksterne OSC.og laste timer1 med 0x8000.u ll få overflyt i 1sec ..... i ISR reload tidtakeren og kjøre .... på denne måten u kan generere 1 sek avbruddsordrelinje .....
bruker 1 sekund avbryte, 2 sekunder er ikke noe problem ....... etter 2 sekunder r over initiere ur aktivitet reqd.skal gjøres.

Ive brukt dette med samme kontrolleren som urs.iepic18f452.

for mer info og eksempelkoder ... GOTO
www.microchip.com og søk Dataark av 18f4520 ikke 18f452.a8f4520 er avanserte versjonen, men tidtaker 1 ligner tidtaker 1 av 18f452.så i denne delen u får hjelp på koden også og maskinvare også .....
u kan direkte bruk som med bilde 18f452 ..... denne måten u kan elliminate RTC og kommunikasjon protokollen reqd for RTC til b gjennomføres.

Med vennlig hilsen.
suryakant.

 
Jeg har allerede lagt ut noen eksempler på kode i den andre tråden om lag 2 andre forsinkelser

ftopic112612.html

 
Jeg
er veldig takknemlig for all den hjelpen jeg
har fått.
Jeg
har prøvd å bruke en RTC, så var ikke så lett som jeg thought.I 'll prøver og si hva jeg prøver å oppnå og gi noen sugestions som jeg
vil like kommentarer.
I "m bygge to enheter.
1.tiltak wire speed og viser det på en LCD-skjerm
2.(main enheten) måler nåværende og spenning hver 2 sekunder.Tar strøm, spenning og wirespeed viser det på en LCD-skjerm og også overfører via RS232 seriell kommunikasjon til en video-modulen skal vises på en video skjermen.

The wire speed meter bruker timer0 og timer1 å fastslå wire hastighet.
Valg: --
a). Min opprinnelige plan var å bruke en ekstern avbruddsordrelinje hvert 2 sek på wire speed meter å overføre til de viktigste enheten bruker PIC's UART
dvs. RS232.Og når de største enheten mottar wirespeed vil det utløse et avbrudd på kvitteringen og måle strøm og spenning, vises på LCD og overføre alle dataene til video module.I var planer om å bruke en RTC å generere avbryter hver 2 sekunder.Da tenkte jeg for å bruke en 555 timer til å generere avbryter hver 2 sekunder, vil det være gode?

b). Har 555 timer om de viktigste enheten, genererer avbryter hvert 2 sek.Den wirespeed vil overføre så snart den har beregnet en wirespeed.Kan PIC buffer mottatt UART bytes?Når 2 sek oppstå og avbruddsordrelinje hender,
er PIC ville lese siste overført wirespeed anskaffer den nåværende og spenningen ved ADC og vise det på en LCD-skjerm og også overføre alle dataene til video-modulen.
Den PIC vil bo i ISR for en relativt lang tid.

Jeg
er til fordel for alternativ b.Jeg
er ikke sikker på hvordan 18f452 vil håndtere kontinuerlig mottatte data og ikke leser den, når jeg
er klar til å lese wirespeed sist mottatte data ville være klar for meg?
De viktigste enheten har også et 18f452, jeg tenkte å bruke timer1 å vente på 2 sekunder for å pass.When jeg gjør andre ting, vil timer1 fortsatt kan fortsatt være timming 2 sekunder?

Hvordan kan jeg konfigurere 555 timer til å gi meg avbryter hver 2 sekunder?
Eventuelle andre alternativer er gjerne velkommen.

 
Sitat:

Jeg har prøvd å bruke en RTC, så var ikke så lett som jeg trodde
 
Takk eggplant.Jeg skriver bare for å være sikker på én ting.Hvis jeg overfører til UART rx pinne av en annen PIC, sier den andre PIC ikke lese den i. Jeg overfører igjen fortsatt ikke lese i, overføre på nytt, og fortsatt ikke lese i, men før den
4. mottak jeg trenger sist mottatte verdi, vil jeg kunne lese den?
Det jeg prøver å si er at jeg ønsker å kunne lese fra rx pin av PIC siste overført byte.
Hvis det ikke fungerer, jeg
vil avbryte alle 2 sekunder på den første enheten til å overføre og ha et avbrudd oppstår på den andre enheten på mottaket for å utføre spenning og strøm opplesninger.
Vennligst tilgi meg hvis jeg kan spørre latterlig spørsmål, jeg må bare være sikker.

 
OK, jeg bare skjønte at tidtakere kan operere uavhengig av driften av resten av PIC.Jeg trenger pic å gjøre en bestemt oppgave hver 2 sekunder, det må være hver
2. seconds.Can Jeg brukte timer0 på PIC18f452 å gjøre this.I går virkelig presset på tid, kan noen hjelpe meg med å gjøre this.I "m bruker c18 compiler.Right nå har jeg koden skrevet ventet på en avbruddsordrelinje forekommer hvert 2 sekunder via en 555 timer.
Hver 2 sekunder jeg trenger å lese USART for data overføres av en PIC, utføre ADC på 2 kanaler vise resultater på LCD-og TV-skjermen.
Skal jeg telle på 2 sekunder på timer, eller at den ikke forstyrrer på overflyt og telle antall overskrider till jeg får kreves 2 sekunder.I "m bruker en 4MHz klokke.

 
Har jeg for å tømme TMR0IE i ISR?Må jeg gjøre noe for å renable tidtakeren å avbryte?Trenger jeg å nullstille tidtakeren eller etter at den overskrider den nullstiller seg automatisk?Er det noe som ser feil i min kode?
Jeg bruker en 4MHz klokke.Interne klokke kilde, derfor bruker 1MHz.
Med en pre skalering eller 1:32 gir 31250Hz.
Perioden blir 0.000032 sekunder.
16 bit bred 0.000032 * 2 ^ 16 = 2,097 = 2,1 sekunder
timer0 bør overflyt hver 2.1seconds.
Jeg tror tiden vil fortsette timming etter avbruddsordrelinje har skjedd, mens i ISR.Fortell meg jeg har rett.

Dette er et eksempel på koden jeg
har skrevet
Code:ROM char sp_units [10] = "mm / sec"; / / ROM kvalifiseringskamp betyr at gjenstanden er

/ / i programmet minne

ROM char vol_units [10] = "V";

ROM char cur_units [10] = "forsterkere";

ROM char velkommen [20] = "Sveising Monitor";

ROM char cursorL1 [5] = "(A17";

ROM char cursorL2 [7] = "(C0202";

ROM char cursorL5 [7] = "(C0204";

ROM char cursorL7 [7] = "(C0206";

ROM char cursorL9 [9] = "(C0209";

ROM int convFactor = (5,0 / 1024);void main ()

(

/ / config rbo for avbryter

/ / OpenRB0INT (PORTB_CHANGE_INT_ON & PORTB_CHANGE_INT_ON & RISING_EDGE_INT & PORTB_PULLUPS_ON);

/ / Konfigurere eksterne LCD

OpenXLCD (FOUR_BIT & LINES_5X7); / / fire bit modus flere linje viserOpenTimer0 (TIMER_INT_ON & / / avbruddsordrelinje på

T0_16BIT & / / 16bit modus

T0_SOURCE_INT & / / interne klokke kilde

T0_PS_1_32); / / 1:32 prescaleOpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF &

USART_ASYNCH_MODE & USART_EIGHT_BIT &

USART_BRGH_HIGH &

USART_CONT_RX, 25);OpenADC (ADC_FOSC_8 & ADC_RIGHT_JUST &

ADC_8ANA_0REF, ADC_CH0 &

ADC_INT_OFF);
INTCONbits.GIE = 1;

mens (1)

())# pragma avbruddsordrelinje system / / lagre = PRODH, PRODL, seksjon ( ". tmpdata")

void system (void)

(int current_adc;

int voltage_adc;

int spenning;

int gjeldende;

char speed [7];

char voltage_str [7];

char current_str [7];/ / / / Char sp_units [10] = "mm / sec";

/ / Char vol_units [10] = "V";

/ / Char cur_units [10] = "forsterkere";

/ / Char velkommen [20] = "Sveising Monitor";

/ / Char cursorL1 [5] = "(A17";

/ / Char cursorL2 [7] = "(C0202";

/ / Char cursorL5 [7] = "(C0204";

/ / Char cursorL7 [7] = "(C0206";

/ / Char cursorL9 [9] = "(C0209";INTCONbits.TMR0IE = 0;

SetChanADC (ADC_CH0); / / select spenning kanal

Delay10TCYx (3);

ConvertADC ();

while (BusyADC ());

voltage_adc = ReadADC ();

spenning = (voltage_adc * convFactor * 100);

SetChanADC (ADC_CH1); / / select kanalen

Delay10TCYx (3);

ConvertADC ();

while (BusyADC ());

current_adc = ReadADC ();

Aktuell = (current_adc * 1.2 * convFactor * 600);

while (! DataRdyUSART ());

getsUSART (fart, 7); / / skaffer hastighet

while (BusyUSART ()); / / tester for å se om kan fjerne

/*************** skrive til LCD *******************/

while (BusyXLCD ());

SetDDRamAddr (0x00);

putrsXLCD (klar);

while (BusyXLCD ());

SetDDRamAddr (0x40);

putrsXLCD (klar);

while (BusyXLCD ());

SetDDRamAddr (0x10);

putrsXLCD (klar);

while (BusyXLCD ());

SetDDRamAddr (0x1C);

while (BusyXLCD ());

putrsXLCD (sp_units);

while (BusyXLCD ());

SetDDRamAddr (0x14);

while (BusyXLCD ());

putsXLCD (fart);

while (BusyXLCD ());

SetDDRamAddr (0x48);

while (BusyXLCD ());

putrsXLCD (cur_units);

while (BusyXLCD ());

SetDDRamAddr (0x40);

itoa (aktuell, current_str);

while (BusyXLCD ());

putsXLCD (current_str);

while (BusyXLCD ());

SetDDRamAddr (0x08);

while (BusyXLCD ());

putrsXLCD (vol_units);

while (BusyXLCD ());

SetDDRamAddr (0x00);

itoa (spenning, voltage_str);

while (BusyXLCD ());

putsXLCD (voltage_str);

/************ skrive til TV-skjermen *************************/

while (BusyUSART ());

putrsUSART (cursorL1); / / Tøm skjerm

while (BusyUSART ());

putrsUSART (cursorL2);

while (BusyUSART ());

putrsUSART (velkommen);

while (BusyUSART ());

putrsUSART (cursorL5);

while (BusyUSART ());

putsUSART (fart);

while (BusyUSART ());

putrsUSART (sp_units);

putrsUSART (cursorL7);

while (BusyUSART ());

putsUSART (current_str);

while (BusyUSART ());

putrsUSART (cur_units);

while (BusyUSART ());

putrsUSART (cursorL9);

while (BusyUSART ());

putsUSART (voltage_str);

while (BusyUSART ());

putrsUSART (vol_units);

)
 

Welcome to EDABoard.com

Sponsor

Back
Top