Hallo

Ik heb nog eens een vraagje aangezien ik bezig ben aan mijn eerste robotje.
Ik heb al LDR's om licht te zoeken. Mechanisch heb ik ook geen problemen meer, motortjes + onderstuk is in orde.
Motordrivers werken.

Nu ben ik aan het nadenken over een obstakelontwijking. Ik heb hier nog enkele mooie (IR)fototransistoren en IR leds. Nu vroeg ik me af of het mogelijk is om een fototransistor rechtstreeks aan een 16F628A te hangen. Ik vond het niet zo goed.(ik heb gezocht hoor) En als dat niet zo is, wat kan ik dan best voor mijn PIC ingang zetten?

Dit? http://www.circuitsonline.net/circuits/view/16

Alvast bedankt.

Dit alles zou moeten kunnen werken op de 5V van de PIC.
Ik heb nog wat rondgezocht en is het dan niet beter dat ik dat ledje moduleer? Anders gaat het te veel last hebben van omgevingslicht.
Alvast bedankt.

Dat denk ik wel ja. Op'n 36kHz zetten en dan een demodulator zoals SFH5110 gebruiken.

Ik heb net ontdekt dat er in mijn schuif nog een TSOP1736 ligt. Deze werkt op 36KHz, dan hoef ik enkel het ledje te moduleren. Kan dit wel rechtstreeks aan mijn PIC?

Als je een deftig bereik wilt, stuur je daar pulsjes van een halve Ampere doorheen. Dat lukt niet met de poortpin van een pic ;)

Op 22 februari 2009 11:09:17 schreef bvbart:
Ik heb net ontdekt dat er in mijn schuif nog een TSOP1736 ligt. Kan dit wel rechtstreeks aan mijn PIC?

Die ontvanger kan prima direct aan een PIC (mits op 5V, en met de R en C aan de 1736 voeding, zoals in de datasheet aangegeven).

Voor korte afstanden kan je de IR-zend-LED via een weerstand van bv 470 Ohm direct aan je PIC hangen. Voor grotere afstanden een schakeltor gebruiken, maar let dan wel op dat bij grotere stromen continu-aan je zend-led kan mollen.

Dat komt in orde denk ik. Met die sensor.
Weet toevallig iemand of je de layout van een motordriver M54644BL ergens kan vinden in Eagle? Ik vind het natuurlijk weer niet.;)

Ik zal het maar hier verder vragen he.

Het is me allemaal redelijk gelukt met die PIC en het motortje enzo. Ik ben mijn robot nu aan het laten rondrijden op de afstandsbediening van de TV. Dat gaat heel goed als je de motoren aan of uit wilt doorsturen.
Maar nu wil ik die motoren pwm'en. Ik heb al een programmaatje op basis van de site picbsic.nl. Maar ik vind echt niet hoe ik het oplos.



DEVICE 16F648A                
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE 

symbol lv porta.0
symbol la porta.1
symbol ra porta.2
symbol rv portb.5
symbol lr porta.6
symbol lg porta.7
symbol ldr1 portb.1
symbol ldr2 portb.0
symbol irsensor portb.4
symbol irled porta.3
dim tel as bit
dim teller as byte

;Normale aliases (constanten)
SYMBOL BlinkAantal  = 10      ;Max 127: Aantal LED blinken ten teken: systeem code ingeprogrammeerd
SYMBOL BlinkTijd    = 500     ;mSec: Snelheid van het blinken van de LED bij PIC in programmeermode (systeem wijziging in programmeren)
SYMBOL BlinkTijdSnel= 150     ;mSec: Snelheid van het blinken van de LED bij systeem code programmeren (systeem is gewijzigd)
SYMBOL DefaultSys   = 0       ;0 = TV:  Bij allereerste keer na programmeren van PIC, is systeem TV
SYMBOL Glitch       = 52      ;Max 255: Onderdrukken storingstijd (glitches)
SYMBOL Ok           = 50      ;Max 255: Controletijd of RC5 code goed wordt ontvangen
SYMBOL Sample       = 300     ;Als alle samples UIT zijn dan is de toets van de afstandsbediening losgelaten

