GPS og GSM avbryte håndtering

E

emkay

Guest
Foreløpig Jeg prøver å utvikle system for sporing, som bruker doble USART hjelp PIC16F628A brukte jeg USART maskinvare og programvare USART.Programvaren USART håndtere mottak av data fra GPS mens maskinvaren til å motta og sende data til / fra GSM-modem.

Systemet flow er å motta data fra GPS og lagre til EEPROM (24LC512) og deretter overføre data via GSM-modem etter dedikert periode (kanskje 24 timer).Jeg ll sette intervallet for mottak av data skjema GPS i et minutt (kan endres senere).

I stedet for å overføre dataene for faste perioden, server / brukeren kan be data når som helst.

Begge mine USART rutinemessig bruk avbryter å håndtere oppgaven, men jeg har problemer med å håndtere denne saken.Min plan er å motta etter avbruddet for GPS, ll jeg filtrere dataene for å oppfylle mine krav (tid og sted bare), og deretter lagre / skrive at data til 24LC512 og systemet skal vente til avbruddet fra maskinvaren USART (en samtale fra brukeren) etter mindre enn ett minutt (fordi min intervall for å motta GPS-data er ett minutt Jeg ønsker ikke å forstyrre min datainnsamling).

Mitt spørsmål er, hva vil skje hvis løpet mottar GPS-data, den andre avbrudd (hardware USART) oppstod, hva ville PIC gjøre?Fortsett å samle inn data (fordi fortsatt i eksterne interrupt) eller vil svare på det andre?

Jeg ønsker meg PIC, ferdig med den første oppgaven (motta-filter   butikken for å 24LC512) før du svarer på den andre avbryte.Så hvordan du gjør dette?Hvordan prioritere den første avbryte?

Og det vil være det samme tilfelle dersom maskinvaren min USART avbruddet inntraff første så plutselig dataene fra GPS kommer jeg vil ha min maskinvare USART avgjøre jobben før du går videre til den som mottar GPS-data.Oppgaven under USART maskinvare motta (anrop form brukeren  pickup telefonen  lese data fra 24LC512  overføre dataene)

Begge tilfelle behov for å bosette den første før videre til den andre avbryte

Din kommentar og råd er høyt verdsatt

Hvis det finnes lignende referanse prosjektet, kan du videresende til meg.

Takk på forhånd

 
Hei,
Hvis du bruker en standard GPS-mottaker, kan det være lurt å deaktivere alle meldingene bortsett fra de du trenger.(RMC og en mer bør være tilstrekkelig), og så er det ikke behov for filtrering.Som du kanskje vet, USART avbruddet skal være mer kritisk enn GPS.
håper dette hjelper,
brmadhukar

 
Quote:Hvis du bruker en standard GPS-mottaker, kan det være lurt å deaktivere alle meldingene bortsett fra de du trenger.
(RMC og en mer bør være tilstrekkelig), og så er det ikke behov for filtrering

 
I dont forstå hvorfor du trenger interupts?

Jeg vil foreslå en annen approch at det kunne bidra til (jeg er ikke erfaring med avbrudd eller meget god i programmering)

- Første tingen å gjøre er å søke GPS (spør GPS sende til PIC gjeldende data) og lagre disse dataene til EEPROM.Dette kan skje når som helst forhåndsdefinere intervall.
- Så spør mobiltelefonen for alle (hvis noen) nye innkommende SMS.Dekode SMS for å se om det ber om noe.Hvis ja så les eeprom og sende den til SMS receipient.
- Gjenta syklus eller gjøre noe annet.

I Picbasic pro denne kommandoen fungerer som:
HSerout [ "AT CMGL = 0", CR] Les mottatt og Uleste Innkommende meldinger bare.

Hvis det ikke er ny melding så ingenting skal PIC.

Jeg håper det hjelper litt.
Hilsen

 
Ja, du kan sende kontrollen kommandoen til GPS for å velge hvilken kommando vil du motta eller undertrykke.
Du må kanskje se på GPS-manualen.Det avhenger av produksjon, og hvilken protokoll du bruker NMEA, SiRF etc.

 
Hei

Jeg har en enkel løsning alt du trenger å gjøre er å colect dataene i bufferen er under inerrupt og behandle dataene i hoved loopen - hoved loopen er mutch hurtigere så noen inerruptAll the best

