Sida 5 av 6

Postat: 9 december 2006, 08:02:48
av Icecap
"Denna skall lysa hela tiden om sensorn fungerar som den skall"....
Är du säker på det? För varje mätning som utförs skickas en nu triggerpuls ut väldigt snabbt efter. Om sensorn då svarar kan LED'n mycket väl blinka (till), slockna eller lysa.

Kopierat från databladet: "Delay before next measurement 200 μs"

Kanske det vore en idé att följa databladet?

Postat: 9 december 2006, 12:47:36
av bearing
Du borde kanske ha länkat till databladet från början. Ultraljudsmoduler är ingen universell komponent som alla vet hur de funkar.

Du kan nog förresten glömma "om insignalen blir hög innan du ställer in CCP-enheten så kommer ju inte den sätta flaggan. Du kanske måste ställa in den under pulsen du sänder." för om jag förstår databladet rätt dröjer det 750 us från att du skickat din puls, tills modulen ger sin puls..

Postat: 10 december 2006, 17:58:25
av Kalf
Jag har lagt in lite delays i koden nu. Men det hjälper inte speciellt mycket. Det är fortfarande så att leden lyser bara när man håller handen på ett visst avstånd ifrån sensorn. Jag tror att det är något fel med variabeln CCP_Result. eller när man lägger ihop CCPR1L och H. Kan man göra just det på något annat sätt i C? Jag skulle behöva få denna att fungera på tisdag, men jag kan inte få någon hjälp i skolan förän på onsdag eftermiddag.

Eller klan man göra hela mätningen på något annat sätt, bearing, med tanke på vad du sa:

>Du kan nog förresten glömma "om insignalen blir hög innan du ställer in CCP-enheten så kommer ju inte den sätta flaggan. Du kanske måste ställa in den under pulsen du sänder." för om jag förstår databladet rätt dröjer det 750 us från att du skickat din puls, tills modulen ger sin puls..

Jag är lite rädd för att timern får overflow, eller vad det heter under tiden. Är detta möjligt?

//Kalf

Postat: 10 december 2006, 18:45:06
av bearing
Menar du din eller Icecaps kod?

Har du testat att simulera koden?
Man kan göra det i MPLAB.

Man kan mäta på andra sätt, men jag tror inte det är något fel på ditt sätt, och det var inte det jag menade. Jag menade bara att det finns ingen risk att missa svaret med koden du använder.
Du kan t.ex. ha timer 1 avstängd och nollställd och sedan polla ingången. När ingången går hög sätter du igång timer 1. Sedan pollar du igen och stänger av timern när ingången går låg. Pulslängden ligger då i TMR1. Fast det har ju lägre precision än sättet du använder.

Om timern går utan prescaler ökar den med 1 varje us (med 4 MHz oscillator), så det finns ingen risk för overflow på 750 us då den räknar till 65535.
Du hade väl dessutom prescaler 8, då tar det 1/2 sekund att få overflow.

Det gör förresten inget om timern får overflow. Så länge det bara blir ett overflow kommer beräkningen bli rätt. (Så länge pulsen är kortare än tiden det tar för timern att gå runt ett varv, vilket den ju ska vara i ditt fall.)

Postat: 10 december 2006, 18:57:24
av Kalf
Det är min kod jag använder. Hur kan jag simulera koden? Jag menar det att sensorn betersig på ett visst sätt, och jag kan ju inte koppla in den till daton.

Står det om Polling i databladet eller?

//Kalf

Postat: 10 december 2006, 19:11:20
av sodjan
> Står det om Polling i databladet eller?

Det skulle jag inte tro. Det är ju bara ett speciellt sätt
att skriva sin applikation på, och har inget med själva
processorn i sig att göra.

"Polling" betyder ju bara att man "kollar något då och då"...

Postat: 10 december 2006, 19:48:11
av Kalf
hur gör man det då? kör man en loop tills ingången blir hög och då startar man timern och ställer om ccp-enheten för negativa flanker och sedan slipper jag subtraheta?

//Kalf

Postat: 10 december 2006, 20:27:58
av Kalf
Nu fungerar det, men det är en sak som inte fungerar riktigt som det skall. Istället för ett fast sken ifrån LED'en(PORTA.3) så blinkar den. Här är min kod:

Kod: Markera allt

/****************************************
*                                       *
*    Safety Electronics UF              *
*                                       *
*    Programerad av: Karl-fredrik       *
*    Datum: 2006-11-30                  *
*    Version: V.0.3                     *
*                                       *
****************************************/

//Prototyper
void start_pulse(void);
void recive(void);

//Variablar
unsigned int CCP_Result;

void main()
     {
     TRISA = 0b00000000;                                //Porta utgång
     while(1)                                           //Evighets loop
             {
             TRISB = 0b00000000;                        //PortB utgång
             start_pulse();
             TRISB = 0b00001000;                        //Ställa om PORTB.3 till ingång
             recive();
             if(CCP_Result < 0x100)                   //Inställd på lagom avstånd
                 {
                 PORTA = 0b00000100;                    //LED'en tänds
                 }
             else
                 {
                 PORTA = 0x00;                            //Led'en är släckt
                 }
             delay_us(200);                              //Vänta i 200us
             }
     }

void start_pulse(void)
     {
     PORTB = 0x00;
     PORTB = 0b00001000;                                //1 skickar en puls till ping)))...
     delay_us(5);                                       //...Som varar i 5us
     PORTB = 0x00;                                      //0'ställer igen
     }

