Sida 2 av 2

Re: Får inte Parallax PING))) att fungera.

Postat: 31 augusti 2011, 09:08:09
av Skreddarn
Glenn, 50 uS är tio gånger mer än jag uppfattat som lämplig längd på triggpulsen.
Jag har fått för mig att det var minst 2, typiskt 5 uS, men den kanske rycker igång på sydgående flank, och då är det väl förmodligen egalt.

Jag har ju min vana trogen krånglat till konceptet med en 555:a som genererar triggpulser och sedan grindar in min PIC16 på linan. (Så slipper jag hålla reda på om pulsen är min egen trigg, eller svarspulsen från PING-skrället.) Och jag har dragit slutsatsen att det är mitt skatbo som varit roten till det onda.

Men eftersom jag har så många olycksbröder här så börjar jag misstänka att det är si och så med kvalitén på själva pingeriet.

Kan inte någon erfaren gosse tipsa om någon idiotsäker testuppställning som visar om pingen funkar eller inte.
Det liknar ju fan att man som amatörklant måste behöva felsöka köpebapparater.
Som om det inte var illa nog med de härken man åstadkommer själv...


Grymt, mummel...

/Den Magsure.

Re: Får inte Parallax PING))) att fungera.

Postat: 31 augusti 2011, 09:13:56
av sodjan
Lite googling ger uppfattningen att det förekommer en del problem
men att det ofta har med själva uppsättningen att göra. T.ex att
man försöker mäta i 90 graders vinkel från en labbplatta i ett
fall, där PING'en sitter i höjd med bordsskivan.

Re: Får inte Parallax PING))) att fungera.

Postat: 31 augusti 2011, 10:31:42
av thepirateboy
Jo, bäst är ju att sätta en bok ca 20-30cm framför sensorn, det ger en bra "studs".

Jag letade upp min fulkod som jag använde när jag testade denna,
vet inte om det hjälper någon.

Kod: Markera allt

  for (;;)
  {
    __watchdog_reset();
    
    
    SETBIT(DDRC, SIGNAL_PIN);
    SETBIT(PORTC, SIGNAL_PIN);
    delay_us(5);
    CLEARBIT(PORTC, SIGNAL_PIN);
    CLEARBIT(DDRC, SIGNAL_PIN);
    
    delay_us(200);
    
    while((PINC & SIGNAL_PIN) == 0)
        ;
    
    while((PINC & SIGNAL_PIN) != 0){
        pulse_counter++;
    }
    
    unsigned long centimeter = pulse_counter;
    centimeter = (centimeter*100)/826;      // Conv. factor
    
    LCD_Pos(1,11);
    LCD_PutFormatInt((unsigned int)centimeter);
    LCD_Text(" mm");
    
    pulse_counter = 0;
    for(unsigned char i=0; i<50; i++){
        delay_us(20000);   
    } 
  }

Re: Får inte Parallax PING))) att fungera.

Postat: 29 september 2011, 23:12:02
av Glenn
Men vad ända in i fågelholken då ?

Idag skulle jag göra en helt annan sak och slog igång labbaggregatet, som råkade vara inkopplad till en testplatta med pingsensorn på.

Till min förvåning såg jag att LED'en på pingkortet blinkade, och när jag kollade på displayen så fick jag nu värden ? mycket märkligt.
Skumma värden dock, å andra sidan har jag inte lagt många sekunders tankearbete bakom behandlingen av värdet..

I vilket fall som helst ändrar sej värdet om jag flyttar på "hindret" framför sensorn, så den verkar faktiskt fungera.


Men jag FATTAR inte hur det gick till, fungerade ju inte sist ? jag har inte gjort nån ändring på uppkopplingen, och PIC'en innehåller samma kod ?

Re: Får inte Parallax PING))) att fungera.

Postat: 29 september 2011, 23:18:48
av sodjan
Labbaggregatet kanske inte var påslaget då ? :-)

Re: Får inte Parallax PING))) att fungera.

Postat: 29 september 2011, 23:29:58
av Glenn
Denna koden använde jag (ja jag vet att den är snabbhack-ful..)

Kod: Markera allt

' pingis - ping sensor testbench 1.2 Glenn@repulsiv.se

@ device  pic16F887, intrc_osc_noclkout, wdt_off, mclr_off, lvp_off, protect_off

' Lets define..

DEFINE OSC 4	' Lets work at 4MHz

' And the LCD too..
DEFINE LCD_DREG	PORTD				' Set LCD Data port
DEFINE LCD_DBIT	0						' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG	PORTD			' Set LCD Register Select port
DEFINE LCD_RSBIT	4					' Set LCD Register Select bit
DEFINE LCD_EREG	PORTD				' Set LCD Enable port
DEFINE LCD_EBIT	5						' Set LCD Enable bit
DEFINE LCD_BITS	4						' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES	2					' Set number of lines on LCD
DEFINE LCD_COMMANDUS	2000	' Set command delay time in us
DEFINE LCD_DATAUS	50				' Set data delay time in us

' Constants..

pmod var PORTD.6
CmConstant CON 2260
cmDistance VAR Word
time VAR Word

pause 500 ' grace time for the LCD to initialize.

main:
	gosub pingis
	pause 1000
	goto main

pingis:
	pulsout pmod, 5
	pulsin pmod, 1, time
	cmDistance = cmConstant ** time
	lcdout $FE, 1, "cmd ", #cmDistance, " time ", #time
	pause 100
	return
uppkopplingen är helt enkelt en vanlig display på pinnarna som defineras i början där, pingsensorn sitter på D6 via en 1k resistor, intern oscillator, konding på matningen, MCLR hålls hög med 10k mot +5v.. ..Ja, koden är skriven i PBP.

Re: Får inte Parallax PING))) att fungera.

Postat: 29 september 2011, 23:30:32
av Glenn
sodjan skrev:Labbaggregatet kanske inte var påslaget då ? :-)
Hehe jodå :)