Bobi

 
Hvis du ikke bruker RTOS - du må gjennomføre lange ringen buffere for å holde alt mottatt fra USART der.
Hvis du har RTOS - det er ikke noe du trenger å bekymre deg.

 
De fleste GPS mottakere kan konfigureres, hvor lang tid de vil bli utgang meldinger er programmerbar.Dette kan være fra 0 (ingen data output) til flere sekunder.Sjekk config meldinger fra modulen dataark.Hvis du setter utgang perioden til 0, så kan du be mottakeren til å sende ut data som helst.Dette er pooling.Du kan gjøre det samme med GSM-terminal, og dermed kan du håndtere dem begge, og du vil unngå konflikter.En annen sak er 24LC minnet hvor du vil lagre GPS-data (jeg antar du vil behandle GGA setning eller tilsvarende i den binære protokoll).Hvis du leser GPS-fix data og skrive til minnet hvert minutt, vil du utføre en rekke skrifter i minnet.Sjekk datablad av minnet produsenten, hver slik hukommelse har et maksimalt antall skrive sykluser.Hvis du vil skrive til den hvert minutt, det betyr ca.44.000 ganger hver monts.Med et minnekort som støtter 100.000 skrive sykluser, vil du få et problem i mindre enn tre måneder.

/ pisoiu

 
Quote:Jeg har en enkel løsning alt du trenger å gjøre er å colect dataene i bufferen er under inerrupt og behandle dataene i hoved loopen - hoved loopen er mutch hurtigere så noen inerrupt

 
100k syklus betyr samme sted (byte-en) kan skrives 100k ganger.Etter det er det ikke sikkert at det du leser tilbake er hva du skrev.

/ pisoiu

 
Jeg velger å ikke bruke avbryte for programvare USART (ekstern interrupt) lenger, men fremdeles bruker avbruddet for maskinvare USART.

Tilstanden blir som dette, håper kan bli din kommentar.

1.Vent på GPS-data (bit test på mottaker port)
2.Etter å motta, behandle data, som lager den til temp.register
3.Skriv til EEPROM
4.Aktiver avbrudd (for maskinvare USART)
5.Forsinkelse 1 minutt (intervall for neste GPS-data)
- Her har jeg 2 alternativ, men jeg vet ikke hvilken som er bedre
- Hvis du vil bruke forsinkelse av programvare rutine (jeg bruker PICLoop)
- Hvis du vil bruke TMR1
6.Deaktiver avbryte
7.Gjenta

Jeg vet ikke hvilken som er best for elementet nei.5.Mitt krav er, hvis USART avbryte skje forsinkelsen / timer fremdeles telle slik at jeg ll ikke savner min 1-minutts intervall

Og hvis TMR1 er mer effektivt i forhold til forsinkelsen rutine, hvordan du gjør det.Jeg bruker aldri timer modul før takk

 
hallo
Du bør vite at det pic MC ikke vil gå til å gjøre andre avbryte så lenge den nåværende avbruddet ikke er ferdig ennå
Dette er fordi når avbruddet inntreffer - flagg biit av en viss avbruddet er satt i OIC vil gå til avbruddet vektor (0x004) og GIE bit vil bli slettet.
På grunn av dette, kan ingen andre avbryte bli behandlet så lenge inngrepet av gjeldende avbruddet er fortsatt behandling, men de kunne bli oppfattet og deres falg bit påvirkes
Etter utgangen av avbruddet, skal vi exeute den "retfie" kommando som har 2 funksjoner: For det første gjør et vanlig retur andre: gjenaktivere GIE bit
på dette tidspunktet om noen andre avbryter venter, det vil bli behandlet i henhold til rekkefølgen av koding av som tildeler deg piorty for hvert avbrudd.

 
Hallo

Hvis du vil bruke avbryte, så flagg
Hvordan??

Når avbruddet fra GPS skjedde gjøre:

1 - Motta NMEA Command og lagre den i RAM.2 - flaggingen bit.3 - Return.i hovedprogrammet:

1 - chk GPS flagget bit.2 - hvis bit set:a-filtrere dataene.b-lagre data i serial EEPROMc-CLR bitog gjøre dette igjen med mobil<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

HO2a

 
Haytham skrev:

hallo

Du bør vite at det pic MC ikke vil gå til å gjøre andre avbryte så lenge den nåværende avbruddet ikke er ferdig ennå

Dette er fordi når avbruddet inntreffer - flagg biit av en viss avbruddet er satt i OIC vil gå til avbruddet vektor (0x004) og GIE bit vil bli slettet.

På grunn av dette, kan ingen andre avbryte bli behandlet så lenge inngrepet av gjeldende avbruddet er fortsatt behandling, men de kunne bli oppfattet og deres falg bit påvirkes

Etter utgangen av avbruddet, skal vi exeute den "retfie" kommando som har 2 funksjoner: For det første gjør et vanlig retur andre: gjenaktivere GIE bit

på dette tidspunktet om noen andre avbryter venter, det vil bli behandlet i henhold til rekkefølgen av koding av som tildeler deg piorty for hvert avbrudd.
 

Welcome to EDABoard.com

Sponsor

Back
Top