void recive(void)
     {
     T1CON = 0x00;                                      //Rensar timern
     while(PORTB.F4 == 0b00001000);                     //Väntar på positiv flank
     T1CON = 0b00110001;                                //Startar timern
     CCP1CON = 0b00000100;                              //Ställer in CCP-enheten på negativa flanker
     while(PIR1.CCP1IF == 0);                           //Väntar på flanken
     PIR1.CCP1IF = 0;                                   //Nollställer interuppt biten
     CCP_Result = CCPR1H << 8 | CCPR1L;                 //Stoppar in värdet i en variabel
     CCP1CON = 0x00;                                    //Nollställer CCP-enheten
     }

Postat: 10 december 2006, 23:15:35
av bearing
Väldigt konstigt. Alla de senaste versionerna av programmen som du testat har inte innehållit några buggar, tror jag.

Det ända råd jag kan ge är att använda lysdioder eller liknande för att debugga. Ev någon knapp som måste tryckas på för att den ska sända en puls. Du behöver ingen knapp om du inte har, bara en skalad sladd som du lägger mot en annan skalad sladd. Tänk på att varje gång knappen den ändrar läge så måste du lägga en delay för att få bort ev. studs. Jag brukar använda 20 ms.
Jag skulle antagligen även kopplat in en MAX202-krets och gjort så att den skickar varje pulslängd till hyperterminalen för att se om man kan uttyda fel något den vägen.

Nu upptäckte jag en sak, du har inte stängt av komparatorerna. Dom kanske ställer till det. Tror man skriver CMCON = 7 för att stänga av. Lägg in det precis i början av main().

Postat: 10 december 2006, 23:22:08
av sodjan
Skriv gärna *någonstans* i koden vilken processor den är avsedd för !
T.ex i den första textrutan...

Postat: 11 december 2006, 08:29:40
av Icecap
"while(PORTB.F4 == 0b00001000); //Väntar på positiv flank"
Nej, det gör den inte! Den står i while-loopen SÅ LÄNGE PINNEN ÄR'1'!!!

Postat: 12 december 2006, 18:17:26
av bearing
Hur gick det?

Postat: 12 december 2006, 18:44:21
av Kalf
Ja idag så presenterade jag min produkt, i ett rollspel, för en riskkapitalist. Hantycke att det var en jätte bra produkt som ligger rätt i tiden, men eftersom den kommer att vara svår att skydda och troligtvis så kommer många försöka kopiera denna produkten när den väl når marknaden. Så därför skulle han inte satsa några pengar i den ifall det hade varit på riktigt.

Jag kan även medela det att vad det är för produkt är inte hemligt längre, för att vi ändå inte kommer att kunna söka patent på den. Det är en dödavinkel kamera för bilen. Så ifall det ligger ett fordon i den döda vinkeln så skall en LED tändas.

Lite mer info om mitt företag för den nyfikne.
Företaget heter safety electronics UF. Och är ett sk. UF företag. UF står för Ung företagssamhet och är ett projekt som går ut på att man startar ett eget företag och skall driva det under ett år. Det finns ett antal olika tävligs moment under detta året. Ett par som alla UF-företag i hela landet är med i och ett par som bara är lokalt, på skolan. Idag så blev mitt företag utsätt till bästa företag ur en riskkapitalists ögon. Detta blev vi mycket glada över.

Om ni vill läsa mer om mitt företag så finns det information på vår hemsida:

http://safety-electronics.mine.nu

En .se domän kommer att iskaffas innom en snar framtid.

Jag vill passa på att tacka alla som hjälpt mig här på detta forumet. Jag kommer att lägga en länk hit på hemsidan för att visa min tackdamhet.

//Kalf A.K.A Karl-Fredrik Johansson

Postat: 12 december 2006, 20:36:07
av JimmyAndersson
Grattis! :)

Kikade på sajten och den ser mycket bra ut.
Hittade några smågrejjer som skulle kunna ändras:

Sidan "Utveckling":
"montera den enkelt på vilken bil som hälst. Vill du veta mer om denna produkten är du välkommen att läsa mer om den under Produkten."

Det borde vara "helst" istället för "hälst". Sedan heter det egentligen "Vill du veta mer om denna produkt" (istället för "produkten"). Däremot blir det rätt i slutet av meningen. Skriver man "produkten" på båda ställena så blir det dessutom en onödig upprepning.


Sidan "Produkten":
"Vi lanserar en helt revolutionerande säkerhets produkt som kommer att höja säkerheten för alla trafikanter. Vi erbjuder en döda-vinkeln-kamera som man kan eftermontera på vilken bil som helst. Döda-vinkeln-kameran varnar för fordon som befinner sig i döda-vinkeln. Ifall det skulle befinna sig en bil i döda-vinkeln kommer det att tändas en röd diod som varnar dig för bilen bakom."

"Säkerhetsprodukt" istället för "säkerhets produkt". Sedan blir det lite väl mycket "döda-vinkel-kameran". Första meningen ser bra ut, men sedan skulle jag ha skrivit såhär:
- - - - -
Vi erbjuder en döda-vinkeln-kamera som man kan eftermontera på vilken bil som helst. Kameran varnar för fordon som befinner sig i döda-vinkeln genom att tända en röd lysdiod som varnar dig för fordonet bakom.
- - - - -


Sedan en mini-grejj på sidan "Kontakta oss":
"IT-ansvarig" istället för "It-ansvarig".


Hur som helst, det är en intressant produkt och jag hoppas att man kommer se den på många bilar i framtiden.

Postat: 13 december 2006, 10:02:26
av Kalf
Haha. har du hittat alla stavfel etc. Det är så att skolan har blockat port 21(FTP) så vi inte kan ändra innehållet ifrån skolan. Så alla ändringar måste ske hemmifrån.

Men tack ändå.

//Kalf