;Logische aliases (constanten)
SYMBOL AAN          = 0       ;Omgekeerd ON        
SYMBOL FALSE        = 0
SYMBOL HOOG         = 1
SYMBOL LAAG         = 0
SYMBOL OFF          = 0
SYMBOL ON           = 1
SYMBOL TRUE         = 1
SYMBOL UIT          = 1       ;Omgekeerd OFF


;WORD
DIM WD1             AS WORD   ;Word Dummy
;BYTE
DIM Command         AS BYTE
DIM Systeem         AS BYTE
DIM BD1             AS BYTE   ;Byte Dummy
;BIT
DIM FoutOntvangst   AS BIT
DIM ProgramMode     AS BIT    ;Wordt TRUE als bij opstarten meteen al een RC5 binnenkomt
DIM ToggBit         AS BIT    ;ToggBit wordt hier verder niet gebruikt, is een deel van de RC5 code
DIM Waarde          AS BIT
DIM ID1             AS BIT    ;bIt Dummy

;        76543210
PORTA = %00000000
TRISA = %00000000

trisb = %11011111
portb = %00000000

 

EDATA DefaultSys

CLEAR
DELAYMS 100                   ;Stabilisering signalen

GOSUB AllesUit                ;Alle uitgangen laag

Lg = ON                      ;Kenmerk dat de processor loopt, LED even aan/uit
DELAYMS 400                   ;IR-ontvanger stabilisering, tevens LED aan/uit tijd
FOR BD1 = 1 TO 255            ;Meteen checken of er wat wordt ontvangen (= programmeermode) kan net in een dood punt vallen, daarom vaker meten
  IF irsensor = AAN THEN ProgramMode = TRUE
  DELAYUS 500
NEXT
Lg = OFF

IF ProgramMode = TRUE THEN    ;Als in programmeermode, dan...
  FOR BD1 = 1 TO 9            ;LED even laten knipperen en daarna laten branden ten teken dat de programmeermode actief is
    Lg = ~Lg
    DELAYMS BlinkTijd
  NEXT
  GOSUB WachtOpToetsLosLaten
ENDIF

GOTO Start


;Subroutines                                                                                                            
AllesUit:
  lv = off             ;Alle uitgangen uitzetten als geen toets is ingedrukt
  la = off
  rv = off
  ra = off  
  IF ProgramMode = FALSE THEN lg = OFF
RETURN


BitOphalen:
  Waarde = irsensor       ;Maak Waarde 0 of 1 afhankelijk van ontvangen IR code
  BD1 = 0
  WHILE irsensor = Waarde AND BD1 < Ok;Niveau moet binnen een bepaalde tijd veranderen
    INC BD1
  WEND
  IF Ok = BD1 THEN FoutOntvangst = TRUE ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst)
  DELAYUS 1000
RETURN


WachtOpToetsLosLaten:
   WD1 = Sample
   WHILE WD1 > 0              ;Wacht zolang de toets van de afstandsbediening is ingedrukt, als 300 samples niets is ontvangen, dan is toets losgelaten
     DEC WD1
     IF irsensor = AAN THEN WD1 = Sample ;Opnieuw beginnen met samples tellen
     DELAYUS 500              ;300 x 500us = 150ms
   WEND
RETURN


;Hoofdprogramma                                                                                                         
Start:
 GOSUB AllesUit               ;Alle uitgangen laag
 WHILE irsensor = UIT : WEND ;Wacht op ontvangst

 BD1 = 0
 WHILE irsensor = AAN AND BD1 < Glitch
   INC BD1
 WEND
 IF BD1 < Glitch THEN Start   ;Error in ontvangst (Geen RC5 code of glitch)

 Lg = ON                      ;IR-signaal ontvangen
 

 DELAYUS 600                  ;900 - 300: Header van RC5 vermijden

 GOSUB BitOphalen : Command.6 = ~Waarde ;Extended bit (geinverteerd)
 GOSUB BitOphalen : ToggBit   = Waarde
 GOSUB BitOphalen : Systeem.4 = Waarde
 GOSUB BitOphalen : Systeem.3 = Waarde
 GOSUB BitOphalen : Systeem.2 = Waarde
 GOSUB BitOphalen : Systeem.1 = Waarde
 GOSUB BitOphalen : Systeem.0 = Waarde
 GOSUB BitOphalen : Command.5 = Waarde
 GOSUB BitOphalen : Command.4 = Waarde
 GOSUB BitOphalen : Command.3 = Waarde
 GOSUB BitOphalen : Command.2 = Waarde
 GOSUB BitOphalen : Command.1 = Waarde
 GOSUB BitOphalen : Command.0 = Waarde

 IF FoutOntvangst = TRUE THEN ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst)
   FoutOntvangst  = FALSE     ;Reset
   GOTO Start                 ;Lus niet verder uitvoeren
 ENDIF

 IF ProgramMode = TRUE THEN Programmeren ;Ander systeem in programmeren
 
 IF Systeem = EREAD 0 THEN ;Alleen uitvoeren als het ontvangen systeem gelijk is aan het voorgeprogrammeerde systeem
           
  SELECT CASE Command
     case 1:
        rv = on                ;De bijbehorende uitgang aanzetten
     CASE 2: 
        lv = on
        rv = on
     case 3:
        lv = on
     CASE 4: 
        la = ON
        rv = on
     case 5:        
         repeat    
            for teller = 0 to 255
            if teller > 180 then 
                low lv
            else 
                high lv
            endif
            if teller > 180 then 
                low rv
            else
                high rv
            endif
            delayms 1
            next
            inc tel
         until tel = 100        
     CASE 6: 
        lv = ON
        ra = on
     case 7:
        ra = on
     CASE 8: 
        la = ON
        ra = on
     case 9:
        la = on
     CASE ELSE     
     GOTO Start   ;Anders blijft LED continue branden als Systeem = EREAD 0, maar niet toets 0 - 9, hoort niet
    
   endselect

   GOSUB WachtOpToetsLosLaten
 ENDIF

GOTO Start


Programmeren:                 ;Nieuw systeem inprogrammeren
  EWRITE 0, [Systeem]         ;Sla het systeem op
  ProgramMode = FALSE

  FOR BD1 = 1 TO BlinkAantal * 2
    Lr = ~Lr                 ;Laat LED een paar maal knipperen
    DELAYMS BlinkTijdSnel
  NEXT

  GOSUB WachtOpToetsLosLaten
GOTO Start

end

Kunnen jullie me misschien ff helpen?
EDIT: In dit programma pwm't hij mijn 2 motoren voor 100ms.

Op 1 maart 2009 15:15:53 schreef bvbart:
Ik heb al een programmaatje op basis van de site picbsic.nl. Maar ik vind echt niet hoe ik het oplos.

Geeft dan op z'n minst aan wat je veranderd hebt. Of moet men dat ook nog zelf doen... En wat werkt er niet?

Hallo

Ik zal proberen te verduidelijken.

Alles werkt als ik op afstandsbediening rijdt. Het enige wat ik aan de code verandert heb is de namen van bepaalde dingen en de motoren die aan en uit moesten worden geschakeld.

Alles gaat perfect, ik vind alleen niet hoe ik mijn motoren pwm met de afstandsbediening.


case 5:        
         repeat    
            for teller = 0 to 255
            if teller > 180 then 
                low lv
            else 
                high lv
            endif
            if teller > 180 then 
                low rv
            else
                high rv
            endif
            delayms 1
            next
            inc tel
         until tel = 100 

Dit is het stuk waar ik pwm geprobeerd heb. Het werkt voor 100mS. Het is de bedoeling dat het pwm't zolang de toets ingedrukt is.

Ik heb de code van [url]http://www.picbasic.nl/[url/]

Bij projecten : Draadloze 10 kanalen ontvanger.

Ik hoop dat ik nu duidelijker ben geweest.

Iemand? Of ben ik onduidelijk?